xref: /libCEED/examples/fluids/include/petsc_ops.h (revision 4021610ddd54d2077dba1164ccecc5411a2898fa)
1*4021610dSJames Wright // Copyright (c) 2017-2023, Lawrence Livermore National Security, LLC and other CEED contributors.
2*4021610dSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3*4021610dSJames Wright //
4*4021610dSJames Wright // SPDX-License-Identifier: BSD-2-Clause
5*4021610dSJames Wright //
6*4021610dSJames Wright // This file is part of CEED:  http://github.com/ceed
7*4021610dSJames Wright 
8*4021610dSJames Wright #ifndef petsc_ops_h
9*4021610dSJames Wright #define petsc_ops_h
10*4021610dSJames Wright 
11*4021610dSJames Wright #include <ceed.h>
12*4021610dSJames Wright #include <petscdm.h>
13*4021610dSJames Wright 
14*4021610dSJames Wright typedef struct OperatorApplyContext_ *OperatorApplyContext;
15*4021610dSJames Wright struct OperatorApplyContext_ {
16*4021610dSJames Wright   DM           dm_x, dm_y;
17*4021610dSJames Wright   Vec          X_loc, Y_loc;
18*4021610dSJames Wright   CeedVector   x_ceed, y_ceed;
19*4021610dSJames Wright   CeedOperator op;
20*4021610dSJames Wright   Ceed         ceed;
21*4021610dSJames Wright };
22*4021610dSJames Wright 
23*4021610dSJames Wright PetscErrorCode OperatorApplyContextCreate(DM dm_x, DM dm_y, Ceed ceed, CeedOperator op_apply, CeedVector x_ceed, CeedVector y_ceed, Vec X_loc,
24*4021610dSJames Wright                                           Vec Y_loc, OperatorApplyContext *op_apply_ctx);
25*4021610dSJames Wright PetscErrorCode OperatorApplyContextDestroy(OperatorApplyContext op_apply_ctx);
26*4021610dSJames Wright PetscErrorCode MatGetDiag_Ceed(Mat A, Vec D);
27*4021610dSJames Wright PetscErrorCode MatMult_Ceed(Mat A, Vec X, Vec Y);
28*4021610dSJames Wright 
29*4021610dSJames Wright PetscErrorCode VecP2C(Vec X_petsc, PetscMemType *mem_type, CeedVector x_ceed);
30*4021610dSJames Wright PetscErrorCode VecC2P(CeedVector x_ceed, PetscMemType mem_type, Vec X_petsc);
31*4021610dSJames Wright PetscErrorCode VecReadP2C(Vec X_petsc, PetscMemType *mem_type, CeedVector x_ceed);
32*4021610dSJames Wright PetscErrorCode VecReadC2P(CeedVector x_ceed, PetscMemType mem_type, Vec X_petsc);
33*4021610dSJames Wright PetscErrorCode VecCopyP2C(Vec X_petsc, CeedVector x_ceed);
34*4021610dSJames Wright 
35*4021610dSJames Wright PetscErrorCode ApplyCeedOperatorGlobalToGlobal(Vec X, Vec Y, OperatorApplyContext ctx);
36*4021610dSJames Wright PetscErrorCode ApplyCeedOperatorGlobalToLocal(Vec X, Vec Y_loc, OperatorApplyContext ctx);
37*4021610dSJames Wright PetscErrorCode ApplyCeedOperatorLocalToGlobal(Vec X_loc, Vec Y, OperatorApplyContext ctx);
38*4021610dSJames Wright PetscErrorCode ApplyAddCeedOperatorLocalToLocal(Vec X_loc, Vec Y_loc, OperatorApplyContext ctx);
39*4021610dSJames Wright 
40*4021610dSJames Wright #endif  // petsc_ops_h
41