Input Parameters

The following is a complete list of input parameters available in XGC. This list is generated with the Python script utils/document_inputs.py. Please help us improve the documentation for completeness, consistency and clarity. In the meantime, parameters labeled ‘See Fortran description’ may have more useful documentation here.

adios_param

bool adios_stage_f0 = false
Enable/disable Adios stage mode for xgc.f0
bool adios_stage_particle = false
Enable/disable Adios stage mode for particle diagnostic
bool adios_stage_escaped_ptls = false
Enable/disable Adios stage mode for escape particle diagnostic
bool adios_stage_restart = false
Enable/disable Adios stage mode for checkpoint file
bool adios_stage_restartf0 = false
Enable/disable Adios stage mode for f0 checkpoint file
bool adios_stage_3d = false
Enable/disable Adios stage mode for xgc.3d

analytic_grid_param

int nsurfaces = 30
Number of surfaces in the analytic circular grid.
double axis_r = 1.5
The r coordinate of the axis of the circular analytic magnetic equilibrium

col_param

int col_vb_period = 1
Frequency of background update for collisions
double col_vb_pin = magnetic_field.inpsi
Inner psi boundary for varying background
double col_vb_pout = std::min(magnetic_field.outpsi, 1.03
Outer psi boundary for varying background
int col_vb_m = 50
Resolution of varying background
int col_vb_mtheta = 8
Resolution in theta direction of varying background
int col_mode = 0
Collision method. 0: No collisions. 1: uses the monte carlo non-conserving collisions. 4: uses the non-linear Fokker Planck Landau collision operator. 5: PETSc Landau AMR collisions.
int col_period = 3
Frequency of collisions
bool col_accel = false
Artificial collision amplifying.
int col_accel_n = 2
Number of psi regions to apply artifical accleration to. Maximum is 2.
double col_accel_factor1 = 10.0
Acceleration factor of Range 1
double col_accel_factor2 = 10.0
Acceleration factor of Range 2
double col_accel_pin1 = magnetic_field.inpsi
Inner psi value of acceleration Range 1
double col_accel_pout1 = magnetic_field.inpsi + 0.1*psi_range
Outer psi value of acceleration Range 1
double col_accel_pin2 = magnetic_field.outpsi - 0.1*psi_range
Inner psi value of acceleration Range 2
double col_accel_pout2 = magnetic_field.outpsi
Outer psi value of acceleration Range 2
double col_pin = magnetic_field.inpsi
Minimum of psi range where collisions are performed.
double col_pout = magnetic_field.outpsi
Maximum of psi range where collisions are performed.
int col_en_col_on = 1
Switch for energy collision
bool col_moving_frame = true
Switch for moving frame for collisions
int col_varying_bg = 0
Switch for background plasma update
int col_max_n_subcycles = 1
Enables collision subcycling. Collision time step of an unconverged vertex will be reduced, increasing the number of cycles of that vertex up to a maximum of col_max_n_subcycles. If it still does not converge, the vertex will not be attempted again.
int col_f_start = 1
The time step at which collisions begin

diag_param

int diag_f3d_period = default_period
Number of time steps between f3d diagnostic write
bool diag_1d_on = true
Whether to write 1D diagnostics
int diag_1d_period = 10
Number of time steps between diag_1d diagnostic write
bool diag_current_drive_on = false
Switches the loop voltage diagnostic on if dynamic current drive is on
int diag_current_drive_period = 1
Output frequency of loop_voltage_diagnostic
bool diag_f0_on = true
Whether to write f0 diagnostic
int diag_f0_period = default_period
Number of time steps between f0 diagnostic write
Make sure period is divisible by f_source_period
bool diag_f0_g = false
Whether to additionally write f0_g in the f0 diagnostic
bool diag_f0_n = false
Whether to additionally write f0_n in the f0 diagnostic
int diag_tracer_period = See Fortran description.
See Fortran description.
int diag_tracer_n = See Fortran description.
See Fortran description.
int diag_tracer_sp = See Fortran description.
See Fortran description.
int diag_particle_mod = See Fortran description.
See Fortran description.
int diag_particle_period = See Fortran description.
See Fortran description.
int diag_1d_npsi = See Fortran description.
See Fortran description.
double diag_1d_pin = See Fortran description.
See Fortran description.
double diag_1d_pout = See Fortran description.
See Fortran description.
int diag_neutral_period = See Fortran description.
See Fortran description.
int diag_poin_nrec = See Fortran description.
See Fortran description.
int diag_poin_isp = See Fortran description.
See Fortran description.
int diag_heat_mode = 2
Description needed
int diag_heat_nr = 100
Description needed
int diag_heat_nz = 100
Description needed
int diag_heat_nsection = 1
Description needed
int diag_heat_npsi = 1000
Description needed
double diag_heat_rmin1 = magnetic_field.bounds.min_r
Description needed
double diag_heat_rmin2 = magnetic_field.bounds.min_r
Description needed
double diag_heat_rmin3 = magnetic_field.bounds.min_r
Description needed
double diag_heat_rmax1 = magnetic_field.bounds.max_r
Description needed
double diag_heat_rmax2 = magnetic_field.bounds.max_r
Description needed
double diag_heat_rmax3 = magnetic_field.bounds.max_r
Description needed
double diag_heat_zmin1 = magnetic_field.bounds.min_z
Description needed
double diag_heat_zmin2 = magnetic_field.bounds.min_z
Description needed
double diag_heat_zmin3 = magnetic_field.bounds.min_z
Description needed
double diag_heat_zmax1 = magnetic_field.bounds.max_z
Description needed
double diag_heat_zmax2 = magnetic_field.bounds.max_z
Description needed
double diag_heat_zmax3 = magnetic_field.bounds.max_z
Description needed
int diag_heat_nphi = 64
Description needed
double diag_heat_spacing = 5.0e-3
Description needed
bool diag_3d_on = true
Whether to write 3D diagnostics
bool diag_heat_on = false
Description needed
int diag_ps_reset_period = 10
Number of time steps between particle stream diagnostic recording
double diag_ps_pin = 0.80
Psi range of selected particles
double diag_ps_pout = 0.81
Psi range of selected particles
bool diag_f0_df_on = is_on_default
Switch for f0_df (grid-conservation) diagnostic
int diag_f0_df_period = period_default
Output interval for f0_df diagnostic
bool diag_col_convergence_stat_on = false
Swithes file-output of convergence status of the collision operator on/off
int diag_3d_period = default_period
Number of time steps between 3D diagnostic write
bool diag_weight_stats = false
Write some particle weight statistics in the diag_3d diagnostic
bool diag_3d_more = false
Write some additional moments in the diag_3d diagnostic
bool diag_pseudo_inv_on = false
switches pseudo-inverse diagnostics on and off, only used if f0_velocity_interp_use_pseudo_inv = .true.

diff_param

bool diff_on = false
Switch for anomalous diffusion
bool diff_nonlinear = See Fortran description.
See Fortran description.
double diff_bd_shift_in = See Fortran description.
See Fortran description.
double diff_bd_shift_out = See Fortran description.
See Fortran description.
double diff_bd_width_in = See Fortran description.
See Fortran description.
double diff_bd_width_out = See Fortran description.
See Fortran description.
double diff_bd_width_priv = See Fortran description.
See Fortran description.
bool diff_pol_peak = See Fortran description.
See Fortran description.
double diff_pol_peak_amp = See Fortran description.
See Fortran description.
double diff_pol_peak_angle = See Fortran description.
See Fortran description.
double diff_pol_peak_width = See Fortran description.
See Fortran description.
int diff_start_time = 1
Start time (in time steps) for anomalous diffusion
double diff_bd_in = magnetic_field.inpsi
Inner psi boundary for diffusion
double diff_bd_out = magnetic_field.outpsi
Outer psi boundary for diffusion

eq_param

bool eq_set_x2 = false
Determine if there is second (upper) X-point to consider. It does not have to be set unless using the old flx.aif format.
double eq_x2_r = 1.7
R value of second (upper) X-point
double eq_x2_z = 10.0
Z value of second (upper) X-point
double eq_out_decay_factor = 0.1
Profiles decay exponentially to f(sml_outpsi)/decay_factor for psi>sml_outpsi
double eq_priv_flux_decay_factor = 0.05
Profiles decay exponentially to f(sml_outpsi)/decay_factor in priv. flux region
double eq_out_decay_width = 0.03
Width for exponential decay for psi>sml_outpsi
double eq_priv_flux_decay_width = 0.015
Width for exponential decay in private flux region
std::string eq_zeff_file = "zeff.dat"
Filename for Z-effective profile for radiation source
int eq_zeff_shape = 0
Shape of analytic Z-effective profile
double eq_zeff_v1 = 1.0
Shape coefficients for analytic Z-effective profile
double eq_zeff_v2 = 1.0
Shape coefficients for analytic Z-effective profile
double eq_zeff_v3 = 1.0
Shape coefficients for analytic Z-effective profile
double eq_zeff_x1 = 1.0
Shape coefficients for analytic Z-effective profile
double eq_zeff_x2 = 0.1
Shape coefficients for analytic Z-effective profile
double eq_zeff_x3 = 0.0
Shape coefficients for analytic Z-effective profile
std::string eq_m3dc1_filename = See Fortran description.
See Fortran description.
int eq_dens_diff_shape = See Fortran description.
See Fortran description.
std::string eq_dens_diff_file = See Fortran description.
See Fortran description.
double eq_dens_diff_v1 = See Fortran description.
See Fortran description.
double eq_dens_diff_v2 = See Fortran description.
See Fortran description.
double eq_dens_diff_v3 = See Fortran description.
See Fortran description.
double eq_dens_diff_v4 = See Fortran description.
See Fortran description.
double eq_dens_diff_x1 = See Fortran description.
See Fortran description.
double eq_dens_diff_x2 = See Fortran description.
See Fortran description.
double eq_dens_diff_x3 = See Fortran description.
See Fortran description.
double eq_dens_diff_x4 = See Fortran description.
See Fortran description.
double eq_dens_diff_x5 = See Fortran description.
See Fortran description.
int eq_flow_diff_shape = See Fortran description.
See Fortran description.
std::string eq_flow_diff_file = See Fortran description.
See Fortran description.
double eq_flow_diff_v1 = See Fortran description.
See Fortran description.
double eq_flow_diff_v2 = See Fortran description.
See Fortran description.
double eq_flow_diff_v3 = See Fortran description.
See Fortran description.
double eq_flow_diff_v4 = See Fortran description.
See Fortran description.
double eq_flow_diff_x1 = See Fortran description.
See Fortran description.
double eq_flow_diff_x2 = See Fortran description.
See Fortran description.
double eq_flow_diff_x3 = See Fortran description.
See Fortran description.
double eq_flow_diff_x4 = See Fortran description.
See Fortran description.
double eq_flow_diff_x5 = See Fortran description.
See Fortran description.
int eq_t_diff_shape = See Fortran description.
See Fortran description.
double eq_t_diff_v1 = See Fortran description.
See Fortran description.
double eq_t_diff_v2 = See Fortran description.
See Fortran description.
double eq_t_diff_v3 = See Fortran description.
See Fortran description.
double eq_t_diff_v4 = See Fortran description.
See Fortran description.
double eq_t_diff_x1 = See Fortran description.
See Fortran description.
double eq_t_diff_x2 = See Fortran description.
See Fortran description.
double eq_t_diff_x3 = See Fortran description.
See Fortran description.
double eq_t_diff_x4 = See Fortran description.
See Fortran description.
double eq_t_diff_x5 = See Fortran description.
See Fortran description.
std::string eq_t_diff_file = See Fortran description.
See Fortran description.
int eq_pinch_v_shape = See Fortran description.
See Fortran description.
std::string eq_pinch_v_file = See Fortran description.
See Fortran description.
double eq_pinch_v_v1 = See Fortran description.
See Fortran description.
double eq_pinch_v_v2 = See Fortran description.
See Fortran description.
double eq_pinch_v_v3 = See Fortran description.
See Fortran description.
double eq_pinch_v_v4 = See Fortran description.
See Fortran description.
double eq_pinch_v_x1 = See Fortran description.
See Fortran description.
double eq_pinch_v_x2 = See Fortran description.
See Fortran description.
double eq_pinch_v_x3 = See Fortran description.
See Fortran description.
double eq_pinch_v_x4 = See Fortran description.
See Fortran description.
double eq_pinch_v_x5 = See Fortran description.
See Fortran description.
std::string eq_g_filename = See Fortran description.
See Fortran description.
int eq_fg_temp_shape = See Fortran description.
See Fortran description.
std::string eq_fg_temp_file = See Fortran description.
See Fortran description.
double eq_fg_temp_v1 = See Fortran description.
See Fortran description.
double eq_fg_temp_v2 = See Fortran description.
See Fortran description.
double eq_fg_temp_v3 = See Fortran description.
See Fortran description.
double eq_fg_temp_x1 = See Fortran description.
See Fortran description.
double eq_fg_temp_x2 = See Fortran description.
See Fortran description.
double eq_fg_temp_x3 = See Fortran description.
See Fortran description.
int eq_fg_flow_shape = See Fortran description.
See Fortran description.
std::string eq_fg_flow_file = See Fortran description.
See Fortran description.
int eq_fg_flow_type = See Fortran description.
See Fortran description.
double eq_fg_flow_v1 = See Fortran description.
See Fortran description.
double eq_fg_flow_v2 = See Fortran description.
See Fortran description.
double eq_fg_flow_v3 = See Fortran description.
See Fortran description.
double eq_fg_flow_x1 = See Fortran description.
See Fortran description.
double eq_fg_flow_x2 = See Fortran description.
See Fortran description.
double eq_fg_flow_x3 = See Fortran description.
See Fortran description.
int eq_mk_temp_shape = See Fortran description.
See Fortran description.
std::string eq_mk_temp_file = See Fortran description.
See Fortran description.
double eq_mk_temp_v1 = See Fortran description.
See Fortran description.
double eq_mk_temp_v2 = See Fortran description.
See Fortran description.
double eq_mk_temp_v3 = See Fortran description.
See Fortran description.
double eq_mk_temp_x1 = See Fortran description.
See Fortran description.
double eq_mk_temp_x2 = See Fortran description.
See Fortran description.
double eq_mk_temp_x3 = See Fortran description.
See Fortran description.
int eq_mk_flow_shape = See Fortran description.
See Fortran description.
std::string eq_mk_flow_file = See Fortran description.
See Fortran description.
int eq_mk_flow_type = See Fortran description.
See Fortran description.
double eq_mk_flow_v1 = See Fortran description.
See Fortran description.
double eq_mk_flow_v2 = See Fortran description.
See Fortran description.
double eq_mk_flow_v3 = See Fortran description.
See Fortran description.
double eq_mk_flow_x1 = See Fortran description.
See Fortran description.
double eq_mk_flow_x2 = See Fortran description.
See Fortran description.
double eq_mk_flow_x3 = See Fortran description.
See Fortran description.
int eq_dens_shape = 0, ... [per species] ...
Shape of equilibrium density profile
std::string eq_dens_file = "example.dat", ... [per species] ...
Filename for equilibrium density profile
double eq_dens_v1 = 1.0e20, ... [per species] ...
Shape coefficients (m^-3)
double eq_dens_v2 = 0.0, ... [per species] ...
Shape coefficients (m^-3)
double eq_dens_v3 = 0.0, ... [per species] ...
Shape coefficients (m^-3)
double eq_dens_x1 = 0.0, ... [per species] ...
Shape coefficients
double eq_dens_x2 = 0.0, ... [per species] ...
Shape coefficients
double eq_dens_x3 = 0.0, ... [per species] ...
Shape coefficients
int eq_temp_shape = 0, ... [per species] ...
Shape of equilibrium temperature profile
std::string eq_temp_file = "example.dat", ... [per species] ...
Filename for equilibrium temperature profile
double eq_temp_v1 = 1.0e3, ... [per species] ...
Shape coefficients (ev)
double eq_temp_v2 = 0.0, ... [per species] ...
Shape coefficients (ev)
double eq_temp_v3 = 0.0, ... [per species] ...
Shape coefficients (ev)
double eq_temp_x1 = 0.0, ... [per species] ...
Shape coefficients
double eq_temp_x2 = 0.0, ... [per species] ...
Shape coefficients
double eq_temp_x3 = 0.0, ... [per species] ...
Shape coefficients
int eq_flow_shape = 0, ... [per species] ...
Shape of equilibrium flow profile
std::string eq_flow_file = "example.dat", ... [per species] ...
Filename for equilibrium flow profile
double eq_flow_v1 = 0.0, ... [per species] ...
Shape coefficients
double eq_flow_v2 = 0.0, ... [per species] ...
Shape coefficients
double eq_flow_v3 = 0.0, ... [per species] ...
Shape coefficients
double eq_flow_x1 = 0.0, ... [per species] ...
Shape coefficients
double eq_flow_x2 = 0.0, ... [per species] ...
Shape coefficients
double eq_flow_x3 = 0.0, ... [per species] ...
Shape coefficients
int eq_flow_type = 2, ... [per species] ...
How the flow term is calculated from the equilibrium flow profile. 0: flow = value; 1: flow = value*R; 2: flow = value*R*Bphi/B
std::string eq_filename = "example_base.dat"
eq_filename is the name of the equilibrium input
int eq_den_rsp_index = 0
Due to quasineutrality, the density of one species should be obtained from that of the others: specify its index here.
int eq_den_rsp_sample_num = 1024
density for the reduced spcies (rsp) is constructed from this number of samples
double eq_den_rsp_xmax = 1.3
normalized value of psi for domain setting psi_norm = [0, xmax], psi = psi_norm * eq_x_psi

f0_param

bool f0_upsample = See Fortran description.
See Fortran description.
bool f0_upsample_skip_full_bins = See Fortran description.
See Fortran description.
int f0_upsample_rate = See Fortran description.
See Fortran description.
int f0_upsample_tile_size = See Fortran description.
See Fortran description.
int f0_upsample_cell_target = See Fortran description.
See Fortran description.
int f0_upsample_corner_cell_target = See Fortran description.
See Fortran description.
bool f0_velocity_interp_force_pseudo_inv = See Fortran description.
See Fortran description.
bool f0_velocity_interp_pseudo_inv_particles_to_grid_petsc = See Fortran description.
See Fortran description.
bool f0_velocity_interp_pseudo_inv_delta_grid = See Fortran description.
See Fortran description.
int f0_nvp = 15
Resolution of velocity space in parallel direcion. Total parallel grid points is 2*f0_nvp+1
int f0_nmu = 31
Resolution of velocity space in perpendicular direction. Total perpendicular grid points is f0_nmu+1
double f0_vp_max = 3.0
Maximum parallel velocity of velocity space grid, normalized to thermal velocity
double f0_smu_max = 3.0
Maximum perpendicular velocity of velocity space grid, normalized to thermal velocity
bool f0_velocity_interp_use_pseudo_inv = false
Whether to use pseudo-inverse interpolation between particles and velocity grid
int f0_velocity_interp_pseudo_inv_order = 2
1 (linear) or 2 (quadratic) pseudo-inverse interpolation, only used if f0_velocity_interp_use_pseudo_inv = .true.
double f0_update_analytic_alpha = f0_grid_alpha
Separate alpha from sml_f0_grid_alpha for Maxwellian contribution
bool f0_update_analytic = false
Switch on/off the update of the analytic part of the distribution function
bool f0_update_analytic_local = false
If .false. –> flux-surface average update, .true. –> local
double f0_update_analytic_damp_width = 0.5
For width of \(\exp^{-(x/w)^2}\) damping factor for updating density/temperature of the analytical f0

field_decomp_param

int n_ranks = 6
Number of ranks across which the fields are decomposed. The larger this number, the less memory is used per rank. However, for best performance, this number should be as small as possible.
int n_phi_domains = n_ranks
Number of subdomains in the toroidal direction. By default, there is no poloidal decomposition.
int n_ghost_planes = 1
Number of ghost planes on each side of a subdomain. Toroidal overlap is not required, but may be useful for performance since it reduces the need to shift particles between ranks.
int n_ghost_vertices = 3000
Number of ghost vertices on each side of the subdomain within the poloidal plane. It must be large enough to ensure that all neighboring vertices of the subdomain are present. However, this depends entirely on the grid since there is no guarantee on the order of vertices in an XGC grid.

init_cond

bool ic_resonant_modes = true
use field aligned resonant modes
int ic_resonant_nmax_real = 1
Maximal (real, not wedge) toroidal mode number in initial density when using sml_field_aligned_initial=.true. and ic_resonant_modes=.true.
int ic_resonant_nmin_real = 1
Minimal (real, not wedge) toroidal mode number in initial density when using sml_field_aligned_initial=.true. and ic_resonant_modes=.true.
int ic_n_modes = (int
Number of toroidal modes
int ic_delta_n = wedge_n
Spacing between toroidal modes
double ic_amp_0 = 0.0
Amplitude of the n=0 initial perturbation
double ic_amp = 1.0e-4
Amplitude of the n!=0 initial perturbation
double ic_q_sign = magnetic_field.bp_sign
Invert the sign of q in the eikonal
double ic_phi_sign = magnetic_field.bp_sign*magnetic_field.bt_sign
Invert the sign of toridal direction in the eikonal
bool ic_add_zonal = false
Include a n=0 component
bool ic_radial_gaussian = false
Apply a gaussian modulation to the radial profile
bool ic_poloidal_gaussian = false
Apply a gaussian modulation to the poloidal profile
double ic_psi_0 = 0.0
Center of radial gaussian modulation
double ic_sigma_psi = 0.5
Width of radial gaussian modulation
double ic_theta_0 = 0.0
Center of poloidal gaussian
double ic_sigma_theta = 0.784
Width of poloidal gaussian

load_balance_param

double max_mem_redist_gb = 10.0
Sets the maximum amount of memory per rank that can be allocated to particles, in gigabytes.
std::string weighting_algorithm = "Fortran"
Load balancing method. “Fortran” is the default since the newer methods are experimental. “ParticleBalance” does not incorporate timing data, but only tries to equally distribute particles. “SingleRegionBalance” currently tries to balance the push.
double threshold_to_rebalance = 0.02
How much better the projected timing of a proposed load redistribution must be than the current distribution in order to adopt the new one. e.g. 0.02 sets a threshold of 2% better.
bool verbose = false
Verbose output of the internal load distribution model and load balancing decisions.
std::string update_method = "NoHistory"
Methods for updating internal model of load distribution. “NoHistory” uses only the most recent time step, while “ExpHistory” averages the existing model with the new step’s timing information. Does not apply when weighting_algorithm is “Fortran”.

mon_param

int mon_flush_count = See Fortran description.
See Fortran description.
int mon_flush_freq = See Fortran description.
See Fortran description.

mr_param

int mr_factor1 = 1
Unused
int mr_factor2 = 1
Unused
int mr_factor3 = 1
Unused
int mr_factor4 = 1
Unused
int mr_factor5 = 1
multirate timestepping for core region ions; mr_ratio (> 1) is the
factor used to accelerate the core region physics.
double mr_psi_max5 = 0.0
maximum normalized psi value of each multirate region

neu_param

int neu_start_time = 2
Start time of neutral recycling in ion time steps
double neu_n0 = See Fortran description.
See Fortran description.
double neu_theta_x = See Fortran description.
See Fortran description.
double neu_dt = See Fortran description.
See Fortran description.
int neu_num = See Fortran description.
See Fortran description.
int neu_background_period = See Fortran description.
See Fortran description.
bool neu_adjust_n0 = See Fortran description.
See Fortran description.
double neu_recycle_rate = See Fortran description.
See Fortran description.
bool neu_source_match_flux = See Fortran description.
See Fortran description.
double neu_delta_n = See Fortran description.
See Fortran description.
double neu_peak_theta = See Fortran description.
See Fortran description.
double neu_delta_theta = See Fortran description.
See Fortran description.
double neu_temp0 = See Fortran description.
See Fortran description.
int neu_istep_max = See Fortran description.
See Fortran description.
double neu_lost_rate_max = See Fortran description.
See Fortran description.
bool neu_exclude_private = See Fortran description.
See Fortran description.
double neu_inpsi = See Fortran description.
See Fortran description.

performance_param

bool particles_resident_on_device = default_residence_option(
Sets particle information to reside in device memory. This improves performance by reducing host-device communication. Particles are still sent back to host memory for some operations. This option can and should be used on platforms with sufficient device memory, which includes all flagship platforms as of 2024.
bool stream_particles = default_streaming_option(
Streams particles in chunks to hide time spent on host-device communication while not increasing device memory usage. This probably isn’t currently very helpful for performance, and is not actively supported.
double initial_ptl_res_margin = 1.1
The particles are allocated with this initial buffer factor to delay or avoid having to reallocate these large arrays later in the simulation
bool decompose_fields = false
Not ready for use. This option splits field quantities used for the electron push kernel so that not every MPI process contains the field information of the entire simulation domain.
bool calculate_phi_ff_on_device = false
With this option, potential is communicated and the electric field is calculated on every MPI process. This means additional computation, but less communication. This tradeoff is probably beneficial on all current flagship platforms, but this has not been verified.
std::string gyro_comm_method = "PlaneComm"
Different methods for storing gyroaverage matrices.
“PlaneComm” assigns each gyromatrix to a separate MPI process on each plane
“PackedPlaneComm” assigns each gyromatrix to multiple MPI process on each plane and communicates the results locally. This is not currently supported
“SelfComm” stores every gyromatrix on each MPI process, reducing communication but increasing storage requirements and computation.
bool use_unfused_electron_push_kernel = false
Use unfused electron push kernel. This algorithm may be faster than the default push algorithm
int mesh_batch_size = default_batch_size
Collisions are batched (multiple vertices run in parallel) for better performance. The best value may vary by platform. Typically higher is better (for GPU simulations) but memory usage is linearly proportional to this value.
std::string collisions_solver = "lapack"
Which collisions solver to use. “lapack” is on CPU. “ginkgo” is on GPU and improves performance, but the executable must be compiled with USE_GINKGO
double ginkgo_residual_reduction = 1.0e-16
For the Ginkgo solver, the residual reduction
int ginkgo_max_iterations = 300
For the Ginkgo solver, the maximum number of iterations

ptb_3db_param

std::string ptb_3db_filename = See Fortran description.
See Fortran description.
int ptb_3db_file_format = See Fortran description.
See Fortran description.
bool ptb_3db_single_mode_input = See Fortran description.
See Fortran description.
double ptb_3db_mult_factor = See Fortran description.
See Fortran description.
int ptb_3db_m3dc1_timeslice = See Fortran description.
See Fortran description.
int ptb_3db_start_time = See Fortran description.
See Fortran description.
bool ptb_3db_rampup_vac = See Fortran description.
See Fortran description.
int ptb_3db_rampup_time = See Fortran description.
See Fortran description.
bool ptb_3db_screening_on = See Fortran description.
See Fortran description.
double ptb_3db_screening_width1 = See Fortran description.
See Fortran description.
double ptb_3db_screening_width2 = See Fortran description.
See Fortran description.
double ptb_3db_screening_psi1 = See Fortran description.
See Fortran description.
double ptb_3db_screening_fac1 = See Fortran description.
See Fortran description.
double ptb_3db_screening_fac2 = See Fortran description.
See Fortran description.
int ptb_3db_num_ntor = See Fortran description.
See Fortran description.
int ptb_3db_ntor_min = See Fortran description.
See Fortran description.
int ptb_3db_num_mpol = See Fortran description.
See Fortran description.
double ptb_3db_em_inpsi = See Fortran description.
See Fortran description.
double ptb_3db_em_outpsi = See Fortran description.
See Fortran description.
double ptb_3db_em_bd_width = See Fortran description.
See Fortran description.
int ptb_3db_single_mode_ntor = See Fortran description.
See Fortran description.
int ptb_3db_nr = See Fortran description.
See Fortran description.
int ptb_3db_nz = See Fortran description.
See Fortran description.
double ptb_3db_update_alpha = See Fortran description.
See Fortran description.
int ptb_3db_dasdt_opt = See Fortran description.
See Fortran description.
int ptb_3db_mode = 0
Mode of operation: (0) static RMP field (ES), or fully self-consistent RMP field (EM version)
(2) self-consistent RMP field with time-averaged field-equations (EM version)
bool ptb_3db_em_full_spec = false
If false, only modes |m/q-n|<=sml_mode_select_mres_q are retained,
if true, the remaining modes are retained in toroidal Fourier representation
but without RMP response (EM only).
int ptb_3db_mstep_es = 0
Number of ES time steps in RMP penetration calculation with ptb_3db_mode==2
int ptb_3db_mstep_em = mstep
Number of EM time steps in RMP penetration calculation with ptb_3db_mode==2
int ptb_3db_es_to_em_dt_ratio = 1
Ratio of ES to EM time step size in RMP penetration calculation with ptb_3db_mode==2
(also: the number of time steps over which the perturbed current is averaged)

ptl_param

bool ptl_is_gyrokinetic = !species_is_electron, ... [per species] ...
Whether particles of this species are gyrokinetic or drift kinetic
int ptl_num_per_vertex = 10000, ... [per species] ...
Initial number of particles of each species per vertex per plane. e.g. Doubling the number of planes will double the number of particles in the simulation. The value refers to the average number of particles per vertex. It does not imply that each vertex has this number of associated particles initialized; the spatial distribution is controlled by other parameters.
int ptl_num = 3000
Initial number of particles per species per OpenMP thread per MPI rank. This method is an alternative to ptl_num_per_vertex. All species have the same value.
std::string ptl_marker_type = default_marker_type, ... [per species] ...
Marker type: reduced delta-f, total-f, full-f, or none (placeholder for adiabatic species)
std::string ptl_f_analytic_shape = default_f_analytic_shape, ... [per species] ...
f_analytic_shape shape: Maxwellian, SlowingDown or None
std::string ptl_weight_evo_eq = default_weight_evo_eq, ... [per species] ...
Specifies the weight evolution equation method: Direct, PDE, or None.
- Direct integration: Is used in the Total-F method, where the source term and particle contributions are evaluated separately.
Refer to Section II C of Hager et al., Phys. Plasmas 29, 112308 (2022) for more details.
- PDE: The PDE (Partial Differential Equation) method, where the source term and particle contributions are evaluated together (delta-f).
- None: No weight evolution is applied.
bool ptl_dynamic_f0 = default_dynamic_f0, ... [per species] ...
Whether f0 can evolve in time
bool ptl_maxwellian_init = true, ... [per species] ...
whether initial distribution is maxwellian
double ptl_mass_au = 2.0e-2, ... [per species] ...
Particle mass in AU
double ptl_charge_eu = -1.0, ... [per species] ...
Particle charge in EU
int ptl_collision_grid_index = nonadiabatic_idx, ... [per species] ...
Which collision grid to use. This option can be used to assign species to share a collision grid, improving performance of the collision operator. By default, each species has its own collision grid. ptl_collision_grid_index = 0, 1, 2, 2 would mean the third and fourth species share a collision grid.
std::string ptl_input_file_dir = "./"
Directory of input file for loading initial distribution
std::string ptl_f_init_file = "i_initial_f.bp", ... [per species] ...
Input file name for initial distribution
int ptl_nsp = 1
Number of ion species in the simulation
double ptl_special_r = magnetic_field.equil.axis.r
Initial r coordinate of particle if using sml_load_single_ptl
double ptl_special_z = magnetic_field.equil.axis.z
Initial z coordinate of particle if using sml_load_single_ptl
double ptl_special_phi = 0.0
Initial phi coordinate of particle if using sml_load_single_ptl
double ptl_special_en_ev = 7205.0
Initial energy of particle if using sml_load_single_ptl
double ptl_special_pitch = 0.276
Initial pitch angle of particle if using sml_load_single_ptl

rad_param

std::string rad_filename = "mist_adas_xgc1.dat"
Filename containing radiation information
int rad_start_time = 1
Start time for impurity radiation in time steps
double rad_impurity_fraction = 0.1
simplest model : n_imp / n_e is constant
bool rad_use_zeff_profile = false
Use a psi-dependent Z-effective for radiation.
bool rad_use_fix_charge = true
Use fixed Z for impurity
double rad_z = 6.0
! fixed Z for impurity - Z_Carbon –> 6, Z^2 –> 36
double rad_inpsi = magnetic_field.inpsi
Inner boundary for impurity radiation
double rad_outpsi = magnetic_field.outpsi
Outer boundary for impurity radiation
int rad_species = -1
Which species to use for density if not using a Z-effective profile

resamp_param

bool resamp_restart = false
Perform resampling before dumping the final restart file
bool resamp_restart_read = false
Whether to read a restart file written from a simulation with different grid
int resamp_rate = 2
timesteps between subsequent resamples, placedholder, in practice ~ sml_f_source_period
double resamp_var = 1.0e4
threshold for relative standard deviation in bin for auto-resample
double resamp_min_ratio = 0.5
min ratio of (# of ptl)/(target # of ptl) in bin for auto-upsample
double resamp_max_ratio = 1.5
max ratio of (# of ptl)/(target # of ptl) in bin for auto-downsample
int resamp_tile_size = 2
Bin size on the velocity space grid in cells (not vertices) (input parameter)
int resamp_max_target = 4
Overrides the number of constraints in determining the target # of ptl of a bin
double resamp_ineq_tol = 1.0e-4
Threshold for relative error in the inequality constraints in the QP optimization
bool resamp_retry = false
Retry QP optimization for failed bins with relaxed inequality constraints
double resamp_ineq_tol_max = 1.0e-3
Maximal threshold for relative error in inequality constraints for retried bins
double resamp_highv_max = 10.0
energy cutoff of the high velocity bins v_para>f0_vp_max and v_perp>f0_smu_max
double resamp_highv_max_ratio = 4.0
Downsampling threshold for high-velocity bins
std::string resamp_node_file = "resample.node"
File containing the vertex positions of the mesh for which to resample
int resamp_nphi_new = 1
Number of poloidal planes in simulation with new mesh
bool resamp_fill_empty = false
Whether to fill empty bins
bool resamp_fullf_on = false
Whether to resample the full-f weights in addition to delta-f weights
bool resamp_grid_ineq_on = false
Switch for using inequality constraints for the grid charge for resampling
bool resamp_distribute_evenly_subbins = false
Whether to fill/remove evenly in 1x1 velocity cells in the bin when resamp_tile_size > 1 and upsampling/downsampling
double resamp_var_limit = 3.0
Increase in relative bin variance for flagging for possible rejection
bool resamp_discard_var_bins = false
Discard resampled bins that increase the variance by factor of resamp_var_limit
bool resamp_output_problem_bins = false
Switch to output failed or high-variance bins as to .bp files
std::string resamp_up_choice = "random"
option arg for upsampled new particle selection: ‘random’,’copy’,’poisson’ currently added
random: random velocity coordinates for new particles in bin
copy: add new particles as copies of old particles with largest absolute w0*w1 weight
poision: add new particles as poisson disc samples generated from the old particle set.
std::string resamp_down_choice = "weight"
option arg for downsampled new particle selection: ‘random’,’weight’,’weight+replace’,’volume’
weight: keep particles with largest w0*w1 absolute weight, deterministic
weight+replace: keep particles with largest w0*w1 absolute weight, allow multiple copies of same particle
if split weight is still larger than next unsplit particle
volume: keep particles with largest phase space volume, deterministic
double resamp_max_shift = 0.1
maximum shift in local coordinates for ‘copy’, ‘weight+replace’
bool resamp_keep_upsamples = false
Retain upsampling results with high variance, for filling for pseudoinverse. Only relevant if resamp_discard_var_bins is .true.
bool resamp_keep_downsamples = false
Retain downsampling results with high variance, mainly for preventing buildup. Only relevant if resamp_discard_var_bins is .true.

sml_param

bool sml_ff_boundary_zero_p = false
zero out p for non-exist field following position.
bool sml_flat_electron_density = false
In case of adiabatic electrons, whether to use a uniform electron background density
bool sml_electron_on = false
Use kinetic electrons
int sml_grid_nrho = 6
Size of the gyroradius grid (should be such that the resolution is >= 0.5 rho_i)
int sml_ncycle_half = 30
Number of subcycles in electron push RK step 1. Total number of subcycles is twice this value.
double sml_rhomax = 1.0e-2
Upper cutoff of the gyroradius grid (should be the gyroradius of the fastest ions of interest)
int sml_nphi_total = 16
Number of planes in the simulation
bool sml_pol_decomp = true
Switch to use poloidal domain decomposition
int sml_f_source_period = 1
Period (in time steps) of when f_source is called
bool sml_radiation = false
Switch for a simple radiation module using part of the ADAS
data base (must be configured with the rad_param namelist)
bool sml_neutral = false
Switch for using the neutrals
bool sml_source = false
Switch for using the heat source
bool sml_current_drive_on = false
Switch for current drive
bool sml_thermal_bath_on = false
Switch for thermal bath
std::string sml_input_file_dir = "./"
Directory containing the grid files
bool sml_create_analytic_grid = false
Option to use a generated grid instead of reading a grid from file. The grid is composed of concentric circles of vertices. analytic_grid_param can be used to control basic grid properties.
Keep analytic grid options simple: number of surfaces, and axis_r
std::string sml_node_file = "example_file.node"
The grid file
std::string sml_ele_file = "example_file.ele"
The element file
std::string sml_surf_file = "example_file.flx.aif"
The flux surface file
double sml_marker_temp_factor2 = See Fortran description.
See Fortran description.
double sml_limit_marker_den_fac = See Fortran description.
See Fortran description.
int sml_f0_grid_lbal_period = See Fortran description.
See Fortran description.
double sml_f0_grid_min_ptl_imbal = See Fortran description.
See Fortran description.
double sml_f0_grid_max_ptl_imbal = See Fortran description.
See Fortran description.
double sml_f0_grid_init_ptl_imbal = See Fortran description.
See Fortran description.
bool sml_symmetric_f0g = See Fortran description.
See Fortran description.
int sml_sep_surf_index = See Fortran description.
See Fortran description.
int sml_nsurf3 = See Fortran description.
See Fortran description.
int sml_sep2_surf_index = See Fortran description.
See Fortran description.
int sml_nsurf3_2 = See Fortran description.
See Fortran description.
bool sml_update_poisson_turb = See Fortran description.
See Fortran description.
bool sml_update_ampere_solver = See Fortran description.
See Fortran description.
int sml_update_ampere_solver_nstep = See Fortran description.
See Fortran description.
int sml_update_poisson_solver_nstep = See Fortran description.
See Fortran description.
int sml_mode_select_n = See Fortran description.
See Fortran description.
int sml_mode_select_mres_q = See Fortran description.
See Fortran description.
double sml_mode_select_psitol = See Fortran description.
See Fortran description.
double sml_mode_select_mmin = See Fortran description.
See Fortran description.
double sml_mode_select_mmax = See Fortran description.
See Fortran description.
int sml_mode_select_nmin = See Fortran description.
See Fortran description.
int sml_mode_select_nmax = See Fortran description.
See Fortran description.
int sml_mode_select_cutoff = See Fortran description.
See Fortran description.
int sml_mode_select_cutoff_mode = See Fortran description.
See Fortran description.
double sml_mode_select_max_kth_rho = See Fortran description.
See Fortran description.
bool sml_mode_select_bands_on = See Fortran description.
See Fortran description.
int sml_mode_select_nmin_real = See Fortran description.
See Fortran description.
int sml_mode_select_nmax_real = See Fortran description.
See Fortran description.
int sml_mode_select_sol_mode = See Fortran description.
See Fortran description.
int sml_mode_select_num_m_damp = See Fortran description.
See Fortran description.
double sml_mode_select_damp_width = See Fortran description.
See Fortran description.
int sml_mode_select_use_minm = See Fortran description.
See Fortran description.
bool sml_mode_select_keep_axisym = See Fortran description.
See Fortran description.
bool sml_mode_select_div_mix = See Fortran description.
See Fortran description.
bool sml_mode_select_no_m0 = See Fortran description.
See Fortran description.
std::string sml_add_pot0_file = See Fortran description.
See Fortran description.
int sml_add_pot0_mixing_time = See Fortran description.
See Fortran description.
bool sml_replace_pot0 = See Fortran description.
See Fortran description.
bool sml_use_simple00 = See Fortran description.
See Fortran description.
int sml_iter_solver_niter = See Fortran description.
See Fortran description.
int sml_iter_solver_precond_type = See Fortran description.
See Fortran description.
double sml_iter_solver_rtol = See Fortran description.
See Fortran description.
double sml_iter_solver_atol = See Fortran description.
See Fortran description.
int sml_iter_solver_max_it = See Fortran description.
See Fortran description.
bool sml_mod_adiabatic = See Fortran description.
See Fortran description.
double sml_mod_adiabatic_psi_in = See Fortran description.
See Fortran description.
double sml_mod_adiabatic_psi_out = See Fortran description.
See Fortran description.
bool sml_adiabatic_from_poisson = See Fortran description.
See Fortran description.
bool sml_poisson_0m_full_geo = See Fortran description.
See Fortran description.
double sml_sheath_init_pot_factor = See Fortran description.
See Fortran description.
bool sml_sheath_init_pot_auto = See Fortran description.
See Fortran description.
double sml_sheath_adjust_factor = See Fortran description.
See Fortran description.
bool sml_use_pade = See Fortran description.
See Fortran description.
double sml_dpot_te_limit_n0 = See Fortran description.
See Fortran description.
bool sml_plane_major = See Fortran description.
See Fortran description.
double sml_max_imbalance = See Fortran description.
See Fortran description.
double sml_ptl_imbal_ion = See Fortran description.
See Fortran description.
double sml_tri_psi_weighting = See Fortran description.
See Fortran description.
bool sml_adjust_eden = See Fortran description.
See Fortran description.
double sml_adj_eden_zero_axis = See Fortran description.
See Fortran description.
double sml_adj_eden_vd_max = See Fortran description.
See Fortran description.
double sml_adj_eden_axis_decay_width = See Fortran description.
See Fortran description.
double sml_adj_eden_sep_decay_width = See Fortran description.
See Fortran description.
double sml_adj_eden_obd_psi = See Fortran description.
See Fortran description.
bool sml_adj_eden_include_sol = See Fortran description.
See Fortran description.
bool sml_reduce_core_ptl = See Fortran description.
See Fortran description.
double sml_core_ptl_fac = See Fortran description.
See Fortran description.
double sml_core_ptl_psi = See Fortran description.
See Fortran description.
bool sml_mms = See Fortran description.
See Fortran description.
double sml_mms_alpha = See Fortran description.
See Fortran description.
double sml_mms_beta = See Fortran description.
See Fortran description.
double sml_mms_gamma = See Fortran description.
See Fortran description.
double sml_en_order_kev = 0.2
Characteristic ion energy (keV) –> controls reference time (toroidal ion transit time)
int sml_restart_write_period = 10000000
Number of time steps between each simulation checkpoint. A checkpoint file is also written after the final time step of the simulation.
bool sml_increase_ptl_tor = false
increase # of particle with different toroidal angle when reading restart file
bool sml_flat_marker = true
Use flat marker distribution function when set to .true.
Marker distribution g is constant up to v<= sml_flat_marker_decay_start[1/2]
and decays exponentially from there up to v<= sml_flat_marker_cutoff. The decay
length is sml_flat_marker_width.
double sml_flat_marker_decay_start1 = 3.5
Normalized (to \(v_{th}\)) velocity at which the marker distribution decays exponentially
double sml_flat_marker_cutoff1 = 4.0
Normalized (to \(v_{th}\)) parallel velocity cutoff of flat marker distribution
double sml_flat_marker_width1 = 0.5
Decay length of flat marker distribution in the normalized (to \(v_{th}\)) parallel velocity
double sml_flat_marker_decay_start2 = flat_marker_decay_start1
Like sml_flat_marker_decay_start1 but for the perpendicular velocity
double sml_flat_marker_cutoff2 = flat_marker_cutoff1
Like sml_flat_marker_cutoff1 but for the perpendicular velocity
double sml_flat_marker_width2 = flat_marker_width1
Like sml_flat_marker_width1 but for the perpendicular velocity
bool sml_field_aligned_initial = false
Use field aligned initial condition
double sml_initial_deltaf_noise = 1.0e-3
Delta-f particle weights are initialized with this level of noise
bool sml_load_single_ptl = false
Option to run simulation with a single particle. The particle’s initial phase is determined by the inputs ptl_special_r etc. This option overrides ptl_num and ptl_num_per_vertex
double sml_marker_temp_factor = 1.0
Initial loading with Maxwellian marker distribution with virtual temperature
\(T_{marker} = \alpha*T_{plasma}\) (only if sml_flat_marker=.false.)
double sml_marker_min_temp = 10.0
minimum temperature of markers (only if sml_flat_marker=.false.)
double sml_low_mu_fill_population = 0.0
Used for filling the low-mu range of velocity space if sml_marker_temp_factor3>1
0.0 –> all markers in low-mu range, 1.0 –> no low-mu filling (only if sml_flat_marker=.false.)
bool sml_use_loading_factor = false
Marker particle distribution taking into account the local
(configuration space) node volume, i.e. aim for uniform
number of ptl/mesh vertex. Set .true. when using a
mesh with very non-uniform resolution
double sml_max_loading_factor = 10.0
Upper limit for loading factor (default is conservative, might need higher value)
double sml_min_loading_factor = 0.1
Lower limit for loading factor (default is conservative, might need lower value; lower values increase time for loading)
int sml_wedge_n = 1
Simulate a wedge of 2pi/sml_wedge_n of the full torus
double sml_mode_select_inpsi = -0.1
Inner boundary for mode selection
double sml_mode_select_outpsi = 10.0
Outer boundary for mode selection
double sml_mode_select_bd_width = 0.01
Width of boundary envelope
bool sml_turb_efield = true
E-field calculated only with \(<\phi>\) if .false.
psn%dpot will still contain all (n=0,|m|>0) and (|n|>0,m) modes
bool sml_00_efield = true
Flux-surface averaged potential not used for calculating the electric field if .false.
bool sml_0m_efield = true
The axisymmetric potential variation \(\langle \phi-\langle\phi\rangle\rangle_T\) is
set to zero if .false.
bool sml_em_mixed_variable = true
Switch for use of mixed-variable formulation
bool sml_em_control_variate = false
Switch for use of control variate method
int sml_em_pullback_mode = 3
(0) ???
(1) ???
(2) ???
(3) mixed-variable pullback with dA_s/dt=0,
(4) pullback using Ohm’s law dA_s/dt + b.grad(phi) = 0
(5) pullback using dA_s/dt + b.grad(phi) = -eta*j
double sml_bt_sign = -1.0
Option to flip sign of toroidal field
double sml_bp_sign = 1.0
Option to flip sign of poloidal field
int sml_ff_step = 2
Number of steps taken when projecting the particle location onto the midplane
int sml_ff_order = 4
Order of RK scheme used for field following. Can be 1, 2, or 4.
double sml_bd_min_r = 1.0e-4
Minimum R of simulation
double sml_bd_max_r = 1.0e3
Minimum R of simulation
double sml_bd_min_z = -1.0e3
Maximum Z of simulation
double sml_bd_max_z = 1.0e3
Maximum Z of simulation
double sml_inpsi = 0.0
Inner psi boundary for the simulation
double sml_outpsi = 1.05
Outer psi boundary for the simulation
bool sml_restart = false
Whether to restart if possible
bool sml_bd_ext_delta_in_simple00 = false
Description needed
bool sml_zero_inner_bd = false
If .true., use Dirichlet boundary condition \(\phi=0\)
double sml_bd_ext_delta1 = 0.01
Outward shift of the inner boundary of the axisymmetric Poisson solver relative to sml_inpsi (in norm. pol. flux)
double sml_bd_ext_delta2 = 0.02
Outward shift of the inner boundary of the RHS of the axisymmetric Poisson solver relative to sml_inpsi (in norm. pol. flux)
double sml_bd_ext_delta3 = bd_ext_inner
Inward shift of the outer boundary of the axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux)
double sml_bd_ext_delta4 = bd_ext_rhs_inner
Inward shift of the outer boundary of the RHS of the axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux)
bool sml_node_vol_monte = node_vol_monte_default
Calculate node volume using Monte-Carlo method (true), or analytic method (false)
int sml_monte_num = monte_num_minimum
Number of Monte Carlo points to use in calculating various simulation volumes. The actual number of points used may depend on number of MPI ranks, OpenMP threads, and particles.
int sml_increase_ptl_factor_int = 1
the factor to increase when sml_increase_ptl_tor
double sml_increase_ptl_rand_w0 = 1.0e-4
random noise to w0 - to avoid identical marker of sml_increase_ptl_factor_int
double sml_increase_ptl_rand_w1 = 1.0e-4
random noise to w1 - to avoid identical marker of sml_increase_ptl_factor_int
double sml_increase_ptl_rand_mu = 1.0e-4
random noise to rho_parallel (v_parallel) - to avoid identical marker of sml_increase_ptl_factor_int
double sml_increase_ptl_rand_vp = 1.0e-4
random noise to mu - to avoid identical marker of sml_increase_ptl_factor_int
double sml_increase_ptl_rand_phi = 1.0e-1
random noise to phi (applied to core only) to avoid identical marker of sml_increase_ptl_factor_int
double sml_outpsi_priv1 = 0.97
Outer boundary (for Poisson solver), normalized poloidal flux
double sml_outpsi_priv2 = 2.0
Outer boundary (for Poisson solver, 2nd private region), normalized poloidal flux
double sml_bd_ext_near_wall = 0.0
To move the outer boundary of the Poisson solver away from the inner wall (in m)
double sml_dt = 0.001
Time step (s)
int sml_sheath_mode = 0
Type of sheath (0 is none)
bool sml_sheath_adjust = false
Whether to adjust the sheath
bool sml_3db_on = false
Toggle for ptb_3db
bool sml_drift_on = true
Toggle for using drift
int sml_bounce_zero_weight = 0
If ==1 and bounce>0, set particle weights to zero after bouncing from the outer boundary
double sml_bounce_buffer = 0.0
Buffer width between sml_outpsi and where the particle actually bounces (must be >=0)
bool sml_00_xz_up = false
Use upper region of xz when obtaining 00 mode
int sml_mstep = 3000
Number of time steps to run
bool sml_limit_marker_den = false
Whether to limit marker density
bool sml_exclude_private = false
Whether to exclude private region in ion charge deposition
int sml_bounce = is_core_simulation ? 2 : 1
Bounce routine switch 0 for off, 1 for inner boundary, 2 for both boundaries
bool sml_grad_psitheta = is_XGCa ? true : false
If true, gradiant operator is calculated as
\((\hat{\boldsymbol{\psi}}\cdot\nabla,\hat{\boldsymbol{\theta}}^\ast)\cdot\nabla\)
instead of \((R,Z)\) coordinates.
bool sml_resamp_on = false
Switch to use particle resampling
bool sml_helmholtz_spectral = false
Whether to solve Helmholtz-type equations with toroidally spectral solver
int sml_mode_select_mode = 0
Fourier filter mode: 0) No filter,
1) single-n,
4) m_range (mmin..mmax)
2 or 5) n range + resonant m
3 or 6) n range + m range
bool sml_em_exclude_private = true
Makes the private flux region electrostatic if .true.
double sml_bd_ext_delta_ai = 0.0
Shift of inner boundary of n!=0 Ampere solver (LHS) outwards relative to sml_inpsi
double sml_bd_ext_delta_ao = 0.0
Shift of outer boundary of n!=0 Ampere solver (LHS) inwards relative to sml_outpsi
bool sml_field_solver = true
Whether to solve for fields. Scatter and solve are skipped if set to false
bool sml_update_poisson_solver = false
Whether poisson solver is updated
double sml_dpot_te_limit = 64.0
Max absolute value of dpot/temp in getf0
bool sml_no_fp_in_f = false
If .true. the distribution function used for the source routines
will not include particle information (only for testing)
bool sml_em_use_dpot_te_limit = false
In EM simulation: whether to force usage of the min-max limiter on the turbulent potential fluctuation
double sml_f0_grid_alpha = 0.0
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 sml_f0_grid_alpha_start = 1
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
double sml_update_g_alpha = 0.0
Fraction of the numerical marker particle density that is transferred to the g2
bool sml_symmetric_f = is_XGCa ? true : false
Enforce axisymmetry of the total distribution function on the grid
bool sml_ignore_f0g = false
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
bool sml_dwdt_fix_bg = false
1-w factor in dwdt
bool sml_dwdt_exb_only = false
excluding grad-b drift in dwdt
double sml_em_pullback_dampfac = 1.0
Damping term gamma on -b.grad(phi) in pullback mode 4
int sml_em_control_variate_niter = 1
Number of iterations for Ampere solve with control-variate method
bool sml_em_b_para_eff = false
Effective dB_|| via a modified grad-B drift (Joiner et al., PoP, 2010)
bool sml_em_dasdt_hypvis = false
Use radial hyperviscosity in dA_s/dt (push_As)
bool sml_no_turb = false
Set all non-axisymmetric field perturbations to zero (electromagnetic version only)
bool sml_em_n0 = false
Include n=0 electromagnetic mode
bool sml_em_dasdt_filter_on = false
Switch for applying Fourier filters on RHS of dAs/dt equation (pullback mode 4)
bool sml_iter_solver = true
For sml_poisson_solver_type=0: 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.
int sml_poisson_solver_type = 0
(0) Simple axisymmetric Poisson solver (single equation)
(–> see sml_iter_solver)
(1) Linear Poisson equation for the axisymmetric
potential (as in sml_iter_solver=.true.) but
with constraint equation for the flux-surface averaged
potential on the RHS. Solved with Schur complement solver.
Much faster and accurate than the iterative solver, but
causes instability in simulations with open field-lines.
(2) Non-linear Poisson equation
bool sml_iter_solver_converge = false
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 sml_positive_phi00_sol = false
Description needed
bool sml_heuristic_priv_pot = false
Override the Poisson solver in the private region and replace the solution by
the separatrix potential scaled with the initial electron temperature
bool sml_poisson_natural_boundary = false
Set the potential on the solver boundary equal to the flux-surface
averaged potential (implies \(\delta\phi_wall=0\)).
This is supposed to prevent a sheath-like potential drop at the mesh
boundary and make sure that the logical sheath model takes care of
the sheath physics. Also, it should prevent \(\delta\phi/\phi\sim1\).
int sml_add_pot0 = 0
Additional electrostatic potential: (0) for off, (1) for reading data from file
(2) for simple neoclassical axisymmetric field (not operational)
bool sml_poisson_use_bc = false
(XGCa only) False: 00-bc is phi=0 everywhere; true: 00-boundary
bool sml_dpot_bd_apply = false
Damp (n=0,m>0) potential towards the magnetic axis
double sml_dpot_bd_width = 0.02
Decay length (normalized flux) for (n=0,m>0) potential towards the magnetic axis
bool sml_poisson_bias = false
Add bias potential
bool sml_poisson_adia_wall = false
EXPERIMENTAL! DON’T USE UNLESS ADVISED BY AN EXPERT
If true, an adiabatic wall condition is used (no polarization, n_i=0, n_e!=0)
in the axisymmetric solver; this is an experimental option and should
be used together with sml_sheath_mode=1 and sml_sheath_init_pot_factor=0.
bool sml_loop_voltage_on = false
Inductive current drive: loop voltage (from Faraday’s law curl(E)=-dB/dt)
bool sml_loop_voltage_fsa = true
Make loop voltage and current drive flux-functions if true (default: true)
bool sml_multirate_timestepping = false
Use multirate timestepping
bool sml_create_analytic_equil = false
Creates a simple analytic magnetic field instead of reading from a file
bool sml_read_eq = true
Read magnetic equilibrium from a .eqd file
bool sml_read_eq_m3dc1 = false
Read magnetic equilbrium from an m3dc1 result
Ignore read_eqd if read_m3dc1 is true
double sml_bd_ext_delta1h = bd_ext_delta1
Outward shift of the inner boundary of the non-axisymmetric
Poisson solver relative to sml_inpsi (in norm. pol. flux)
double sml_bd_ext_delta2h = bd_ext_delta2
Outward shift of the inner boundary of the RHS of the non-axisymmetric
Poisson solver relative to sml_inpsi (in norm. pol. flux)
double sml_bd_ext_delta3h = bd_ext_delta3
Inward shift of the outer boundary of the non-axisymmetric
Poisson solver relative to sml_outpsi (in norm. pol. flux)
double sml_bd_ext_delta4h = bd_ext_delta4
Inward shift of the outer boundary of the RHS of the non-axisymmetric
Poisson solver relative to sml_outpsi (in norm. pol. flux)
double sml_bd_ext_delta_ji = 0.0
Shift of outer boundary of n!=0 Ampere solver (LHS) inwards relative to sml_outpsi
double sml_bd_ext_delta_jo = 0.0
Shift of outer boundary of n!=0 Ampere solver (RHS) inwards relative to sml_outpsi
bool sml_exclude_private_turb = true
If .true. the private-flux region has no turbulence
bool sml_rgn1_pot0_only = false
If .true., the axisymmetric Poisson equation is solved only inside the separatrix.
int sml_guess_table_size = 500
Size of the hash table used to narrow down the number of triangles in which to search a particle
double sml_gradpsi_limit = 1.0e-3
If \(|\nabla\psi|\) is smaller than this threshold, \(\nabla\psi\) is computed
int sml_00_npsi = 150
Size of the uniform 1D psi-grid
bool sml_poisson_bias_kick = false
If true, a periodic kick drive instead of a continuous sinusoidal drive is used
double sml_poisson_bias_amp = 10.0
Ampltude of the bias potential in Volt
double sml_poisson_bias_amp2 = 10.0
Additional Ampltude of the bias potential in Volt for the kick drive
double sml_poisson_bias_psic = 0.5
Center position of bias potential phi_bia ~ exp(-(psi-psi0)^2), psi_normalized
double sml_poisson_bias_psiw = 0.02
Decay length of the radial envelope of the bias potential
int sml_poisson_bias_freq = 10000
Frequency in Hz of the bias potential
int sml_poisson_bias_start = 1
Time step in which the bias potential is started

smooth_param

bool smooth_pol_efield = false
Smoothing of poloidal potential before computing the poloidal field
bool smooth_fourier_filt_on = false
Switch for additional SOL Fourier filter
double smooth_pol_width = See Fortran description.
See Fortran description.
bool smooth_rad_efield = See Fortran description.
See Fortran description.
double smooth_pol_d0 = See Fortran description.
See Fortran description.
double smooth_grid_rad_width = See Fortran description.
See Fortran description.
double smooth_grid_rad_sigma = See Fortran description.
See Fortran description.
double smooth_sol_filt_lp0 = See Fortran description.
See Fortran description.
double smooth_sol_filt_width = See Fortran description.
See Fortran description.
int smooth_fourier_filt_maxm = See Fortran description.
See Fortran description.
int smooth_fourier_filt_minm = See Fortran description.
See Fortran description.
double smooth_fourier_filt_inpsi = See Fortran description.
See Fortran description.
double smooth_fourier_filt_outpsi = See Fortran description.
See Fortran description.
double smooth_fourier_filt_bd_width = See Fortran description.
See Fortran description.
bool smooth_hyp_vis_rad_priv = See Fortran description.
See Fortran description.
bool smooth_hyp_vis_rad_on = false
Switch for 2nd order accurate 4th derivative radial (grad(psi)) hyperviscosity
double smooth_hyp_vis_rad = 0.1
Strength of the radial hyperviscosity; sml_dt/smooth_hyp_vis_rad corresponds
to the decay time of a mode with k_x=pi/dx, where dx is the local mesh size
bool smooth_hyp_vis_parallel_on = false
Switch for 2nd order accurate 4th derivative field-aligned hyperviscosity
double smooth_hyp_vis_parallel = 1.0
Strength of the parallel hyperviscosity; sml_dt/smooth_hyp_vis_parallel corresponds
to the decay time of a mode with k_x=pi/dx, where dx is the local mesh size

src_param

int src_start_time = 1
Start time of source in ion time steps
int src_current_drive_start_time = 1
Time step at which current drive turns on
bool src_pellet_on = false
On/off switch for pellet ablation
int src_narea = See Fortran description.
See Fortran description.
int src_period = See Fortran description.
See Fortran description.
int src_niter = See Fortran description.
See Fortran description.
int src_nsubsection = See Fortran description.
See Fortran description.
double src_pin1 = See Fortran description.
See Fortran description.
double src_pout1 = See Fortran description.
See Fortran description.
double src_decay_width1 = See Fortran description.
See Fortran description.
double src_heat_power1 = See Fortran description.
See Fortran description.
double src_torque1 = See Fortran description.
See Fortran description.
double src_pin2 = See Fortran description.
See Fortran description.
double src_pout2 = See Fortran description.
See Fortran description.
double src_decay_width2 = See Fortran description.
See Fortran description.
double src_heat_power2 = See Fortran description.
See Fortran description.
double src_torque2 = See Fortran description.
See Fortran description.
double src_pin3 = See Fortran description.
See Fortran description.
double src_pout3 = See Fortran description.
See Fortran description.
double src_decay_width3 = See Fortran description.
See Fortran description.
double src_heat_power3 = See Fortran description.
See Fortran description.
double src_torque3 = See Fortran description.
See Fortran description.
double src_pin4 = See Fortran description.
See Fortran description.
double src_pout4 = See Fortran description.
See Fortran description.
double src_decay_width4 = See Fortran description.
See Fortran description.
double src_heat_power4 = See Fortran description.
See Fortran description.
double src_torque4 = See Fortran description.
See Fortran description.
int src_special_mode1 = See Fortran description.
See Fortran description.
int src_special_mode2 = See Fortran description.
See Fortran description.
int src_special_mode3 = See Fortran description.
See Fortran description.
int src_special_mode4 = See Fortran description.
See Fortran description.
int src_ishape1 = See Fortran description.
See Fortran description.
int src_ishape2 = See Fortran description.
See Fortran description.
int src_ishape3 = See Fortran description.
See Fortran description.
int src_ishape4 = See Fortran description.
See Fortran description.
double src_z_begin1 = See Fortran description.
See Fortran description.
double src_z_begin2 = See Fortran description.
See Fortran description.
double src_z_begin3 = See Fortran description.
See Fortran description.
double src_z_begin4 = See Fortran description.
See Fortran description.
double src_r_begin1 = See Fortran description.
See Fortran description.
double src_r_begin2 = See Fortran description.
See Fortran description.
double src_r_begin3 = See Fortran description.
See Fortran description.
double src_r_begin4 = See Fortran description.
See Fortran description.
double src_radius1 = See Fortran description.
See Fortran description.
double src_radius2 = See Fortran description.
See Fortran description.
double src_radius3 = See Fortran description.
See Fortran description.
double src_radius4 = See Fortran description.
See Fortran description.
double src_pellet_r = 1.0
Position of the pellet, R-coordinate in m
double src_pellet_z = 0.0
Position of the pellet, Z-coordinate in m
double src_pellet_cloud_a = 0.1
Semi-major axis of the neutral gas cloud around the pellet in m
double src_pellet_cloud_b = 0.1
Semi-minor axis of the neutral gas cloud around the pellet in m
double src_pellet_cloud_angle = 0.0
Angle of the semi-major axis wrt the horizontal plane
double src_pellet_rad = 1.0e-3
Radius of the pellet in m
double src_pellet_etemp = 5.0
Electron temperature of the pellet cloud in eV
double src_pellet_itemp = 5.0
Ion temperature of the pellet cloud in eV
double src_pellet_n_atoms = 1.0e21
Total number of atoms in the pellet; ablation stops after the pellet is spent
int src_pellet_ion_species = MAIN_ION
Index of the ion species in the pellet; default is a main ion pellet
int src_pellet_start_time = 1
Start time step of the pellet ablation
int src_pellet_stop_time = -1
End time step of the pellet ablation; if <0, no stop time
double src_loop_voltage = 0.0
Initial value for loop voltage
double src_loop_voltage_psimax = 1.0
Inductive current drive: outer boundary (in pol. flux) of the loop voltage
double src_current_drive_p = 0.4
Current drive PID controller: factor for proportional controller (\(P\))
double src_current_drive_i = 0.01
Current drive PID controller: factor for integral controller (\(I\))
double src_current_drive_d = 1.0
Current drive PID controller: factor for derivative controller (\(D\))

thermal_bath_param

double inpsi = 1.05
Overlap region inner boundary
double outpsi = 1.05
Overlap region outer boundary
double gamma = 5000.0
gamma_k
int n_energy_bins = 1
Number of energy bins
int n_diag_bins = 1
Number of bins for diagnostic
double gamma_coarse_graining = 5000.0
Coarse-graining gamma_cg
double vmax = 5.0
Maximum velocity for energy bins (normalized to thermal velocity)