xref: /libCEED/examples/fluids/include/mat-ceed.h (revision f965f5c6f80d9786386ec853fb0e2bfd6c15b6b7)
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>
105037d55dSJames Wright #include <petsc-ceed.h>
11c8564c30SJames Wright #include <petscdm.h>
12c8564c30SJames Wright #include <petscmat.h>
13c8564c30SJames Wright 
14c8564c30SJames Wright #define MATCEED "ceed"
15c8564c30SJames Wright 
165037d55dSJames Wright // Core functionality
175037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCreate(DM dm_x, DM dm_y, CeedOperator op_mult, CeedOperator op_mult_transpose, Mat *mat);
185037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCopy(Mat mat_ceed, Mat mat_other);
195037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedCreateMatCOO(Mat mat_ceed, Mat *mat_coo);
205037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetPreallocationCOO(Mat mat_ceed, Mat mat_coo);
215037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedAssembleCOO(Mat mat_ceed, Mat mat_coo);
22c8564c30SJames Wright 
235037d55dSJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedSetContextDouble(Mat mat, const char *name, double value);
245037d55dSJames Wright PETSC_CEED_INTERN PetscErrorCode MatCeedGetContextDouble(Mat mat, const char *name, double *value);
25c8564c30SJames Wright 
265037d55dSJames Wright // Advanced functionality
275037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetContext(Mat mat, PetscErrorCode (*f)(void *), void *ctx);
285037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetContext(Mat mat, void *ctx);
29*f965f5c6SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetContextReal(Mat mat, const char *name, PetscReal value);
30*f965f5c6SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetContextReal(Mat mat, const char *name, PetscReal *value);
315037d55dSJames Wright 
325037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetOperation(Mat mat, MatOperation op, void (*g)(void));
335037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetCOOMatType(Mat mat, MatType type);
345037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCOOMatType(Mat mat, MatType *type);
355037d55dSJames Wright 
365037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLocalVectors(Mat mat, Vec X_loc, Vec Y_loc_transpose);
375037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose);
385037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreLocalVectors(Mat mat, Vec *X_loc, Vec *Y_loc_transpose);
395037d55dSJames Wright 
405037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose);
415037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedRestoreCeedOperators(Mat mat, CeedOperator *op_mult, CeedOperator *op_mult_transpose);
425037d55dSJames Wright 
435037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedSetLogEvents(Mat mat, PetscLogEvent log_event_mult, PetscLogEvent log_event_mult_transpose);
445037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedGetLogEvents(Mat mat, PetscLogEvent *log_event_mult, PetscLogEvent *log_event_mult_transpose);
45