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