xref: /libCEED/examples/fluids/include/petsc_ops.h (revision 7f2a93030e798875971a84e5c64071653e0488c9)
14021610dSJames Wright // Copyright (c) 2017-2023, Lawrence Livermore National Security, LLC and other CEED contributors.
24021610dSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
34021610dSJames Wright //
44021610dSJames Wright // SPDX-License-Identifier: BSD-2-Clause
54021610dSJames Wright //
64021610dSJames Wright // This file is part of CEED:  http://github.com/ceed
74021610dSJames Wright 
84021610dSJames Wright #ifndef petsc_ops_h
94021610dSJames Wright #define petsc_ops_h
104021610dSJames Wright 
114021610dSJames Wright #include <ceed.h>
124021610dSJames Wright #include <petscdm.h>
13*7f2a9303SJames Wright #include <petscksp.h>
144021610dSJames Wright 
154021610dSJames Wright typedef struct OperatorApplyContext_ *OperatorApplyContext;
164021610dSJames Wright struct OperatorApplyContext_ {
174021610dSJames Wright   DM           dm_x, dm_y;
184021610dSJames Wright   Vec          X_loc, Y_loc;
194021610dSJames Wright   CeedVector   x_ceed, y_ceed;
204021610dSJames Wright   CeedOperator op;
214021610dSJames Wright   Ceed         ceed;
224021610dSJames Wright };
234021610dSJames Wright 
244021610dSJames Wright PetscErrorCode OperatorApplyContextCreate(DM dm_x, DM dm_y, Ceed ceed, CeedOperator op_apply, CeedVector x_ceed, CeedVector y_ceed, Vec X_loc,
254021610dSJames Wright                                           Vec Y_loc, OperatorApplyContext *op_apply_ctx);
264021610dSJames Wright PetscErrorCode OperatorApplyContextDestroy(OperatorApplyContext op_apply_ctx);
27b35d522bSJames Wright PetscErrorCode CreateMatShell_Ceed(OperatorApplyContext ctx, Mat *mat);
284021610dSJames Wright 
29650a5d66SJames Wright PetscErrorCode DMGetGlobalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
30650a5d66SJames Wright PetscErrorCode DMGetLocalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
31650a5d66SJames Wright 
324021610dSJames Wright PetscErrorCode VecP2C(Vec X_petsc, PetscMemType *mem_type, CeedVector x_ceed);
334021610dSJames Wright PetscErrorCode VecC2P(CeedVector x_ceed, PetscMemType mem_type, Vec X_petsc);
344021610dSJames Wright PetscErrorCode VecReadP2C(Vec X_petsc, PetscMemType *mem_type, CeedVector x_ceed);
354021610dSJames Wright PetscErrorCode VecReadC2P(CeedVector x_ceed, PetscMemType mem_type, Vec X_petsc);
364021610dSJames Wright PetscErrorCode VecCopyP2C(Vec X_petsc, CeedVector x_ceed);
374210c567SJames Wright PetscErrorCode CeedOperatorCreateLocalVecs(CeedOperator op, VecType vec_type, MPI_Comm comm, Vec *input, Vec *output);
384210c567SJames Wright VecType        DMReturnVecType(DM dm);
394021610dSJames Wright 
404021610dSJames Wright PetscErrorCode ApplyCeedOperatorGlobalToGlobal(Vec X, Vec Y, OperatorApplyContext ctx);
414021610dSJames Wright PetscErrorCode ApplyCeedOperatorGlobalToLocal(Vec X, Vec Y_loc, OperatorApplyContext ctx);
424021610dSJames Wright PetscErrorCode ApplyCeedOperatorLocalToGlobal(Vec X_loc, Vec Y, OperatorApplyContext ctx);
4393567eeaSJames Wright PetscErrorCode ApplyCeedOperatorLocalToLocal(Vec X_loc, Vec Y_loc, OperatorApplyContext ctx);
444021610dSJames Wright PetscErrorCode ApplyAddCeedOperatorLocalToLocal(Vec X_loc, Vec Y_loc, OperatorApplyContext ctx);
454021610dSJames Wright 
466f7ff1d2SJames Wright PetscErrorCode DMGetLocalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
476f7ff1d2SJames Wright PetscErrorCode DMGetGlobalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
48*7f2a9303SJames Wright 
49*7f2a9303SJames Wright PetscErrorCode CreateSolveOperatorsFromMatCeed(KSP ksp, Mat mat_ceed, PetscBool assemble, Mat *Amat, Mat *Pmat);
50*7f2a9303SJames Wright PetscErrorCode KSPSetFromOptions_WithMatCeed(KSP ksp, Mat mat_ceed);
514021610dSJames Wright #endif  // petsc_ops_h
52