xref: /petsc/src/ksp/pc/impls/vpbjacobi/vpbjacobi.h (revision 4a9974635a2580e0cbff88854d61b4e213d7618d)
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