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