1a4963045SJacob Faibussowitsch #pragma once 2f1be3500SJunchao Zhang 3f1be3500SJunchao Zhang #include <petsc/private/pcimpl.h> 4f1be3500SJunchao Zhang 5f1be3500SJunchao Zhang /* 6f1be3500SJunchao Zhang Private context (data structure) for the VPBJacobi preconditioner. 7f1be3500SJunchao Zhang */ 8f1be3500SJunchao Zhang typedef struct { 90a94ea6bSJed Brown PetscInt nblocks, min_bs, max_bs; // Stats recorded during setup for viewing 10f1be3500SJunchao Zhang MatScalar *diag; /* on host */ 11*42ce410bSJunchao Zhang Mat diagVPB; /* the matrix made of the diagonal blocks if some shell matrix provided it; otherwise, NULL. Need to destroy it after use */ 12f1be3500SJunchao Zhang void *spptr; /* offload to devices */ 13f1be3500SJunchao Zhang } PC_VPBJacobi; 14f1be3500SJunchao Zhang 15f1be3500SJunchao Zhang #if defined(PETSC_HAVE_CUDA) 16*42ce410bSJunchao Zhang PETSC_INTERN PetscErrorCode PCSetUp_VPBJacobi_CUDA(PC, Mat); 17f1be3500SJunchao Zhang #endif 18f1be3500SJunchao Zhang 19f1be3500SJunchao Zhang #if defined(PETSC_HAVE_KOKKOS_KERNELS) 20*42ce410bSJunchao Zhang PETSC_INTERN PetscErrorCode PCSetUp_VPBJacobi_Kokkos(PC, Mat); 21f1be3500SJunchao Zhang #endif 22f1be3500SJunchao Zhang 23*42ce410bSJunchao Zhang PETSC_INTERN PetscErrorCode PCSetUp_VPBJacobi_Host(PC, Mat); 24f1be3500SJunchao Zhang PETSC_INTERN PetscErrorCode PCDestroy_VPBJacobi(PC); 25