xref: /petsc/src/mat/impls/htool/htool.hpp (revision f782551b1f8d3be692086b9db2c8d374ed2ebee1)
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 {
12*f782551bSPierre Jolivet #if !PetscDefined(HAVE_OPENMP)
1398e73e17SPierre Jolivet     PetscFunctionBegin;
14*f782551bSPierre Jolivet #endif
159566063dSJacob Faibussowitsch     PetscCallAbort(PETSC_COMM_SELF,kernel(dim,M,N,rows,cols,ptr,ctx));
16*f782551bSPierre Jolivet #if !PetscDefined(HAVE_OPENMP)
1798e73e17SPierre Jolivet     PetscFunctionReturnVoid();
18*f782551bSPierre Jolivet #endif
1998e73e17SPierre Jolivet   }
20c7a4214aSPierre Jolivet };
21c7a4214aSPierre Jolivet 
22c7a4214aSPierre Jolivet struct Mat_Htool {
23c7a4214aSPierre Jolivet   PetscInt               dim;
24c7a4214aSPierre Jolivet   PetscReal              *gcoords_target;
25c7a4214aSPierre Jolivet   PetscReal              *gcoords_source;
26c7a4214aSPierre Jolivet   PetscScalar            *work_target;
27c7a4214aSPierre Jolivet   PetscScalar            *work_source;
28c7a4214aSPierre Jolivet   PetscScalar            s;
29c7a4214aSPierre Jolivet   PetscInt               bs[2];
30c7a4214aSPierre Jolivet   PetscReal              epsilon;
31c7a4214aSPierre Jolivet   PetscReal              eta;
32c7a4214aSPierre Jolivet   PetscInt               depth[2];
33c7a4214aSPierre Jolivet   MatHtoolCompressorType compressor;
3498e73e17SPierre Jolivet   MatHtoolClusteringType clustering;
35c7a4214aSPierre Jolivet   MatHtoolKernel         kernel;
36c7a4214aSPierre Jolivet   void*                  kernelctx;
37c7a4214aSPierre Jolivet   WrapperHtool           *wrapper;
3898e73e17SPierre Jolivet   htool::VirtualHMatrix<PetscScalar> *hmatrix;
39c7a4214aSPierre Jolivet };
40c7a4214aSPierre Jolivet 
41c7a4214aSPierre Jolivet struct MatHtoolKernelTranspose {
42c7a4214aSPierre Jolivet   Mat            A;
43c7a4214aSPierre Jolivet   MatHtoolKernel kernel;
44c7a4214aSPierre Jolivet   void*          kernelctx;
45c7a4214aSPierre Jolivet };
46