15aed82e4SJeremy L Thompson // Copyright (c) 2017-2024, Lawrence Livermore National Security, LLC and other CEED contributors. 224a65d3dSJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 324a65d3dSJeremy L Thompson // 424a65d3dSJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause 524a65d3dSJeremy L Thompson // 624a65d3dSJeremy L Thompson // This file is part of CEED: http://github.com/ceed 724a65d3dSJeremy L Thompson #pragma once 8c8564c30SJames Wright 9c8564c30SJames Wright #include <ceed.h> 10*5037d55dSJames Wright #include <petsc-ceed.h> 11c8564c30SJames Wright #include <petscdm.h> 12c8564c30SJames Wright #include <petscmat.h> 13c8564c30SJames Wright 14c8564c30SJames Wright #define MATCEED "ceed" 15c8564c30SJames Wright 16*5037d55dSJames Wright // Core functionality 17*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCreate(DM dm_x, DM dm_y, CeedOperator op_mult, CeedOperator op_mult_transpose, Mat *mat); 18*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCopy(Mat mat_ceed, Mat mat_other); 19*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCreateMatCOO(Mat mat_ceed, Mat *mat_coo); 20*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetPreallocationCOO(Mat mat_ceed, Mat mat_coo); 21*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedAssembleCOO(Mat mat_ceed, Mat mat_coo); 22c8564c30SJames Wright 23*5037d55dSJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedSetContextDouble(Mat mat, const char *name, double value); 24*5037d55dSJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedGetContextDouble(Mat mat, const char *name, double *value); 25c8564c30SJames Wright 26*5037d55dSJames Wright // Advanced functionality 27*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetContext(Mat mat, PetscErrorCode (*f)(void *), void *ctx); 28*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetContext(Mat mat, void *ctx); 29*5037d55dSJames Wright 30*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetOperation(Mat mat, MatOperation op, void (*g)(void)); 31*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetCOOMatType(Mat mat, MatType type); 32*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCOOMatType(Mat mat, MatType *type); 33*5037d55dSJames Wright 34*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLocalVectors(Mat mat, Vec X_loc, Vec Y_loc_transpose); 35*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose); 36*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose); 37*5037d55dSJames Wright 38*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose); 39*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose); 40*5037d55dSJames Wright 41*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLogEvents(Mat mat, PetscLogEvent log_event_mult, PetscLogEvent log_event_mult_transpose); 42*5037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLogEvents(Mat mat, PetscLogEvent *log_event_mult, PetscLogEvent *log_event_mult_transpose); 43