Actual source code: htool.hpp
1: #include <petsc/private/matimpl.h>
2: #include <htool/misc/petsc.hpp>
4: class WrapperHtool : public htool::VirtualGenerator<PetscScalar> {
5: PetscInt dim;
6: MatHtoolKernel &kernel;
7: void *ctx;
9: public:
10: WrapperHtool(PetscInt M, PetscInt N, PetscInt sdim, MatHtoolKernel &g, void *kernelctx) : VirtualGenerator(M, N), dim(sdim), kernel(g), ctx(kernelctx) { }
11: void copy_submatrix(PetscInt M, PetscInt N, const PetscInt *rows, const PetscInt *cols, PetscScalar *ptr) const
12: {
13: #if !PetscDefined(HAVE_OPENMP)
14: PetscFunctionBegin;
15: #endif
16: PetscCallAbort(PETSC_COMM_SELF, kernel(dim, M, N, rows, cols, ptr, ctx));
17: #if !PetscDefined(HAVE_OPENMP)
18: PetscFunctionReturnVoid();
19: #endif
20: }
21: };
23: struct Mat_Htool {
24: PetscInt dim;
25: PetscReal *gcoords_target;
26: PetscReal *gcoords_source;
27: PetscScalar *work_target;
28: PetscScalar *work_source;
29: PetscScalar s;
30: PetscInt bs[2];
31: PetscReal epsilon;
32: PetscReal eta;
33: PetscInt depth[2];
34: MatHtoolCompressorType compressor;
35: MatHtoolClusteringType clustering;
36: MatHtoolKernel kernel;
37: void *kernelctx;
38: WrapperHtool *wrapper;
39: htool::VirtualHMatrix<PetscScalar> *hmatrix;
40: };
42: struct MatHtoolKernelTranspose {
43: Mat A;
44: MatHtoolKernel kernel;
45: void *kernelctx;
46: };