xref: /petsc/src/mat/impls/htool/htool.hpp (revision 9566063d113dddea24716c546802770db7481bc0)
1c7a4214aSPierre Jolivet #include <petsc/private/matimpl.h>
2c7a4214aSPierre Jolivet #include <htool/misc/petsc.hpp>
3c7a4214aSPierre Jolivet 
4cab00e0dSPierre Jolivet class WrapperHtool : public htool::VirtualGenerator<PetscScalar> {
5c7a4214aSPierre Jolivet   PetscInt        dim;
6c7a4214aSPierre Jolivet   MatHtoolKernel& kernel;
7c7a4214aSPierre Jolivet   void*           ctx;
8c7a4214aSPierre Jolivet 
9c7a4214aSPierre Jolivet   public:
10cab00e0dSPierre Jolivet   WrapperHtool(PetscInt M,PetscInt N,PetscInt sdim,MatHtoolKernel& g,void* kernelctx) : VirtualGenerator(M,N), dim(sdim), kernel(g), ctx(kernelctx) { }
1198e73e17SPierre Jolivet   void copy_submatrix(PetscInt M, PetscInt N, const PetscInt *rows, const PetscInt *cols, PetscScalar *ptr) const {
1298e73e17SPierre Jolivet     PetscFunctionBegin;
13*9566063dSJacob Faibussowitsch     PetscCallAbort(PETSC_COMM_SELF,kernel(dim,M,N,rows,cols,ptr,ctx));
1498e73e17SPierre Jolivet     PetscFunctionReturnVoid();
1598e73e17SPierre Jolivet   }
16c7a4214aSPierre Jolivet };
17c7a4214aSPierre Jolivet 
18c7a4214aSPierre Jolivet struct Mat_Htool {
19c7a4214aSPierre Jolivet   PetscInt               dim;
20c7a4214aSPierre Jolivet   PetscReal              *gcoords_target;
21c7a4214aSPierre Jolivet   PetscReal              *gcoords_source;
22c7a4214aSPierre Jolivet   PetscScalar            *work_target;
23c7a4214aSPierre Jolivet   PetscScalar            *work_source;
24c7a4214aSPierre Jolivet   PetscScalar            s;
25c7a4214aSPierre Jolivet   PetscInt               bs[2];
26c7a4214aSPierre Jolivet   PetscReal              epsilon;
27c7a4214aSPierre Jolivet   PetscReal              eta;
28c7a4214aSPierre Jolivet   PetscInt               depth[2];
29c7a4214aSPierre Jolivet   MatHtoolCompressorType compressor;
3098e73e17SPierre Jolivet   MatHtoolClusteringType clustering;
31c7a4214aSPierre Jolivet   MatHtoolKernel         kernel;
32c7a4214aSPierre Jolivet   void*                  kernelctx;
33c7a4214aSPierre Jolivet   WrapperHtool           *wrapper;
3498e73e17SPierre Jolivet   htool::VirtualHMatrix<PetscScalar> *hmatrix;
35c7a4214aSPierre Jolivet };
36c7a4214aSPierre Jolivet 
37c7a4214aSPierre Jolivet struct MatHtoolKernelTranspose {
38c7a4214aSPierre Jolivet   Mat            A;
39c7a4214aSPierre Jolivet   MatHtoolKernel kernel;
40c7a4214aSPierre Jolivet   void*          kernelctx;
41c7a4214aSPierre Jolivet };
42