fmm_gll.hpp 1.4 KB

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