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