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