xref: /honee/include/petsc_ops.h (revision 8a8cb6e06ce4728cc6d80ca92f8de31da49852e5)
1*ae2b091fSJames Wright // SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors.
2*ae2b091fSJames Wright // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause
318fb7758SJeremy L Thompson #pragma once
4f7325489SJames Wright 
5f7325489SJames Wright #include <ceed.h>
6f7325489SJames Wright #include <petscdm.h>
73170c09fSJames Wright #include <petscksp.h>
8f7325489SJames Wright 
9f7325489SJames Wright typedef struct OperatorApplyContext_ *OperatorApplyContext;
10f7325489SJames Wright struct OperatorApplyContext_ {
11f7325489SJames Wright   DM           dm_x, dm_y;
12f7325489SJames Wright   Vec          X_loc, Y_loc;
13f7325489SJames Wright   CeedVector   x_ceed, y_ceed;
14f7325489SJames Wright   CeedOperator op;
15f7325489SJames Wright   Ceed         ceed;
16f7325489SJames Wright };
17f7325489SJames Wright 
18f7325489SJames Wright PetscErrorCode OperatorApplyContextCreate(DM dm_x, DM dm_y, Ceed ceed, CeedOperator op_apply, CeedVector x_ceed, CeedVector y_ceed, Vec X_loc,
19f7325489SJames Wright                                           Vec Y_loc, OperatorApplyContext *op_apply_ctx);
20f7325489SJames Wright PetscErrorCode OperatorApplyContextDestroy(OperatorApplyContext op_apply_ctx);
21f7325489SJames Wright 
2254ae1419SJames Wright PetscErrorCode DMGetGlobalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
2354ae1419SJames Wright PetscErrorCode DMGetLocalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
2454ae1419SJames Wright 
256cbc221eSJames Wright PetscErrorCode CeedOperatorCreateLocalVecs(CeedOperator op, VecType vec_type, MPI_Comm comm, Vec *input, Vec *output);
266cbc221eSJames Wright VecType        DMReturnVecType(DM dm);
27f7325489SJames Wright 
28f7325489SJames Wright PetscErrorCode ApplyCeedOperatorGlobalToGlobal(Vec X, Vec Y, OperatorApplyContext ctx);
29f7325489SJames Wright PetscErrorCode ApplyCeedOperatorGlobalToLocal(Vec X, Vec Y_loc, OperatorApplyContext ctx);
30f7325489SJames Wright PetscErrorCode ApplyCeedOperatorLocalToGlobal(Vec X_loc, Vec Y, OperatorApplyContext ctx);
315ce09d65SJames Wright PetscErrorCode ApplyCeedOperatorLocalToLocal(Vec X_loc, Vec Y_loc, OperatorApplyContext ctx);
32f7325489SJames Wright PetscErrorCode ApplyAddCeedOperatorLocalToLocal(Vec X_loc, Vec Y_loc, OperatorApplyContext ctx);
33f7325489SJames Wright 
34ef3cb7e0SJames Wright PetscErrorCode DMGetLocalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
35ef3cb7e0SJames Wright PetscErrorCode DMGetGlobalVectorInfo(DM dm, PetscInt *local_size, PetscInt *global_size, VecType *vec_type);
363170c09fSJames Wright 
373170c09fSJames Wright PetscErrorCode CreateSolveOperatorsFromMatCeed(KSP ksp, Mat mat_ceed, PetscBool assemble, Mat *Amat, Mat *Pmat);
383170c09fSJames Wright PetscErrorCode KSPSetFromOptions_WithMatCeed(KSP ksp, Mat mat_ceed);
39