1a4963045SJacob Faibussowitsch #pragma once 212facf1bSJunchao Zhang 312facf1bSJunchao Zhang #include <petsc/private/pcimpl.h> 412facf1bSJunchao Zhang 512facf1bSJunchao Zhang /* 612facf1bSJunchao Zhang Private context (data structure) for the PBJacobi preconditioner. 712facf1bSJunchao Zhang */ 812facf1bSJunchao Zhang typedef struct { 912facf1bSJunchao Zhang const MatScalar *diag; 1012facf1bSJunchao Zhang PetscInt bs, mbs; /* block size (bs), and number of blocks (mbs) */ 11*42ce410bSJunchao Zhang Mat diagPB; /* the matrix made of the diagonal blocks if some shell smatrix provided it; otherwise, NULL. Need to destroy it after use */ 1212facf1bSJunchao Zhang void *spptr; /* opaque pointer to a device data structure */ 1312facf1bSJunchao Zhang } PC_PBJacobi; 1412facf1bSJunchao Zhang 1512facf1bSJunchao Zhang #if defined(PETSC_HAVE_CUDA) 16*42ce410bSJunchao Zhang PETSC_INTERN PetscErrorCode PCSetUp_PBJacobi_CUDA(PC, Mat); 1712facf1bSJunchao Zhang #endif 1812facf1bSJunchao Zhang 1912facf1bSJunchao Zhang #if defined(PETSC_HAVE_KOKKOS_KERNELS) 20*42ce410bSJunchao Zhang PETSC_INTERN PetscErrorCode PCSetUp_PBJacobi_Kokkos(PC, Mat); 2112facf1bSJunchao Zhang #endif 2212facf1bSJunchao Zhang 23*42ce410bSJunchao Zhang PETSC_INTERN PetscErrorCode PCSetUp_PBJacobi_Host(PC, Mat); 2412facf1bSJunchao Zhang PETSC_INTERN PetscErrorCode PCDestroy_PBJacobi(PC); 25