XGCa
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fourier_filter.hpp
Go to the documentation of this file.
1 #ifndef FOURIER_FILTER_HPP
2 #define FOURIER_FILTER_HPP
3 
4 #include "grid.hpp"
6 #include "plasma.hpp"
7 #include "complex.hpp"
8 #include "FFT_wrapper.hpp"
10 
11 // Temporary views, preallocated for reuse by each OMP thread
13  View<double*,CLayout,HostType> tmp;
14  View<int*,CLayout,HostType> node_mapping;
15  View<double*,CLayout,HostType> tmp2;
16  View<double*,CLayout,HostType> theta;
17  View<double*,CLayout,HostType> win;
18  View<Complex**,CLayout,HostType> spec;
19 
21 
22  FilterTmpViews(int n_dim2, int n_max)
23  : tmp(NoInit("tmp"), n_max),
24  node_mapping(NoInit("node_mapping"), n_max),
25  tmp2(NoInit("tmp2"), n_max),
26  theta(NoInit("theta"), n_max),
27  win(NoInit("win"), n_max),
28  spec(NoInit("spec"), n_dim2, n_max){}
29 
30  // Create a view that is the size needed for a specific surface
31  static const View<double*,CLayout,HostType> view(const View<double*,CLayout,HostType>& in, int n){
32  return View<double*,CLayout,HostType, Kokkos::MemoryTraits<Kokkos::Unmanaged>>(in.data(), n);
33  }
34 
35  static const View<int*,CLayout,HostType> view(const View<int*,CLayout,HostType>& in, int n){
36  return View<int*,CLayout,HostType, Kokkos::MemoryTraits<Kokkos::Unmanaged>>(in.data(), n);
37  }
38 
39  static const View<Complex**,CLayout,HostType> view(const View<Complex**,CLayout,HostType>& in, int n_dim2, int n){
40  return View<Complex**,CLayout,HostType, Kokkos::MemoryTraits<Kokkos::Unmanaged>>(in.data(), n_dim2, n);
41  }
42 };
43 
45  public:
47  BlendWindow=0,
50  };
51 
52  struct Options{
53  double inpsi;
54  double outpsi;
55  double bd_width;
56  int minm;
57  int maxm;
60  int ntor_real;
62  };
63 
64  private:
65  View<bool*,CLayout,HostType> run_filter;
66  int mres_q;
68  View<int*,CLayout,HostType> m_limit;
69  View<bool*,CLayout,HostType> is_periodic;
70  View<int*,CLayout,HostType> nnodes_on_surf;
71 
72  // FFT
73  std::vector<FFTWrapper> fft_plan;
74 
75  // Mapping
76  std::vector<View<int*,CLayout,HostType>> mapping;
77  std::vector<View<double*,CLayout,HostType>> theta;
78 
79  // Window
80  std::vector<View<double*,CLayout,HostType>> window;
81 
82  // Spline precomputation
83  std::vector<SplinePrecomputations<HostType>> spline_precomputation;
84 
85  // Resonance filter
86  int b_sign;
87 
88  // Scratch
89  std::vector<View<double**, CLayout, HostType>> x_ordered_all;
90  std::vector<View<Complex**,CLayout,HostType>> spec_all;
91  std::vector<View<double**, CLayout, HostType>> x_uniform_all;
92 
93  void get_m_min_max(const Options& options, int isurf, double qsafety, int& minm, int& maxm) const;
94 
95  void fft_execute(int isurf, const View<double*,CLayout,HostType>& x, const View<Complex*,CLayout,HostType>& spec) const;
96 
97  void m_range_one_surf(const Grid<DeviceType>& grid, int isurf, const View<double**,CLayout,HostType>& x,const Options& options) const;
98 
99  int get_n_points(int n_nodes) const;
100  int get_n_frequencies(int n_points) const;
101 
102  public:
103 
105 
107 
108  void m_range(const Grid<DeviceType>& grid, const DomainDecomposition<DeviceType>& pol_decomp, const Options& options, const View<double*,CLayout,HostType>& x) const;
109 
110  void m_range(const Grid<DeviceType>& grid, const DomainDecomposition<DeviceType>& pol_decomp, const Options& options, const View<double**,CLayout,HostType>& x) const;
111 
112  void destroy();
113 };
114 
115 
116 void fourier_filter(const Grid<DeviceType>& grid, const DomainDecomposition<DeviceType>& pol_decomp, const View<double*,CLayout,HostType>& view);
117 
118 #endif
std::vector< View< int *, CLayout, HostType > > mapping
Definition: fourier_filter.hpp:76
std::vector< View< double **, CLayout, HostType > > x_uniform_all
Definition: fourier_filter.hpp:91
int minm
Definition: fourier_filter.hpp:56
bool is_spectral
Definition: fourier_filter.hpp:58
int b_sign
Definition: fourier_filter.hpp:86
View< int *, CLayout, HostType > nnodes_on_surf
Definition: fourier_filter.hpp:70
View< bool *, CLayout, HostType > run_filter
Definition: fourier_filter.hpp:65
std::vector< View< double *, CLayout, HostType > > theta
Definition: fourier_filter.hpp:77
View< double *, CLayout, HostType > win
Definition: fourier_filter.hpp:17
int ntor_real
Definition: fourier_filter.hpp:60
View< Complex **, CLayout, HostType > spec
Definition: fourier_filter.hpp:18
subroutine fourier_filter(grid, filt_inout, inpsi, outpsi, bd_width, op_mode, div_mix)
Interface routine for Fourier filter.
Definition: search.F90:3263
int get_n_frequencies(int n_points) const
Definition: fourier_filter.cpp:73
subroutine plasma(grid, itr, p, dene_out, deni_out, Te_out, Ti_out, Vparai_out)
Calculate the plasma density, temperature, and parallel velocity for a point in triangle itr using pl...
Definition: neutral_totalf.F90:1248
std::vector< SplinePrecomputations< HostType > > spline_precomputation
Definition: fourier_filter.hpp:83
int maxm
Definition: fourier_filter.hpp:57
std::vector< View< double **, CLayout, HostType > > x_ordered_all
Definition: fourier_filter.hpp:89
ScrapeOffLayerMethod
Definition: fourier_filter.hpp:46
Definition: NamelistReader.hpp:193
Definition: magnetic_field.hpp:12
std::vector< View< double *, CLayout, HostType > > window
Definition: fourier_filter.hpp:80
View< double *, CLayout, HostType > tmp
Definition: fourier_filter.hpp:13
FilterTmpViews()
Definition: fourier_filter.hpp:20
std::vector< FFTWrapper > fft_plan
Definition: fourier_filter.hpp:73
double outpsi
Definition: fourier_filter.hpp:54
FourierFilter()
Definition: fourier_filter.hpp:104
View< double *, CLayout, HostType > theta
Definition: fourier_filter.hpp:16
ScrapeOffLayerMethod sol_method
Definition: fourier_filter.hpp:61
static const View< int *, CLayout, HostType > view(const View< int *, CLayout, HostType > &in, int n)
Definition: fourier_filter.hpp:35
static const View< double *, CLayout, HostType > view(const View< double *, CLayout, HostType > &in, int n)
Definition: fourier_filter.hpp:31
static const View< Complex **, CLayout, HostType > view(const View< Complex **, CLayout, HostType > &in, int n_dim2, int n)
Definition: fourier_filter.hpp:39
void m_range_one_surf(const Grid< DeviceType > &grid, int isurf, const View< double **, CLayout, HostType > &x, const Options &options) const
Definition: fourier_filter.cpp:459
double inpsi
Definition: fourier_filter.hpp:53
double bd_width
Definition: fourier_filter.hpp:55
void m_range(const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, const Options &options, const View< double *, CLayout, HostType > &x) const
Definition: fourier_filter.cpp:563
bool is_resonant
Definition: fourier_filter.hpp:59
void destroy()
Definition: fourier_filter.cpp:314
void get_m_min_max(const Options &options, int isurf, double qsafety, int &minm, int &maxm) const
Definition: fourier_filter.cpp:286
Definition: fourier_filter.hpp:52
void fft_execute(int isurf, const View< double *, CLayout, HostType > &x, const View< Complex *, CLayout, HostType > &spec) const
Definition: fourier_filter.cpp:310
Definition: magnetic_field.F90:1
View< bool *, CLayout, HostType > is_periodic
Definition: fourier_filter.hpp:69
View< int *, CLayout, HostType > node_mapping
Definition: fourier_filter.hpp:14
Definition: plasma.hpp:13
std::vector< View< Complex **, CLayout, HostType > > spec_all
Definition: fourier_filter.hpp:90
int get_n_points(int n_nodes) const
Definition: fourier_filter.cpp:67
Definition: fourier_filter.hpp:44
View< double *, CLayout, HostType > tmp2
Definition: fourier_filter.hpp:15
View< int *, CLayout, HostType > m_limit
Definition: fourier_filter.hpp:68
FilterTmpViews(int n_dim2, int n_max)
Definition: fourier_filter.hpp:22
Definition: fourier_filter.hpp:12
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:69
int max_n_points
Definition: fourier_filter.hpp:67
int mres_q
Definition: fourier_filter.hpp:66