xref: /petsc/src/mat/impls/htool/htool.hpp (revision c7a4214aa78cb41fbd20979609c6a6680968e7d6)
1*c7a4214aSPierre Jolivet #include <petsc/private/matimpl.h>
2*c7a4214aSPierre Jolivet #include <htool/misc/petsc.hpp>
3*c7a4214aSPierre Jolivet 
4*c7a4214aSPierre Jolivet class WrapperHtool : public htool::IMatrix<PetscScalar> {
5*c7a4214aSPierre Jolivet   PetscInt        dim;
6*c7a4214aSPierre Jolivet   MatHtoolKernel& kernel;
7*c7a4214aSPierre Jolivet   void*           ctx;
8*c7a4214aSPierre Jolivet 
9*c7a4214aSPierre Jolivet   public:
10*c7a4214aSPierre Jolivet   WrapperHtool(PetscInt M,PetscInt N,PetscInt sdim,MatHtoolKernel& g,void* kernelctx) : IMatrix(M,N), dim(sdim), kernel(g), ctx(kernelctx) { }
11*c7a4214aSPierre Jolivet   PetscScalar get_coef(const PetscInt& i,const PetscInt& j) const { return kernel(dim,i,j,ctx); }
12*c7a4214aSPierre Jolivet };
13*c7a4214aSPierre Jolivet 
14*c7a4214aSPierre Jolivet struct Mat_Htool {
15*c7a4214aSPierre Jolivet   PetscInt               dim;
16*c7a4214aSPierre Jolivet   PetscReal              *gcoords_target;
17*c7a4214aSPierre Jolivet   PetscReal              *gcoords_source;
18*c7a4214aSPierre Jolivet   PetscScalar            *work_target;
19*c7a4214aSPierre Jolivet   PetscScalar            *work_source;
20*c7a4214aSPierre Jolivet   PetscScalar            s;
21*c7a4214aSPierre Jolivet   PetscInt               bs[2];
22*c7a4214aSPierre Jolivet   PetscReal              epsilon;
23*c7a4214aSPierre Jolivet   PetscReal              eta;
24*c7a4214aSPierre Jolivet   PetscInt               depth[2];
25*c7a4214aSPierre Jolivet   MatHtoolCompressorType compressor;
26*c7a4214aSPierre Jolivet   MatHtoolKernel         kernel;
27*c7a4214aSPierre Jolivet   void*                  kernelctx;
28*c7a4214aSPierre Jolivet   WrapperHtool           *wrapper;
29*c7a4214aSPierre Jolivet   htool::HMatrixVirtual<PetscScalar> *hmatrix;
30*c7a4214aSPierre Jolivet };
31*c7a4214aSPierre Jolivet 
32*c7a4214aSPierre Jolivet struct MatHtoolKernelTranspose {
33*c7a4214aSPierre Jolivet   Mat            A;
34*c7a4214aSPierre Jolivet   MatHtoolKernel kernel;
35*c7a4214aSPierre Jolivet   void*          kernelctx;
36*c7a4214aSPierre Jolivet };
37