xref: /honee/include/mat-ceed.h (revision c63b910fa7a793fc9e5914451e74158ea05ce0bb)
1dc936754SJeremy L Thompson // Copyright (c) 2017-2024, Lawrence Livermore National Security, LLC and other CEED contributors.
218fb7758SJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
318fb7758SJeremy L Thompson //
418fb7758SJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause
518fb7758SJeremy L Thompson //
618fb7758SJeremy L Thompson // This file is part of CEED:  http://github.com/ceed
718fb7758SJeremy L Thompson #pragma once
858600ac3SJames Wright 
958600ac3SJames Wright #include <ceed.h>
1040d80af1SJames Wright #include <petsc-ceed.h>
1158600ac3SJames Wright #include <petscdm.h>
1258600ac3SJames Wright #include <petscmat.h>
1358600ac3SJames Wright 
1458600ac3SJames Wright #define MATCEED "ceed"
1558600ac3SJames Wright 
1640d80af1SJames Wright // Core functionality
1740d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCreate(DM dm_x, DM dm_y, CeedOperator op_mult, CeedOperator op_mult_transpose, Mat *mat);
1840d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCopy(Mat mat_ceed, Mat mat_other);
1940d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCreateMatCOO(Mat mat_ceed, Mat *mat_coo);
2040d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetPreallocationCOO(Mat mat_ceed, Mat mat_coo);
2140d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedAssembleCOO(Mat mat_ceed, Mat mat_coo);
2258600ac3SJames Wright 
2340d80af1SJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedSetContextDouble(Mat mat, const char *name, double value);
2440d80af1SJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedGetContextDouble(Mat mat, const char *name, double *value);
2558600ac3SJames Wright 
2640d80af1SJames Wright // Advanced functionality
2740d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetContext(Mat mat, PetscErrorCode (*f)(void *), void *ctx);
2840d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetContext(Mat mat, void *ctx);
2951bb547fSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetContextReal(Mat mat, const char *name, PetscReal value);
3051bb547fSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetContextReal(Mat mat, const char *name, PetscReal *value);
3140d80af1SJames Wright 
3240d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetOperation(Mat mat, MatOperation op, void (*g)(void));
3340d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetCOOMatType(Mat mat, MatType type);
3440d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCOOMatType(Mat mat, MatType *type);
3540d80af1SJames Wright 
3640d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLocalVectors(Mat mat, Vec X_loc, Vec Y_loc_transpose);
3740d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose);
3840d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose);
3940d80af1SJames Wright 
4040d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose);
4140d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose);
4240d80af1SJames Wright 
4340d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLogEvents(Mat mat, PetscLogEvent log_event_mult, PetscLogEvent log_event_mult_transpose);
4440d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLogEvents(Mat mat, PetscLogEvent *log_event_mult, PetscLogEvent *log_event_mult_transpose);
45*c63b910fSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetCeedOperatorLogEvents(Mat mat, PetscLogEvent log_event_mult, PetscLogEvent log_event_mult_transpose);
46*c63b910fSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCeedOperatorLogEvents(Mat mat, PetscLogEvent *log_event_mult, PetscLogEvent *log_event_mult_transpose);
47