1ae2b091fSJames Wright // SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors. 2ae2b091fSJames Wright // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause 318fb7758SJeremy L Thompson #pragma once 458600ac3SJames Wright 558600ac3SJames Wright #include <ceed.h> 640d80af1SJames Wright #include <petsc-ceed.h> 758600ac3SJames Wright #include <petscdm.h> 858600ac3SJames Wright #include <petscmat.h> 958600ac3SJames Wright 1058600ac3SJames Wright #define MATCEED "ceed" 1158600ac3SJames Wright 1240d80af1SJames Wright // Core functionality 13000d2032SJeremy L Thompson PETSC_CEED_EXTERN PetscErrorCode MatCreateCeed(DM dm_x, DM dm_y, CeedOperator op_mult, CeedOperator op_mult_transpose, Mat *mat); 1440d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCopy(Mat mat_ceed, Mat mat_other); 15000d2032SJeremy L Thompson PETSC_CEED_EXTERN PetscErrorCode MatCeedSetAssemblyDataUpdateNeeded(Mat mat_ceed, PetscBool update_needed); 1640d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCreateMatCOO(Mat mat_ceed, Mat *mat_coo); 1740d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetPreallocationCOO(Mat mat_ceed, Mat mat_coo); 1840d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedAssembleCOO(Mat mat_ceed, Mat mat_coo); 1958600ac3SJames Wright 2040d80af1SJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedSetContextDouble(Mat mat, const char *name, double value); 2140d80af1SJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedGetContextDouble(Mat mat, const char *name, double *value); 22000d2032SJeremy L Thompson PETSC_CEED_EXTERN PetscErrorCode MatCeedSetContextReal(Mat mat, const char *name, PetscReal value); 23000d2032SJeremy L Thompson PETSC_CEED_EXTERN PetscErrorCode MatCeedGetContextReal(Mat mat, const char *name, PetscReal *value); 24000d2032SJeremy L Thompson PETSC_CEED_INTERN PetscErrorCode MatCeedSetTime(Mat mat, PetscReal time); 25000d2032SJeremy L Thompson PETSC_CEED_INTERN PetscErrorCode MatCeedGetTime(Mat mat, PetscReal *time); 26000d2032SJeremy L Thompson PETSC_CEED_INTERN PetscErrorCode MatCeedSetDt(Mat mat, PetscReal dt); 27000d2032SJeremy L Thompson PETSC_CEED_INTERN PetscErrorCode MatCeedSetShifts(Mat mat, PetscReal shift_v, PetscReal shift_a); 2858600ac3SJames Wright 2940d80af1SJames Wright // Advanced functionality 3067aa9f91SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetContext(Mat mat, PetscCtxDestroyFn f, void *ctx); 3140d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetContext(Mat mat, void *ctx); 3240d80af1SJames Wright 33*b846ad1aSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetOperation(Mat mat, MatOperation op, void (*g)(void)); 3440d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetCOOMatType(Mat mat, MatType type); 3540d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCOOMatType(Mat mat, MatType *type); 36*b846ad1aSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetReusePreallocationCOO(Mat mat, PetscBool coo_reuse_preallocation); 37*b846ad1aSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetReusePreallocationCOO(Mat mat, PetscBool *coo_reuse_preallocation); 3840d80af1SJames Wright 3940d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLocalVectors(Mat mat, Vec X_loc, Vec Y_loc_transpose); 4040d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose); 4140d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose); 4240d80af1SJames Wright 4340d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose); 4440d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose); 4540d80af1SJames Wright 4640d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLogEvents(Mat mat, PetscLogEvent log_event_mult, PetscLogEvent log_event_mult_transpose); 4740d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLogEvents(Mat mat, PetscLogEvent *log_event_mult, PetscLogEvent *log_event_mult_transpose); 48c63b910fSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetCeedOperatorLogEvents(Mat mat, PetscLogEvent log_event_mult, PetscLogEvent log_event_mult_transpose); 49c63b910fSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCeedOperatorLogEvents(Mat mat, PetscLogEvent *log_event_mult, PetscLogEvent *log_event_mult_transpose); 50