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