XGC1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
equil.hpp
Go to the documentation of this file.
1 #ifndef EQUIL_HPP
2 #define EQUIL_HPP
3 #include "space_settings.hpp"
4 #include "simd.hpp"
5 #include "NamelistReader.hpp"
6 #include "rz_bounds.hpp"
8 
9 // Options for generating analytic equilibrium for testing
10 enum PsiOption{
11  NoXPoints = 0,
14 };
15 
16 namespace Equil{
17 class XPoint{
18  public:
19 
20  double r;
21  double z;
22  double psi;
23  double slope;
24 };
25 }
26 
27 
28 class Equilibrium {
29 
30  public:
31 
32  inline Equilibrium(NLReader::NamelistReader& nlr, const MagneticEquilFiles& equil_files, const View<Equil::XPoint*, HostType>& xpts);
33 
34  // Constructor for tests
36  : bounds(0.5, 2.5, -1.0, 1.0),
37 
38  // Axis
39  axis_r(1.5),
40  axis_z(0.1),
41 
42  epsil_psi(1.0e-05),
43 
44  // Xpt1
45  // XGC simulates circular case by putting the xpoint outside the model
46  // Place xpoint below min_z if no X-points
47  // Circular case still uses xpt_psi as a reference, but it's far away; so increase it
48  xpt_r(1.6),
49  xpt_z((psi_opt == NoXPoints) ? (bounds.min_z - 1.0) : -0.8),
50  xpt_slope(-0.5),
51  xpt_psi((psi_opt == NoXPoints) ? 5.0 : .8),
52 
53  // Xpt2
54  xpt2_r(1.4),
55  xpt2_z(0.7),
56  xpt2_slope(-0.5),
57  xpt2_psi(1.0),
58  set_xpt2(psi_opt == TwoXPoints),
59 
60  // Used by profile testing
61  out_decay_factor(0.25),
62  out_decay_width(2.0),
65  {}
66 
67  // Default constructor
69 
70  KOKKOS_INLINE_FUNCTION bool is_in_region_1_or_2(double r,double z,double psi) const;
71  KOKKOS_INLINE_FUNCTION bool is_in_region_1(double r,double z,double psi) const;
72  KOKKOS_INLINE_FUNCTION void check_boundaries(const SimdVector2D& x, Simd<bool>& rz_outside) const;
73  KOKKOS_INLINE_FUNCTION void get_theta(const SimdVector2D& x, Simd<double>& theta) const;
74 
75  inline void set_decay_factors(double out_decay_factor_in, double priv_flux_decay_factor_in, double out_decay_width_in, double priv_flux_decay_width_in, bool set_xpt2_in);
76 
77  // Equil variables
79  double xpt_psi;
80  double epsil_psi = 1.0e-05;
81  double xpt_r;
82  double xpt_slope;
83  double xpt_z;
84  bool set_xpt2;
85  double xpt2_r;
86  double xpt2_slope;
87  double xpt2_z;
88  double xpt2_psi;
89  double axis_r;
90  double axis_z;
91 
92  // Use in eq profile calculations
95  double out_decay_width;
97 };
98 
99 #include "equil.tpp"
100 
101 #endif
Definition: equil.hpp:12
double xpt2_z
z coordinate at 2nd X-point
Definition: equil.hpp:87
Definition: magnetic_equil_files.hpp:16
PsiOption
Definition: equil.hpp:10
KOKKOS_INLINE_FUNCTION bool is_in_region_1(double r, double z, double psi) const
Definition: equil.tpp:105
Definition: equil.hpp:17
Equilibrium()
Definition: equil.hpp:68
Definition: rz_bounds.hpp:4
Definition: NamelistReader.hpp:193
double z
Definition: equil.hpp:21
double out_decay_width
width for exponential decay for psi&gt;sml_outpsi
Definition: equil.hpp:95
void set_decay_factors(double out_decay_factor_in, double priv_flux_decay_factor_in, double out_decay_width_in, double priv_flux_decay_width_in, bool set_xpt2_in)
Definition: equil.tpp:69
double axis_z
z coordinate of axis
Definition: equil.hpp:90
bool set_xpt2
Whether to use a 2nd X-point.
Definition: equil.hpp:84
double xpt2_r
r coordinate of 2nd X-point
Definition: equil.hpp:85
double out_decay_factor
profiles decay exponentially to f(sml_outpsi)/decay_factor for psi&gt;sml_outpsi
Definition: equil.hpp:93
double axis_r
r coordinate of axis
Definition: equil.hpp:89
double priv_flux_decay_factor
profiles decay exponentially to f(sml_outpsi)/decay_factor in priv. flux region
Definition: equil.hpp:94
RZBounds bounds
Min and max for r and z.
Definition: equil.hpp:78
double xpt2_psi
psi coordinate at 2nd X-point
Definition: equil.hpp:88
double xpt_slope
Slope (which slope?) at 1st X-point.
Definition: equil.hpp:82
double xpt2_slope
Slope (which slope?) at 2nd X-point.
Definition: equil.hpp:86
KOKKOS_INLINE_FUNCTION void check_boundaries(const SimdVector2D &x, Simd< bool > &rz_outside) const
Definition: equil.tpp:119
double xpt_r
r coordinate of 1st X-point
Definition: equil.hpp:81
double psi
Definition: equil.hpp:22
KOKKOS_INLINE_FUNCTION void get_theta(const SimdVector2D &x, Simd< double > &theta) const
Definition: equil.tpp:129
Definition: simd.hpp:18
Definition: equil.hpp:13
Definition: simd.hpp:139
double xpt_z
z coordinate of 1st X-point
Definition: equil.hpp:83
Equilibrium(PsiOption psi_opt)
Definition: equil.hpp:35
double epsil_psi
Not sure?
Definition: equil.hpp:80
double r
Definition: equil.hpp:20
Definition: equil.hpp:11
double slope
Definition: equil.hpp:23
Definition: equil.hpp:28
KOKKOS_INLINE_FUNCTION bool is_in_region_1_or_2(double r, double z, double psi) const
Definition: equil.tpp:82
double priv_flux_decay_width
width for exponential decay in private flux region
Definition: equil.hpp:96
double xpt_psi
Psi coordinate of 1st X-point.
Definition: equil.hpp:79