1*24a65d3dSJeremy L Thompson // Copyright (c) 2017-2023, Lawrence Livermore National Security, LLC and other CEED contributors. 2*24a65d3dSJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3*24a65d3dSJeremy L Thompson // 4*24a65d3dSJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause 5*24a65d3dSJeremy L Thompson // 6*24a65d3dSJeremy L Thompson // This file is part of CEED: http://github.com/ceed 7*24a65d3dSJeremy L Thompson #pragma once 8c8564c30SJames Wright 9c8564c30SJames Wright #include <ceed.h> 10c8564c30SJames Wright #include <petscdm.h> 11c8564c30SJames Wright #include <petscmat.h> 12c8564c30SJames Wright 13c8564c30SJames Wright #define MATCEED "ceed" 14c8564c30SJames Wright 15c8564c30SJames Wright #if defined(__clang_analyzer__) 16c8564c30SJames Wright #define MATCEED_EXTERN extern 17c8564c30SJames Wright #elif defined(__cplusplus) 18c8564c30SJames Wright #define MATCEED_EXTERN extern "C" 19c8564c30SJames Wright #else 20c8564c30SJames Wright #define MATCEED_EXTERN extern 21c8564c30SJames Wright #endif 22c8564c30SJames Wright 23c8564c30SJames Wright #if defined(__clang_analyzer__) 24c8564c30SJames Wright #define MATCEED_INTERN 25c8564c30SJames Wright #else 26c8564c30SJames Wright #define MATCEED_INTERN MATCEED_EXTERN __attribute__((visibility("hidden"))) 27c8564c30SJames Wright #endif 28c8564c30SJames Wright 29c8564c30SJames Wright // Context data 30c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedCreate(DM dm_x, DM dm_y, CeedOperator op_mult, CeedOperator op_mult_transpose, Mat *mat); 31c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedCopy(Mat mat_ceed, Mat mat_other); 32c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedAssembleCOO(Mat mat_ceed, Mat mat_coo); 33c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedSetContext(Mat mat, PetscErrorCode (*f)(void *), void *ctx); 34c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedGetContext(Mat mat, void *ctx); 35c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedSetInnerMatType(Mat mat, MatType type); 36c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedGetInnerMatType(Mat mat, MatType *type); 37c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedSetOperation(Mat mat, MatOperation op, void (*g)(void)); 38c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedSetLocalVectors(Mat mat, Vec X_loc, Vec Y_loc_transpose); 39c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedGetLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose); 40c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedRestoreLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose); 41c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedGetCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose); 42c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedRestoreCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose); 43c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedSetLogEvents(Mat mat, PetscLogEvent log_event_mult, PetscLogEvent log_event_mult_transpose); 44c8564c30SJames Wright MATCEED_INTERN PetscErrorCode MatCeedGetLogEvents(Mat mat, PetscLogEvent *log_event_mult, PetscLogEvent *log_event_mult_transpose); 45