fmm_gll.hpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <mpi.h>
  2. #include <pvfmm_common.hpp>
  3. #ifndef _PVFMM_FMM_GLL_HPP_
  4. #define _PVFMM_FMM_GLL_HPP_
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. typedef struct{
  9. MPI_Comm comm;
  10. int gll_order;
  11. int cheb_order;
  12. int multipole_order;
  13. void* fmm_mat_biotsavart;
  14. const void* kernel_biotsavart;
  15. void* tree_biotsavart;
  16. void* fmm_mat_laplace_grad;
  17. const void* kernel_laplace_grad;
  18. void* tree_laplace_grad;
  19. void* gll_nodes;
  20. }FMM_GLL_t;
  21. void fmm_gll_init(FMM_GLL_t* fmm_data, int gll_order, int cheb_order, int multipole_order, MPI_Comm comm);
  22. void fmm_gll_free(FMM_GLL_t* fmm_data);
  23. void fmm_gll_run(FMM_GLL_t* fmm_data, size_t K, double* node_coord, unsigned char* node_depth, double** node_gll_data);
  24. void fmm_gll_laplace_grad(FMM_GLL_t* fmm_data, size_t K, double* node_coord, unsigned char* node_depth, double** node_gll_data);
  25. void gll_div(FMM_GLL_t* fmm_data, size_t K, double* node_coord, unsigned char* node_depth, double** node_gll_data);
  26. void gll_divfree(FMM_GLL_t* fmm_data, size_t K, double* node_coord, unsigned char* node_depth, double** node_gll_data);
  27. void gll_filter(FMM_GLL_t* fmm_data, int cheb_order, size_t node_cnt, double** node_gll_data, double* err);
  28. void gll_interpolate(FMM_GLL_t* fmm_data, size_t node_cnt, double* node_coord, unsigned char* node_depth, double** node_gll_data);
  29. #ifdef __cplusplus
  30. }
  31. #endif
  32. #endif //_PVFMM_FMM_GLL_HPP_