1*4021610dSJames Wright // Copyright (c) 2017-2023, Lawrence Livermore National Security, LLC and other CEED contributors. 2*4021610dSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3*4021610dSJames Wright // 4*4021610dSJames Wright // SPDX-License-Identifier: BSD-2-Clause 5*4021610dSJames Wright // 6*4021610dSJames Wright // This file is part of CEED: http://github.com/ceed 7*4021610dSJames Wright 8*4021610dSJames Wright #ifndef petsc_ops_h 9*4021610dSJames Wright #define petsc_ops_h 10*4021610dSJames Wright 11*4021610dSJames Wright #include <ceed.h> 12*4021610dSJames Wright #include <petscdm.h> 13*4021610dSJames Wright 14*4021610dSJames Wright typedef struct OperatorApplyContext_ *OperatorApplyContext; 15*4021610dSJames Wright struct OperatorApplyContext_ { 16*4021610dSJames Wright DM dm_x, dm_y; 17*4021610dSJames Wright Vec X_loc, Y_loc; 18*4021610dSJames Wright CeedVector x_ceed, y_ceed; 19*4021610dSJames Wright CeedOperator op; 20*4021610dSJames Wright Ceed ceed; 21*4021610dSJames Wright }; 22*4021610dSJames Wright 23*4021610dSJames Wright PetscErrorCode OperatorApplyContextCreate(DM dm_x, DM dm_y, Ceed ceed, CeedOperator op_apply, CeedVector x_ceed, CeedVector y_ceed, Vec X_loc, 24*4021610dSJames Wright Vec Y_loc, OperatorApplyContext *op_apply_ctx); 25*4021610dSJames Wright PetscErrorCode OperatorApplyContextDestroy(OperatorApplyContext op_apply_ctx); 26*4021610dSJames Wright PetscErrorCode MatGetDiag_Ceed(Mat A, Vec D); 27*4021610dSJames Wright PetscErrorCode MatMult_Ceed(Mat A, Vec X, Vec Y); 28*4021610dSJames Wright 29*4021610dSJames Wright PetscErrorCode VecP2C(Vec X_petsc, PetscMemType *mem_type, CeedVector x_ceed); 30*4021610dSJames Wright PetscErrorCode VecC2P(CeedVector x_ceed, PetscMemType mem_type, Vec X_petsc); 31*4021610dSJames Wright PetscErrorCode VecReadP2C(Vec X_petsc, PetscMemType *mem_type, CeedVector x_ceed); 32*4021610dSJames Wright PetscErrorCode VecReadC2P(CeedVector x_ceed, PetscMemType mem_type, Vec X_petsc); 33*4021610dSJames Wright PetscErrorCode VecCopyP2C(Vec X_petsc, CeedVector x_ceed); 34*4021610dSJames Wright 35*4021610dSJames Wright PetscErrorCode ApplyCeedOperatorGlobalToGlobal(Vec X, Vec Y, OperatorApplyContext ctx); 36*4021610dSJames Wright PetscErrorCode ApplyCeedOperatorGlobalToLocal(Vec X, Vec Y_loc, OperatorApplyContext ctx); 37*4021610dSJames Wright PetscErrorCode ApplyCeedOperatorLocalToGlobal(Vec X_loc, Vec Y, OperatorApplyContext ctx); 38*4021610dSJames Wright PetscErrorCode ApplyAddCeedOperatorLocalToLocal(Vec X_loc, Vec Y_loc, OperatorApplyContext ctx); 39*4021610dSJames Wright 40*4021610dSJames Wright #endif // petsc_ops_h 41