XGCa
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sml.hpp
Go to the documentation of this file.
1 #ifndef SML_HPP
2 #define SML_HPP
3 #include "space_settings.hpp"
4 #include "NamelistReader.hpp"
5 
6 // Simulation class
7 template<class Device>
8 class Simulation {
9  public:
10 
11  // Constructor
12  // transit_time_in and psi_norm are 1.0 so that the regression tests pass. Update the
13  // reference data and remove these default values when possible. Or better, address the related TODO in xgc.cpp
14  Simulation(NLReader::NamelistReader& nlr, double transit_time_in=1.0, double psi_norm=1.0);
15 
16 #ifdef XGCA
17  static constexpr bool is_XGCa = true;
18 #else
19  static constexpr bool is_XGCa = false;
20 #endif
21 
22 #ifdef DELTAF_CONV
23  static constexpr bool reduced_deltaf = true;
24 #else
25  static constexpr bool reduced_deltaf = false;
26 #endif
27 
28 #if defined(DELTAF_CONV_SEPARATE_N0) || !defined(DELTAF_CONV)
29  static constexpr bool separate_n0 = true;
30 #else
31  static constexpr bool separate_n0 = false;
32 #endif
33 
34 #ifdef EXPLICIT_EM
35  static constexpr bool explicit_electromagnetic = true;
36 #else
37  static constexpr bool explicit_electromagnetic = false;
38 #endif
39 
40 #ifdef F0_UPDATE_ANALYTIC_OLD
41  static constexpr bool old_f0_update_analytic = true;
42 #else
43  static constexpr bool old_f0_update_analytic = false;
44 #endif
45 
46  static constexpr int nhybrid = 2;
47 
48  // Input parameters
49  int bounce;
51  double bounce_buffer;
52  double dt;
53  double transit_time;
56  bool ptb_3db_on;
57  bool drift_on;
58  bool neutrals;
59  bool diag_heat_on;
60  bool xz_00_up;
61  int mstep;
62  int nrk;
63  bool electron_on;
65  int special;
66  int nthreads;
67 
68  bool field_solver_on=true;
70 
72 
74  bool dwdt_fix_bg; // 1-w factor in dwdt
75  bool dwdt_exb_only; // excluding grad-b drift in dwdt
76 
86  bool em_control_variate_final_cv; // Should be local variable/argument
87  bool em_control_variate_flag; // Should be local variable/argument
90  bool em_es_step;
94  bool no_turb;
95  bool em_n0;
97 
99 
105  bool iter_solver;
126 
145  int add_pot0;
149  double dpot_bd_width;
151 
153  // If true, an adiabatic wall condition is used (no polarization, n_i=0, n_e!=0)
154  // in the axisymmetric solver; this is an experimental option and should
155  // be used together with sml_sheath_mode=1 and sml_sheath_init_pot_factor=0.
156 
157  double dpot_te_limit;
159 
160  // Used in update_f0
161  bool no_fp_in_f;
163  double f0_grid_alpha;
176  bool ignore_f0g;
180  bool symmetric_f;
181 
182  double update_g_alpha;
184  // Diffusion
185  bool diff_on;
186 
187  // Resampling
188  bool resamp_on;
191 
192  // marker setup
207 
208  // Simulation variables
209  double time;
210  int gstep;
211 
213  int mr_factor;
215  double mr_psi_max;
216 
217  // RMP penetration calculation
223 
228 
229  // Core-edge coupling
231 
232  // Push performance - could be elsewhere
234 
235  // Loop-voltage (for driving the equilibrium current)
238  double loop_voltage;
239  double loop_voltage_psimax;
242  //double current_drive_gamma; //!< Damping factor for heuristic current drive, 1.0 means plasma current is restored exactly each time step
244  double current_drive_p;
251 
252 
253  // Fourier filter
258 };
259 
260 #include "sml.tpp"
261 #endif
bool multirate_timestepping
Use multirate timestepping.
Definition: sml.hpp:212
double f0_update_analytic_damp_width
Definition: sml.hpp:171
bool em_dAsdt_filter_on
Switch for applying Fourier filters on RHS of dAs/dt equation (pullback mode 4)
Definition: sml.hpp:93
double mode_select_bd_width
Definition: sml.hpp:257
bool resamp_for_final_restart_write
Perform resampling before dumping the final restart file.
Definition: sml.hpp:189
double f0_grid_alpha
Definition: sml.hpp:163
double flat_marker_width2
Definition: sml.hpp:203
bool em_control_variate_flag
Definition: sml.hpp:87
double current_drive_p
Current drive PID controller: factor for proportional controller ( )
Definition: sml.hpp:248
double flat_marker_decay_start1
Definition: sml.hpp:198
static constexpr bool separate_n0
Equivalent to the preprocessor flag for now.
Definition: sml.hpp:29
bool em_mixed_variable
Switch for use of mixed-variable formulation.
Definition: sml.hpp:77
double current_drive_i
Current drive PID controller: factor for integral controller ( )
Definition: sml.hpp:249
double initial_deltaf_noise
Definition: sml.hpp:204
bool drift_on
Toggle for using drift.
Definition: sml.hpp:57
double current_drive_d
Current drive PID controller: factor for derivative controller ( )
Definition: sml.hpp:250
int nrk
Order of Runge-Kutta time integration of particles + fields.
Definition: sml.hpp:62
bool em_use_dpot_te_limit
In EM simulation: whether to force usage of the min-max limiter on the turbulent potential fluctuatio...
Definition: sml.hpp:158
Definition: sml.hpp:8
static constexpr bool is_XGCa
Equivalent to the preprocessor flag for now.
Definition: sml.hpp:17
static constexpr bool explicit_electromagnetic
Equivalent to the preprocessor flag for now.
Definition: sml.hpp:37
bool em_n0
Include n=0 electromagnetic mode.
Definition: sml.hpp:95
bool poisson_adia_wall
EXPERIMENTAL! DON&#39;T USE UNLESS ADVISED BY AN EXPERT.
Definition: sml.hpp:152
static constexpr int nhybrid
Number of iterations in electrostatic electron weight evolution scheme.
Definition: sml.hpp:46
bool thermal_bath_on
Switch on thermal-bath and coarse-graining operation, see ccm_param parameters.
Definition: sml.hpp:71
double low_mu_fill_population
Definition: sml.hpp:206
Definition: NamelistReader.hpp:193
int mstep_rmp_es
Definition: sml.hpp:218
bool exclude_private
Whether to exclude private region in ion charge deposition.
Definition: sml.hpp:98
int bounce_zero_weight
If ==1 and bounce&gt;0, set particle weights to zero after bouncing from the outer boundary.
Definition: sml.hpp:50
bool em_exclude_private
Definition: sml.hpp:225
int mr_factor
Definition: sml.hpp:213
double flat_marker_decay_start2
Definition: sml.hpp:199
int gstep
Current time step.
Definition: sml.hpp:210
double mode_select_outpsi
Definition: sml.hpp:256
bool em_es_step
Definition: sml.hpp:90
bool split_weight_scheme
Whether to use the split-weight scheme.
Definition: sml.hpp:73
bool diag_heat_on
Use heat diagnostics in sheath.
Definition: sml.hpp:59
bool xz_00_up
Use upper region of xz when obtaining 00 mode.
Definition: sml.hpp:60
bool update_poisson_solver
Whether poisson solver is updated.
Definition: sml.hpp:125
static constexpr bool reduced_deltaf
Equivalent to the preprocessor flag for now.
Definition: sml.hpp:25
double loop_voltage_psimax
Inductive current drive: outer boundary (in pol. flux) of the loop voltage.
Definition: sml.hpp:241
double flat_marker_cutoff1
Definition: sml.hpp:200
int mode_select_mode
Definition: sml.hpp:254
double mode_select_inpsi
Definition: sml.hpp:255
bool field_solver_on
If false, charge deposition and field solve is skipped.
Definition: sml.hpp:68
int f0_grid_alpha_start
Definition: sml.hpp:173
double loop_voltage
Definition: sml.hpp:238
bool symmetric_f
Enforce axisymmetry of the total distribution function on the grid.
Definition: sml.hpp:180
bool iter_solver_converge
Definition: sml.hpp:127
double marker_temp_factor3
Definition: sml.hpp:197
bool cce_coupling_on
Core-edge coupling flag.
Definition: sml.hpp:230
int nthreads
Number of OMP threads on the host.
Definition: sml.hpp:66
double marker_temp_factor
Definition: sml.hpp:195
int em_pullback_mode
Definition: sml.hpp:79
bool grad_psitheta
Definition: sml.hpp:100
bool heuristic_priv_pot
Definition: sml.hpp:136
int poisson_solver_type
Definition: sml.hpp:115
bool ignore_f0g
Definition: sml.hpp:176
int add_pot0
Definition: sml.hpp:145
double transit_time
Torodial transit time of an ion with the characteristic energy.
Definition: sml.hpp:53
double bd_ext_delta_Ao
Definition: sml.hpp:227
bool use_unfused_electron_push_kernel
Definition: sml.hpp:233
bool flat_marker
Definition: sml.hpp:194
bool sheath_adjust
Whether to adjust the sheath.
Definition: sml.hpp:55
bool resamp_on
Do resampling.
Definition: sml.hpp:188
double marker_min_temp
Definition: sml.hpp:205
double flat_marker_width1
Definition: sml.hpp:202
bool dwdt_exb_only
Definition: sml.hpp:75
int special
Special run (eg single particle, poincare)
Definition: sml.hpp:65
bool em_dAsdt_hypvis
Use radial hyperviscosity in dA_s/dt (push_As)
Definition: sml.hpp:96
double update_g_alpha
Definition: sml.hpp:182
double time
Current simulation time.
Definition: sml.hpp:209
bool no_fp_in_f
Definition: sml.hpp:161
bool use_em_bounds
Definition: sml.hpp:224
bool em_control_variate_final_cv
Definition: sml.hpp:86
bool no_turb
Set all non-axisymmetric field perturbations to zero (electromagnetic version only) ...
Definition: sml.hpp:94
int mstep_rmp_em
Definition: sml.hpp:220
double bd_ext_delta_Ai
Definition: sml.hpp:226
double flat_marker_cutoff2
Definition: sml.hpp:201
int sheath_mode
Type of sheath (0 is none)
Definition: sml.hpp:54
double dpot_te_limit
Max absolute value of dpot/temp in getf0.
Definition: sml.hpp:157
bool electron_on
Use kinetic electrons.
Definition: sml.hpp:63
double f0_update_analytic_alpha
Separate alpha from sml_f0_grid_alpha for Maxwellian contribution.
Definition: sml.hpp:170
int rmp_es_to_em_dt_ratio
Ratio of EM to ES time step size in RMP penetration calculation.
Definition: sml.hpp:222
double mr_psi_max
maximum normalized psi value of each multirate region
Definition: sml.hpp:215
bool em_b_para_eff
Effective dB_|| via a modified grad-B drift (Joiner et al., PoP, 2010)
Definition: sml.hpp:89
bool dwdt_fix_bg
Definition: sml.hpp:74
int mstep
Max number of time steps.
Definition: sml.hpp:61
bool field_aligned_initial
Definition: sml.hpp:193
bool limit_marker_den
Whether to limit marker density.
Definition: sml.hpp:64
bool f0_update_analytic
Definition: sml.hpp:167
bool current_drive_on
Definition: sml.hpp:243
double dt
Time step (s)
Definition: sml.hpp:52
bool poisson_natural_boundary
Definition: sml.hpp:139
int bounce
Bounce routine switch 0 for off, 1 for inner boundary, 2 for both boundaries.
Definition: sml.hpp:49
bool loop_voltage_fsa
Make loop voltage and current drive flux-functions if true (default: true)
Definition: sml.hpp:237
bool f0_update_analytic_local
If .false. –&gt; flux-surface average update, .true. –&gt; local.
Definition: sml.hpp:169
double em_pullback_dampfac
Damping term gamma on -b.grad(phi) in pullback mode 4.
Definition: sml.hpp:85
bool loop_voltage_on
Inductive current drive: loop voltage (from Faraday&#39;s law curl(E)=-dB/dt)
Definition: sml.hpp:236
bool neutrals
Toggle for using neutrals.
Definition: sml.hpp:58
double marker_temp_factor2
Definition: sml.hpp:196
bool poisson_bias
Whether to use a (0,0) bias potential on top of phi_00.
Definition: sml.hpp:150
int em_control_variate_niter
Number of iterations for Ampere solve with control-variate method.
Definition: sml.hpp:88
bool ptb_3db_on
Toggle for ptb_3db.
Definition: sml.hpp:56
double bounce_buffer
Buffer width between sml_outpsi and where the particle actually bounces (must be &gt;=0) ...
Definition: sml.hpp:51
bool em_control_variate
Switch for use of control variate method.
Definition: sml.hpp:78
bool positive_phi00_sol
Definition: sml.hpp:132
bool resamp_restart_read
Whether to read a restart file written from a simulation with different grid.
Definition: sml.hpp:190
double dpot_bd_width
Decay length (normalized flux) for (n=0,m&gt;0) potential towards the magnetic axis. ...
Definition: sml.hpp:149
Simulation(NLReader::NamelistReader &nlr, double transit_time_in=1.0, double psi_norm=1.0)
Definition: sml.tpp:5
bool helmholtz_spectral
Whether to solve Helmholtz-type equations with toroidally spectral solver.
Definition: sml.hpp:69
bool dpot_bd_apply
Damp (n=0,m&gt;0) potential towards the magnetic axis.
Definition: sml.hpp:148
bool iter_solver
Definition: sml.hpp:105
bool diff_on
Definition: sml.hpp:185
static constexpr bool old_f0_update_analytic
Equivalent to the preprocessor flag for now.
Definition: sml.hpp:43