xref: /petsc/src/mat/impls/htool/htool.hpp (revision 3ea99036a5fedea4d39e7e77471d0ab500c249d7)
1*3ea99036SJacob Faibussowitsch #ifndef HTOOL_HPP
2*3ea99036SJacob Faibussowitsch #define HTOOL_HPP
3*3ea99036SJacob Faibussowitsch 
4c7a4214aSPierre Jolivet #include <petsc/private/matimpl.h>
5c7a4214aSPierre Jolivet #include <htool/misc/petsc.hpp>
6c7a4214aSPierre Jolivet 
7cab00e0dSPierre Jolivet class WrapperHtool : public htool::VirtualGenerator<PetscScalar> {
8c7a4214aSPierre Jolivet   PetscInt        dim;
9c7a4214aSPierre Jolivet   MatHtoolKernel &kernel;
10c7a4214aSPierre Jolivet   void           *ctx;
11c7a4214aSPierre Jolivet 
12c7a4214aSPierre Jolivet public:
13cab00e0dSPierre Jolivet   WrapperHtool(PetscInt M, PetscInt N, PetscInt sdim, MatHtoolKernel &g, void *kernelctx) : VirtualGenerator(M, N), dim(sdim), kernel(g), ctx(kernelctx) { }
14d71ae5a4SJacob Faibussowitsch   void copy_submatrix(PetscInt M, PetscInt N, const PetscInt *rows, const PetscInt *cols, PetscScalar *ptr) const
15d71ae5a4SJacob Faibussowitsch   {
16f782551bSPierre Jolivet #if !PetscDefined(HAVE_OPENMP)
1798e73e17SPierre Jolivet     PetscFunctionBegin;
18f782551bSPierre Jolivet #endif
199566063dSJacob Faibussowitsch     PetscCallAbort(PETSC_COMM_SELF, kernel(dim, M, N, rows, cols, ptr, ctx));
20f782551bSPierre Jolivet #if !PetscDefined(HAVE_OPENMP)
2198e73e17SPierre Jolivet     PetscFunctionReturnVoid();
22f782551bSPierre Jolivet #endif
2398e73e17SPierre Jolivet   }
24c7a4214aSPierre Jolivet };
25c7a4214aSPierre Jolivet 
26c7a4214aSPierre Jolivet struct Mat_Htool {
27c7a4214aSPierre Jolivet   PetscInt                            dim;
28c7a4214aSPierre Jolivet   PetscReal                          *gcoords_target;
29c7a4214aSPierre Jolivet   PetscReal                          *gcoords_source;
30c7a4214aSPierre Jolivet   PetscScalar                        *work_target;
31c7a4214aSPierre Jolivet   PetscScalar                        *work_source;
32c7a4214aSPierre Jolivet   PetscScalar                         s;
33c7a4214aSPierre Jolivet   PetscInt                            bs[2];
34c7a4214aSPierre Jolivet   PetscReal                           epsilon;
35c7a4214aSPierre Jolivet   PetscReal                           eta;
36c7a4214aSPierre Jolivet   PetscInt                            depth[2];
37c7a4214aSPierre Jolivet   MatHtoolCompressorType              compressor;
3898e73e17SPierre Jolivet   MatHtoolClusteringType              clustering;
39c7a4214aSPierre Jolivet   MatHtoolKernel                      kernel;
40c7a4214aSPierre Jolivet   void                               *kernelctx;
41c7a4214aSPierre Jolivet   WrapperHtool                       *wrapper;
4298e73e17SPierre Jolivet   htool::VirtualHMatrix<PetscScalar> *hmatrix;
43c7a4214aSPierre Jolivet };
44c7a4214aSPierre Jolivet 
45c7a4214aSPierre Jolivet struct MatHtoolKernelTranspose {
46c7a4214aSPierre Jolivet   Mat            A;
47c7a4214aSPierre Jolivet   MatHtoolKernel kernel;
48c7a4214aSPierre Jolivet   void          *kernelctx;
49c7a4214aSPierre Jolivet };
50*3ea99036SJacob Faibussowitsch 
51*3ea99036SJacob Faibussowitsch #endif
52