fmm_gll.hpp 1.4 KB

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