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)