XGCa
|
#include <sml.hpp>
Public Member Functions | |
Simulation (NLReader::NamelistReader &nlr, bool reduced_deltaf_in=false, double transit_time_in=1.0, double psi_norm=1.0) | |
Public Attributes | |
bool | reduced_deltaf |
True if any species is reduced_deltaf. Will be removed. More... | |
bool | separate_n0 |
Use separate n0 solver even in reduced_deltaf. More... | |
int | bounce |
Bounce routine switch 0 for off, 1 for inner boundary, 2 for both boundaries. More... | |
int | bounce_zero_weight |
If ==1 and bounce>0, set particle weights to zero after bouncing from the outer boundary. More... | |
double | bounce_buffer |
Buffer width between sml_outpsi and where the particle actually bounces (must be >=0) More... | |
double | dt |
Time step (s) More... | |
double | transit_time |
Torodial transit time of an ion with the characteristic energy. More... | |
int | sheath_mode |
Type of sheath (0 is none) More... | |
bool | sheath_adjust |
Whether to adjust the sheath. More... | |
bool | sheath_global_balance |
Whether to use the global loss balance functionality in sheath_mode=2. More... | |
bool | ptb_3db_on |
Toggle for ptb_3db. More... | |
bool | drift_on |
Toggle for using drift. More... | |
bool | neutrals |
Toggle for using neutrals. More... | |
bool | diag_heat_on |
Use heat diagnostics in sheath. More... | |
int | mstep |
Max number of time steps. More... | |
int | nrk |
Order of Runge-Kutta time integration of particles + fields. More... | |
bool | electron_on |
Use kinetic electrons. More... | |
bool | limit_marker_den |
Whether to limit marker density. More... | |
int | nthreads |
Number of OMP threads on the host. More... | |
bool | field_solver |
If false, charge deposition and field solve is skipped. More... | |
bool | thermal_bath_on |
Switch on thermal-bath and coarse-graining operation, see ccm_param parameters. More... | |
bool | dwdt_fix_bg |
bool | dwdt_exb_only |
bool | em_mixed_variable |
Switch for use of mixed-variable formulation. More... | |
bool | em_control_variate |
Switch for use of control variate method. More... | |
PullbackMethod | em_pullback_method |
Electrostatic: mixed-variable pullback with dA_s/dt=0,. More... | |
double | em_pullback_dampfac |
Damping term gamma on -b.grad(phi) in pullback mode 4. More... | |
bool | em_control_variate_final_cv |
bool | em_control_variate_flag |
int | em_control_variate_niter |
Number of iterations for Ampere solve with control-variate method. More... | |
bool | em_b_para_eff |
Effective dB_|| via a modified grad-B drift (Joiner et al., PoP, 2010) More... | |
bool | em_es_step |
bool | em_dAsdt_filter_on |
Switch for applying Fourier filters on RHS of dAs/dt equation (pullback mode 4) More... | |
bool | no_turb |
Set all non-axisymmetric field perturbations to zero (electromagnetic version only) More... | |
bool | em_n0 |
Include n=0 electromagnetic mode. More... | |
bool | em_dAsdt_hypvis |
Use radial hyperviscosity in dA_s/dt (push_As) More... | |
bool | exclude_private |
Whether to exclude private region in ion charge deposition. More... | |
bool | grad_psitheta |
bool | iter_solver |
bool | update_poisson_solver |
Whether poisson solver is updated. More... | |
bool | iter_solver_converge |
bool | positive_phi00_sol |
bool | heuristic_priv_pot |
int | add_pot0 |
bool | poisson_use_bc |
(XGCa only) False: 00-bc is phi=0 everywhere; true: 00-boundary More... | |
bool | dpot_bd_apply |
Damp (n=0,m>0) potential towards the magnetic axis. More... | |
double | dpot_bd_width |
Decay length (normalized flux) for (n=0,m>0) potential towards the magnetic axis. More... | |
bool | poisson_bias |
Whether to use a (0,0) bias potential on top of phi_00. More... | |
bool | poisson_adia_wall |
EXPERIMENTAL! DON'T USE UNLESS ADVISED BY AN EXPERT. More... | |
double | dpot_te_limit |
Max absolute value of dpot/temp in getf0. More... | |
double | dpot_te_limit_n0 |
Limits the magnitude of the normalized axisymmetric potential e*dphi_0/T_e. More... | |
bool | em_use_dpot_te_limit |
In EM simulation: whether to force usage of the min-max limiter on the turbulent potential fluctuation. More... | |
bool | no_fp_in_f |
double | f0_grid_alpha |
bool | f0_update_analytic |
bool | f0_update_analytic_local |
If .false. --> flux-surface average update, .true. --> local. More... | |
double | f0_update_analytic_alpha |
Separate alpha from sml_f0_grid_alpha for Maxwellian contribution. More... | |
double | f0_update_analytic_damp_width |
int | f0_grid_alpha_start |
bool | ignore_f0g |
bool | symmetric_f |
Enforce axisymmetry of the total distribution function on the grid. More... | |
double | update_g_alpha |
bool | diff_on |
bool | resamp_on |
Do resampling. More... | |
bool | resamp_for_final_restart_write |
Perform resampling before dumping the final restart file. More... | |
bool | resamp_restart_read |
Whether to read a restart file written from a simulation with different grid. More... | |
double | time |
Current simulation time. More... | |
int | gstep |
Current time step. More... | |
bool | multirate_timestepping |
Use multirate timestepping. More... | |
int | mr_factor |
double | mr_psi_max |
maximum normalized psi value of each multirate region More... | |
bool | use_em_bounds |
bool | em_exclude_private |
double | bd_ext_delta_Ai |
double | bd_ext_delta_Ao |
bool | cce_coupling_on |
Core-edge coupling flag. More... | |
bool | use_unfused_electron_push_kernel |
bool | loop_voltage_on |
Inductive current drive: loop voltage (from Faraday's law curl(E)=-dB/dt) More... | |
double | loop_voltage_psimax |
Inductive current drive: outer boundary (in pol. flux) of the loop voltage. More... | |
bool | current_drive_on |
bool | zero_inner_bd_turb |
Static Public Attributes | |
static constexpr bool | is_XGCa = true |
Equivalent to the preprocessor flag for now. More... | |
static constexpr bool | explicit_electromagnetic = false |
Equivalent to the preprocessor flag for now. More... | |
static constexpr bool | old_f0_update_analytic = false |
Equivalent to the preprocessor flag for now. More... | |
static constexpr int | nhybrid = 2 |
Number of iterations in electrostatic electron weight evolution scheme. More... | |
Simulation< Device >::Simulation | ( | NLReader::NamelistReader & | nlr, |
bool | reduced_deltaf_in = false , |
||
double | transit_time_in = 1.0 , |
||
double | psi_norm = 1.0 |
||
) |
Constructor for simulation
< Whether to solve for fields. Scatter and solve are skipped if set to false
< Split Poisson equation into axisymmetric and
< If .true., use Dirichlet boundary condition \(\delta\phi=0\), ! if .false., set the magnetic axis to the flux-surface average of the ! first flux-surface (provides continuity of the m=0 mode). ! (requires the inner boundaries be set to <0)
int Simulation< Device >::add_pot0 |
Additional electrostatic potential: (0) for off, (1) for reading data from file !! (2) for simple neoclassical axisymmetric field (not operational)
double Simulation< Device >::bd_ext_delta_Ai |
double Simulation< Device >::bd_ext_delta_Ao |
int Simulation< Device >::bounce |
Bounce routine switch 0 for off, 1 for inner boundary, 2 for both boundaries.
double Simulation< Device >::bounce_buffer |
Buffer width between sml_outpsi and where the particle actually bounces (must be >=0)
int Simulation< Device >::bounce_zero_weight |
If ==1 and bounce>0, set particle weights to zero after bouncing from the outer boundary.
bool Simulation< Device >::cce_coupling_on |
Core-edge coupling flag.
bool Simulation< Device >::current_drive_on |
Whether to use dynamic current drive via adjustments of the loop voltage ! The controller output is implemented as ! \(V_{loop} = 2\pi R \eta_\parallel P \left[\Delta j_\parallel + I \int_0^t \Delta j_\parallel \mathrm{d}\tau + D \frac{\partial \Delta j_\parallel}{\partial t} \right] \) ! Time integral and derivative are with respect to the ion time step instead of time, so \(1/I\) is the integration time scale, ! and \(D\) is the derivative time scale
bool Simulation< Device >::diag_heat_on |
Use heat diagnostics in sheath.
bool Simulation< Device >::diff_on |
bool Simulation< Device >::dpot_bd_apply |
Damp (n=0,m>0) potential towards the magnetic axis.
double Simulation< Device >::dpot_bd_width |
Decay length (normalized flux) for (n=0,m>0) potential towards the magnetic axis.
double Simulation< Device >::dpot_te_limit |
Max absolute value of dpot/temp in getf0.
double Simulation< Device >::dpot_te_limit_n0 |
Limits the magnitude of the normalized axisymmetric potential e*dphi_0/T_e.
bool Simulation< Device >::drift_on |
Toggle for using drift.
double Simulation< Device >::dt |
Time step (s)
bool Simulation< Device >::dwdt_exb_only |
bool Simulation< Device >::dwdt_fix_bg |
bool Simulation< Device >::electron_on |
Use kinetic electrons.
bool Simulation< Device >::em_b_para_eff |
Effective dB_|| via a modified grad-B drift (Joiner et al., PoP, 2010)
bool Simulation< Device >::em_control_variate |
Switch for use of control variate method.
bool Simulation< Device >::em_control_variate_final_cv |
bool Simulation< Device >::em_control_variate_flag |
int Simulation< Device >::em_control_variate_niter |
Number of iterations for Ampere solve with control-variate method.
bool Simulation< Device >::em_dAsdt_filter_on |
Switch for applying Fourier filters on RHS of dAs/dt equation (pullback mode 4)
bool Simulation< Device >::em_dAsdt_hypvis |
Use radial hyperviscosity in dA_s/dt (push_As)
bool Simulation< Device >::em_es_step |
If this is true, A_s is fixed, A_h=0, the Poisson equation is solved in the ES form (with adiabatic response on the LHS), and the electron weight update uses the ES method, i.e. the ES algorithm is used in a constant perturbed magnetic field. This parameter is not an input but set dynamically through a control function (intended for RMP penetration calculation).
bool Simulation< Device >::em_exclude_private |
bool Simulation< Device >::em_mixed_variable |
Switch for use of mixed-variable formulation.
bool Simulation< Device >::em_n0 |
Include n=0 electromagnetic mode.
double Simulation< Device >::em_pullback_dampfac |
Damping term gamma on -b.grad(phi) in pullback mode 4.
PullbackMethod Simulation< Device >::em_pullback_method |
Electrostatic: mixed-variable pullback with dA_s/dt=0,.
bool Simulation< Device >::em_use_dpot_te_limit |
In EM simulation: whether to force usage of the min-max limiter on the turbulent potential fluctuation.
bool Simulation< Device >::exclude_private |
Whether to exclude private region in ion charge deposition.
|
staticconstexpr |
Equivalent to the preprocessor flag for now.
double Simulation< Device >::f0_grid_alpha |
Fraction of the particle weight that is transferred to the background distribution function (particle noise control) every sml_f_source_period time steps. As a rule of thumb, sml_f0_grid_alpha=sml_dt*sml_f_source_period can be used.
int Simulation< Device >::f0_grid_alpha_start |
For delayed onset of total-f particle noise control. (must be >=1) Values >1 cause a linear ramp-up of sml_f0_grid_alpha from 0 to its input value from time step 1 to sml_f0_grid_alpha_start.
bool Simulation< Device >::f0_update_analytic |
Switch on/off the update of the analytic part of the distribution function
double Simulation< Device >::f0_update_analytic_alpha |
Separate alpha from sml_f0_grid_alpha for Maxwellian contribution.
double Simulation< Device >::f0_update_analytic_damp_width |
For width of \(\exp^{-(x/w)^2}\) damping factor for updating density/temperature of the analytical f0
bool Simulation< Device >::f0_update_analytic_local |
If .false. --> flux-surface average update, .true. --> local.
bool Simulation< Device >::field_solver |
If false, charge deposition and field solve is skipped.
bool Simulation< Device >::grad_psitheta |
If true, gradiant operator is calculated as \((\hat{\boldsymbol{\psi}}\cdot\nabla,\hat{\boldsymbol{\theta}}^\ast)\cdot\nabla\) instead of \((R,Z)\) coordinates.
int Simulation< Device >::gstep |
Current time step.
bool Simulation< Device >::heuristic_priv_pot |
Override the Poisson solver in the private region and replace the solution by !! the separatrix potential scaled with the initial electron temperature
bool Simulation< Device >::ignore_f0g |
Ignore f0g in f0 calculation. When true, it skips the update of den_f0_h, instead using the initialized value (which is zero). This is helpful to density conservation of heating when f0g is noisy due to insufficient number of particles.
|
staticconstexpr |
Equivalent to the preprocessor flag for now.
bool Simulation< Device >::iter_solver |
Split Poisson equation into axisymmetric and !! non-axisymmetric parts. The axisymmetric part has the !! flux-surface averaged potential on the RHS. Solve !! iteratively by lagging the RHS potential by one !! iteration. Stop after sml_iter_solver_niter iterations. !! If .false., split Poisson equation into !! flux-surface averaged part and rest (assuming that the !! polarization term commutes with the flux-surface !! average) and the rest; solve in two steps.
bool Simulation< Device >::iter_solver_converge |
If .true., keep taking iterations in PETSc until termination criteria is met, !! i.e. until a residual tolerance is reached or it is determined that the iterations !! have diverged or exceeded sml_iter_solver_max_it. If .false., take a fixed number !! of iterations set from sml_iter_solver_niter.
bool Simulation< Device >::limit_marker_den |
Whether to limit marker density.
bool Simulation< Device >::loop_voltage_on |
Inductive current drive: loop voltage (from Faraday's law curl(E)=-dB/dt)
double Simulation< Device >::loop_voltage_psimax |
Inductive current drive: outer boundary (in pol. flux) of the loop voltage.
int Simulation< Device >::mr_factor |
multirate timestepping for core region ions; mr_ratio (> 1) is the factor used to accelerate the core region physics.
double Simulation< Device >::mr_psi_max |
maximum normalized psi value of each multirate region
int Simulation< Device >::mstep |
Max number of time steps.
bool Simulation< Device >::multirate_timestepping |
Use multirate timestepping.
bool Simulation< Device >::neutrals |
Toggle for using neutrals.
|
staticconstexpr |
Number of iterations in electrostatic electron weight evolution scheme.
bool Simulation< Device >::no_fp_in_f |
If .true. the distribution function used for the source routines will not include particle information (only for testing)
bool Simulation< Device >::no_turb |
Set all non-axisymmetric field perturbations to zero (electromagnetic version only)
int Simulation< Device >::nrk |
Order of Runge-Kutta time integration of particles + fields.
int Simulation< Device >::nthreads |
Number of OMP threads on the host.
|
staticconstexpr |
Equivalent to the preprocessor flag for now.
bool Simulation< Device >::poisson_adia_wall |
EXPERIMENTAL! DON'T USE UNLESS ADVISED BY AN EXPERT.
bool Simulation< Device >::poisson_bias |
Whether to use a (0,0) bias potential on top of phi_00.
bool Simulation< Device >::poisson_use_bc |
(XGCa only) False: 00-bc is phi=0 everywhere; true: 00-boundary
bool Simulation< Device >::positive_phi00_sol |
EXPERIMENTAL! DON'T USE UNLESS ADVISED BY AN EXPERT !! If true, makes sure that \(\langle\phi\rangle > 0\) in SOL and !! private flux region by adding a constant to \(\phi\)
bool Simulation< Device >::ptb_3db_on |
Toggle for ptb_3db.
bool Simulation< Device >::reduced_deltaf |
True if any species is reduced_deltaf. Will be removed.
bool Simulation< Device >::resamp_for_final_restart_write |
Perform resampling before dumping the final restart file.
bool Simulation< Device >::resamp_on |
Do resampling.
bool Simulation< Device >::resamp_restart_read |
Whether to read a restart file written from a simulation with different grid.
bool Simulation< Device >::separate_n0 |
Use separate n0 solver even in reduced_deltaf.
bool Simulation< Device >::sheath_adjust |
Whether to adjust the sheath.
bool Simulation< Device >::sheath_global_balance |
Whether to use the global loss balance functionality in sheath_mode=2.
int Simulation< Device >::sheath_mode |
Type of sheath (0 is none)
bool Simulation< Device >::symmetric_f |
Enforce axisymmetry of the total distribution function on the grid.
bool Simulation< Device >::thermal_bath_on |
Switch on thermal-bath and coarse-graining operation, see ccm_param parameters.
double Simulation< Device >::time |
Current simulation time.
double Simulation< Device >::transit_time |
Torodial transit time of an ion with the characteristic energy.
double Simulation< Device >::update_g_alpha |
Fraction of the numerical marker particle density that is transferred to the g2
bool Simulation< Device >::update_poisson_solver |
Whether poisson solver is updated.
bool Simulation< Device >::use_em_bounds |
bool Simulation< Device >::use_unfused_electron_push_kernel |
bool Simulation< Device >::zero_inner_bd_turb |