XGCa
sml_module Module Reference

## Public Attributes

integer sml_comm
Global MPI communicator within an XGC instance. More...

integer sml_comm_world
Global communicator between separate XGC instances (or XGC-GENE, XGC-GEM –> code-coupling) after MPI_COMM_WORLD split. More...

integer sml_comm_null
MPI_COMM_NULL communicator for adios posix method. More...

integer sml_comm_self
MPI_COMM_SELF communicator for single-process adios2 outputs. More...

integer sml_comm_color
Communicator color (used for mpi split/code-coupling). Set by my_mpi_init call. More...

integer sml_mype
Processor index, 0 - (# of MPI ranks -1) More...

integer sml_totalpe
Total number of processors (must be > (2*sml_grid_nrho)*sml_nphi_total) More...

Total number of OpenMP threads per process. More...

integer sml_mstep = 10
Total number of time steps for simulation. More...

integer sml_istep = 0
Current time step number (counting only the current simulation) More...

integer sml_gstep
Global time step (counting the current + all previous runs in case of restarts) More...

integer sml_epc
(Obsolete) 2nd order Runge-Kutta index, or predictor-corrector index for electrons More...

real(8) sml_time
Simulation time in seconds. More...

real(8) sml_time0
Initial time for PETSc TS solver in seconds. More...

real(8) sml_dt = 2D-3
Time step size in units of the toroidal ion transit time $$\tau_T = 2\pi R_{ax} / \sqrt{2 E_{norm}/m_i}$$, where $$E_{norm}$$ is a reference energy set with sml_en_order_keV (in keV) $$\Rightarrow\,E_{norm} = \text{sml_en_order_keV}\, 10^{3} e$$. The default value of sml_en_order is 0.2 keV. More...

logical sml_plane_major =.false.
MPI task ordering to use when mapping to 2D virtual processor grid. .true. for consecutive within plane; .false. for consecutive between planes. More...

logical sml_deltaf = .true.
delta-f switch: .false. for off, .true. for on. Total-f mode uses delta-f particles –> default is .true. More...

logical sml_deltaf_elec = .true.
delta-f switch: .false. for off, .true. for on. Total-f mode uses delta-f particles –> default is .true. More...

logical sml_drift_on =.true.
Whether drifts are active in the equations of motion. Set .false. for tracing field lines or Poincare plots. More...

logical sml_debug_flag = .false.
Switch for some debugging statements. More...

logical sml_dwdt_exb_only = .true.
Switch for classical delta-f weight evolution equation (i.e. not for total-f mode, must compile with DELTAF_CONV=ON): .false. to include all drifts (grad(B), curl(b),and ExB), .true. for ExB only. More...

logical sml_dwdt_fix_bg = .false.
Switch for classical delta-f weight evolution equation (i.e. not for total-f mode, must compile with DELTAF_CONV=ON): .false. for (1-w) pre-factor, .true. for (1) pre-factor. default is .false. More...

real(8) sml_marker_temp_factor = 1D0
Initial loading with Maxwellian marker distribution with virtual temperature $$T_{marker} = \alpha*T_{plasma}$$ (only if sml_flat_marker=.false.). More...

real(8) sml_marker_min_temp = 1D1
minimum temperature of markers (only if sml_flat_marker=.false.) More...

real(8) sml_marker_temp_factor2 =1D0
perp temperature factor (only if sml_flat_marker=.false.) More...

real(8) sml_marker_temp_factor3 =1D0
low mu fill temperature (only if sml_flat_marker=.false.) More...

real(8) sml_low_mu_fill_population = 0D0
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.) More...

logical 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. More...

real(8) sml_flat_marker_decay_start1 =3.5D0
Normalized (to $$v_{th}$$) velocity at which the marker distribution decays exponentially. More...

real(8) sml_flat_marker_cutoff1 =4D0
Normalized (to $$v_{th}$$) parallel velocity cutoff of flat marker distribution. More...

real(8) sml_flat_marker_width1 =0.5D0
Decay length of flat marker distribution in the normalized (to $$v_{th}$$) parallel velocity. More...

real(8) sml_flat_marker_decay_start2 =3.5D0
Like sml_flat_marker_decay_start1 but for the perpendicular velocity. More...

real(8) sml_flat_marker_cutoff2 =4D0
Like sml_flat_marker_cutoff1 but for the perpendicular velocity. More...

real(8) sml_flat_marker_width2 =0.5D0
Like sml_flat_marker_width1 but for the perpendicular velocity. More...

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. More...

Upper limit for loading factor (default is conservative, might need higher value) More...

Avg. number of ptl/vertex. More...

logical sml_limit_marker_den =.false.
Switch for limiting the marker density in the private region to sml_limit_marker_den_fac of the target number of markers/vertex (mainly for RMP!) More...

real(kind=8) sml_limit_marker_den_fac =5D0
Threshold for removing excess particles in multiples of the target # of ptl/vertex when sml_limit_marker_den=.true. More...

logical sml_initial_flow =.false.
Set .true. for non-zero initial toroidal rotation flow (must set parameters eq_flowi_XXX and eq_flowe_XXX) More...

logical sml_concentric =.false.
(Partially obsolete) Simulation for concentric circular geometry –> would only control behavior of bounce boundary condition in XGC_core/bounce.F90, but that part is commented out at this time More...

Read B-field profile from an eqd-file. More...

logical sml_field_aligned_initial =.false.
Use field aligned initial condition. More...

real(8), parameter sml_2pi = 6.2831853071795862D0
2 Pi More...

real(8), parameter sml_pi = 3.1415926535897931D0
Pi. More...

real(8), parameter sml_sqrtpi = 1.7724538509055158D0
Sqrt(Pi) More...

real(8), parameter sml_sqrt2pi = 2.5066282746310002D0
Sqrt(2Pi) More...

real(8) sml_2pi_wedge_n
Toroidal angle spanned by the wedge simulated by the code –> $$\text{sml_2pi_wedge_n}=2\pi/\text{sml_wedge_n}$$. More...

real(8), parameter sml_e_charge =1.6022D-19
elementary charge in C (MKS) More...

real(8), parameter sml_epsilon0 =8.8542D-12
permittivity of free space in F/m (MKS) More...

real(8), parameter sml_prot_mass =1.6720D-27
proton mass in kg (MKS) More...

real(8), parameter sml_elec_mass =9.1094D-31
electron mass in kg (MKS) More...

real(8), parameter sml_mu0 =1.2566370614D-6
Magnetic vacuum permeability in H/m (MKS) More...

real(8), parameter sml_ev2j =sml_e_charge
Conversion factor from eV to J. More...

real(8), parameter sml_j2ev =1D0/sml_e_charge
Conversion factor from J to eV. More...

integer, parameter sml_nrk = 2
Order of Runge-Kutta time integration of particles + fields. More...

integer sml_veclen =32
(Obsolete) Vectorization length, used in defunct AVX512 vectorized electron push kernel More...

logical sml_restart =.false.

logical restarting

logical simulation

logical switch

logical false

logical for

logical new

logical run

logical true

logical restart

integer sml_run_count
Run count for continued simulations: 1 for fresh start and 2, 3, 4, ... for restarted simulations. More...

real(8) sml_bp_sign =1D0
sml_bp_sign is opposite of sign of poloidal current Ip. sml_bp_sign=-1 for Ip // phi, sml_bp_sign=+1 for Ip // (-phi) The direction of Bp and Ip are following right hand rule. phi is from the (R,phi,Z) cylindrical coordinate system. The direction of phi is counter-clockwise looking on the torus from above. More...

real(8) sml_bt_sign =-1D0
1 for Bt // phi, -1 for Bt // (-phi) The direction of phi is described in the comments of sml_bp_sign. The default is bp_sign = 1 and bt_sign = -1 -> both Ip and Bt are -phi direction. (co-current Bt) More...

integer sml_monte_num =10000
Number of samples for Monte-Carlo volume calculation. It should be greater than particle number for correct simulation. More...

real(8) sml_bd_min_r =1D-4
Simulation boundary in R-Z space (in m) More...

real(8) sml_bd_max_r =1D3
Simulation boundary in R-Z space (in m) More...

real(8) sml_bd_min_z =-1D3
Simulation boundary in R-Z space (in m) More...

real(8) sml_bd_max_z =1D3
Simulation boundary in R-Z space (in m) More...

real(8) sml_marker_den

real(8), dimension(:,:),
allocatable
sml_marker_den2
Triangle based marker density. More...

real(8) sml_inpsi =0D0
Inner boundary for initial loading and other routines (e.g. solvers, bounce, ...); normalized poloidal flux (0 on axis, 1 on separatrix) More...

real(8) sml_outpsi =1.05D0
Outer boundary for initial loading and other routines (e.g. solvers, bounce, ...); normalized poloidal flux (0 on axis, 1 on separatrix) More...

real(8) sml_outpsi_priv1 =0.97D0
Outer boundary (for Poisson solver), normalized poloidal flux. More...

real(8) sml_outpsi_priv2 =2.0D0
Outer boundary (for Poisson solver, 2nd private region), normalized poloidal flux. More...

real(8) sml_en_order_kev =0.2D0
Characteristic ion energy (keV) –> controls reference time (toroidal ion transit time) More...

real(8) sml_en_order
(not an input) Characteristic ion energy in normalized unit More...

real(8) sml_tran
Torodial transit time of an ion with the characteristic energy. More...

integer sml_machine = -99
Not used anymore. Left only for input file compatibility. Will be removed near future. More...

integer sml_special =0
Switch for special simulation: (0) normal, (1) single particle simulation, (4) Poincare plot. More...

real(8) sml_bp_mult
Artificial multiplication of poloidal B-field. More...

real(8) sml_bt_mult
Artificial multiplication of toroidal B-field. More...

integer, parameter sml_nlarmor =4
Number of points used in gyroaverage. This is used only for calculating the electron background density in simulations with adiabatic electrons and in the direct evaluation of the (obsolete) flux-surface averaged ion gyrocenter and electron charge density. More...

integer sml_nphi_total
Number of poloidal planes (= toroidal grid size) More...

integer sml_nphi_2pi
In wedge simulations (sml_wegde_n>1): Number of poloidal planes in full torus. More...

integer sml_ff_step =2
Number of steps for field-following search/mapping (default=2) (set to 0 to let XGC decide) More...

integer sml_ff_order =4
Order of RK method used for field-following search/mapping (default=4) (set to 0 to let XGC decide) More...

integer sml_wedge_n =1
Simulate a wedge of 2pi/sml_wedge_n of the full torus. More...

logical sml_no_turb =.false.
Set all non-axisymmetric field perturbations to zero (electromagnetic version only) More...

logical sml_turb_efield =.true.
E-field calculated only with $$<\phi>$$ if .false. psndpot will still contain all (n=0,|m|>0) and (|n|>0,m) modes. More...

logical sml_turb_poisson =.true.
Non-axisymmetric Poisson equation not solved if .false. More...

logical sml_turb_poisson_n0_only =.false.
Keep only the axisymmetric potential (n=0,|m|>0) in psndpot. More...

logical sml_00_efield =.true.
Flux-surface averaged potential not used for calculating the electric field if .false. More...

logical sml_00_poisson =.true.
Flux-surface averaged Poisson equation not solved if .false. More...

If $$|\nabla\psi|$$ is smaller than this threshold, $$\nabla\psi$$ is computed $$(R,Z)$$ coordinates instead of $$(\hat{\boldsymbol{\psi}}\cdot\nabla,\hat{\boldsymbol{\theta}}^\ast)\cdot\nabla$$ even if sml_grad_psitheta is .true. More...

integer sml_grid_nrho =6
Size of the gyroradius grid (should be such that the resolution is >= 0.5 rho_i) More...

real(8) sml_rhomax =1D-2
Upper cutoff of the gyroradius grid (should be the gyroradius of the fastest ions of interest) More...

logical sml_tri_psi_weighting =.true.
Use modified triangle shape functions (Useful for coarse meshes in XGCa when straight element edges do not represent the curved flux-surfaces well. More...

If .true., gradiant operator is calculated as $$(\hat{\boldsymbol{\psi}}\cdot\nabla,\hat{\boldsymbol{\theta}}^\ast)\cdot\nabla$$ instead of $$(R,Z)$$ coordinates. More...

logical sml_node_vol_monte
Calculate node volume using Monte-Carlo method (true), or analytic method (false) More...

integer, parameter sml_nhybrid =2
Number of iterations in electrostatic electron weight evolution scheme This used to be an input variable but is now a parameter (sml_nhybrid=2) because a value of 2 was the only workable value. It implies a two-step Poisson solve (adiabatic electron solve -> electron weight update -> kinetic electron solve) More...

integer sml_ncycle_half =30
Half the number of electron substeps per ion time step. Should be larger than $$\sqrt{m_i/m_e}/2$$. For electrostatic simulation this should be divisible by 5. More...

logical sml_f0_grid =.true.
Switch for total-f simulation (roughly: include $$\boldsymbol{v}_D\cdot(\partial f_0/\partial \boldsymbol{x})$$ in the weight evolution equation. Enables use of 5D phase space grid for particle noise control (use sml_f0_grid_alpha>0). More...

integer sml_f0_grid_lbal_period =0
Force periodic update of the domain decomposition every sml_f0_grid_lbal_period time steps. When set to zero, the domain decomposition is adjusted only when the load imbalance exceeds its thresholds. More...

real(8) sml_f0_grid_max_ptl_imbal =2D0
Upper threshold for the particle load imbalance (typically ~1.3). More...

real(8) sml_f0_grid_min_ptl_imbal =1D0
Lower threshold for the particle load imbalance. More...

real(8) sml_f0_grid_init_ptl_imbal =1D0

integer sml_f0_nmu_decomp =1
(Not operational!) Parameter to control the decomposition of the velocity space grid in the $$v_\perp$$ direction. 1 means no decomposition. More...

real(8) sml_f0_grid_alpha =0D0
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. More...

integer 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. More...

integer sml_deltaf_f0_mode =-1
For classical delta-f: Use fixed gradient scale lengths (-1), use actual profiles (-2) More...

real(8) sml_f0_1_ln =2.22D0
Normalized density gradient scale length $$R_{ax}/L_n$$. More...

real(8) sml_f0_1_lt =6.92D0
Normalized ion temperature gradient scale length $$R_{ax}/L_{Ti}$$. More...

real(8) sml_f0_1_lt_e =6.92D0
Normalized electron temperature gradient scale length $$R_{ax}/L_{Te}$$. More...

logical sml_symmetric_f0g =.false.
Enforce axisymmetry only in f0g (used only in XGC1 fluid-kinetic hybrid method; -DHYB_EM=ON) More...

logical sml_symmetric_f =.true.
Enforce axisymmetry of the total distribution function on the grid. More...

integer sml_f_source_period =1
Run source routines (collisions, neutral recycling, etc.) every sml_f_source_period time steps. More...

real(8) sml_inv_f_source_period
(Not an input) Inverse of sml_f_source_period More...

logical sml_no_fp_in_f =.false.
If .true. the distribution function used for the source routines will not include particle information (only for testing) More...

character(len=65) sml_node_file ="neo10.1.node"
Unstructured mesh data: node-file. More...

character(len=65) sml_ele_file ="neo10.1.node"
Unstructured mesh data: ele-file. More...

character(len=65) sml_surf_file ="dummy"
Unstructured mesh data: flx-file. More...

integer sml_sep_surf_index =99999
Index of the inner separatrix surface in the flux-surface data (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON) More...

integer sml_sep2_surf_index =99999
Index of the outer separatrix surface in the flux-surface data (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON) More...

integer sml_nsurf3 =0
Number of flux-surfaces in the private flux region (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON) More...

integer sml_nsurf3_2 =0
Number of flux-surfaces in the second private flux region (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON) More...

integer sml_plane_per_pe
Number of poloidal planes per MPI rank (typically 1) More...

integer sml_pe_per_plane
Number of MPI ranks per poloidal plane (>=2*sml_grid_nrho) More...

Enable/disable Adios stage mode for xgc.restart. More...

Enable/disable Adios stage mode for xgc.restartf0. More...

Enable/disable Adios stage mode for xgc.f0. More...

Enable/disable Adios stage mode for xgc.particle. More...

Enable/disable Adios stage mode for xgc.3d. More...

Maximum numbrer of steps for Adios xgc.f0 stage write. More...

Enable/disable Adios stage mode for xgc.f3d. More...

Maximum numbrer of steps for Adios xgc.f3d stage write. More...

Enable/disable Adios stage mode for xgc.escaped_ptls. More...

integer sml_plane_group
MPI group for all MPI ranks assigned to the same poloidal plane. More...

integer sml_plane_comm
Communicator for all MPI ranks assigned to the same poloidal plane. More...

integer sml_plane_totalpe
Total number of MPI ranks assigned to a poloidal plane. More...

integer sml_plane_mype
MPI rank index within sml_plane_comm. More...

integer sml_plane_index
Index of the poloidal plane to which an MPI rank is assigned (0...sml_nphi_total-1) More...

integer sml_intpl_group
MPI group for all MPI ranks assigned to the same (R,Z) patch. More...

integer sml_intpl_comm
Communicator for all MPI ranks assigned to the same (R,Z) patch (toroidal communication) More...

integer sml_intpl_totalpe
Total number of MPI ranks within sml_intpl_comm. More...

integer sml_intpl_mype
MPI rank index within sml_intpl_comm. More...

integer sml_ksp_group = -1
MPI group for a subset of ranks on a plane used for PETSc KSP solves. More...

integer sml_ksp_comm = -1
MPI communicator for a subset of ranks on a plane used for PETSc KSP solves. More...

integer sml_ksp_mype = -1
MPI rank index within sml_ksp_comm. More...

integer sml_pe_per_ksp = 0
Number of MPI ranks used for PETSc KSP solves. More...

logical sml_electron_on =.false.
Whether to run with adiabatic (.false.) or kinetic (.true.) electrons. More...

logical sml_flat_electron_density =.false.
In case of adiabatic electrons, whether to use a uniform electron background density. More...

integer sml_guess_table_size =500
Size of the hash table used to narrow down the number of triangles in which to search a particle. More...

real(8) sml_initial_deltaf_noise =1D-3
Delta-f particle weights are initialized with this level of noise. More...

logical sml_zero_inner_bd =.false.
If .true., use Dirichlet boundary condition $$\phi=0$$ for axisymmetric Poisson solver. More...

integer 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. More...

integer sml_mode_select_n = 1
Toroidal mode number for Fourier filter. More...

integer sml_mode_select_mmin = 0
Lowest pol. mode number for Fourier filter. More...

integer sml_mode_select_mmax = 25
Highest pol. mode number for Fourier filter. More...

integer sml_mode_select_nmin = 1
Lowest numerical tor. mode number for Fourier filter (0,1,...,sml_nphi_total-1) More...

integer sml_mode_select_nmax = 1
Highest numerical tor. mode number for Fourier filter (0,1,...,sml_nphi_total-1) More...

integer sml_mode_select_nmin_real = 0
Lowest real toroidal mode number for FFT filter (n_real = (n_num+(i-1)*sml_nphi_total)*sml_wedge_n), max. i depending on mesh resolution. More...

integer sml_mode_select_nmax_real = 999
Highest real toroidal mode number for FFT filter (n_real = (n_num+(i-1)*sml_nphi_total)*sml_wedge_n), max. i depending on mesh resolution. More...

integer sml_mode_select_mres_q = 3
number of pol. mode numbers around the resonant mode divided by q; –> |m/q - n| <= mres_q or |m -n*q| <= mres_q*q More...

integer sml_mode_select_cutoff = 2
Factor for cutoff in Fourier space, determines gridm_max_surf(i) The default is the Nyquist limit sml_mode_select_cutoff=2. More...

integer sml_mode_select_cutoff_mode = 1
(1) Default: calculate max. pol. mode number using $$\max(\Delta\theta^\ast)$$; (2) use $$\Delta\theta^\ast$$ at $$B=B_{max}$$ on the flux-surface. More...

real(kind=8) sml_mode_select_inpsi = -0.1D0
inner boundary for mode selection More...

real(kind=8) sml_mode_select_outpsi = 10.0D0
outer boundary for mode selection More...

real(kind=8) sml_mode_select_bd_width = 0.01D0
width of boundary envelope More...

real(kind=8) sml_mode_select_psitol = 5D-5
psi tolerance (in SI-units –> Wb) for the identification of flux-surfaces More...

real(kind=8) sml_mode_select_max_kth_rho = 1.0D0
Max. k_theta*rhoi retained in poloidal Fourier filter. More...

logical sml_mode_select_bands_on = .false.
Determine the number of side bands to include by using gridm_max_surf(i) More...

logical sml_mode_select_div_mix = .true.
Whether to blend filtered and unfiltered data near the divertor plates (set .false. for increasing stability in EM simulations) More...

logical sml_mode_select_no_m0 = .true.
filter out m=0 mode while field-following FFT filtering. (fourier_filter_n_m_range_parallel) More...

logical sml_mode_select_use_minm = .false.
Restrict poloidal mode number m to m>1 in field aligned filter (sml_mode_select_mode=5) More...

integer sml_mode_select_sol_mode = 0
0: Retain sine and cosine modes in SOL but use a window function 1: Retain only sine modes in SOL and don't use a window function (Applies only to filter modes sml_mode_select_mode={5,6}!) More...

integer sml_mode_select_num_m_damp = 0
Pad the rectangular mode filter with |m/q-n|<=N with sml_mode_select_num_m_damp modes left and right and damp those modes exponentially. The damping factor is given by exp(-(x/w)^2) where x=max(0,|m-n*q|-sml_mode_select_mres_q) and w=sml_mode_select_damp_width. The default is sml_mode_select_num_m_damp=0, i.e., a sharp cutoff in the filter. More...

real(kind=8) sml_mode_select_damp_width = 2D0
Width (in terms of poloidal mode numbers of the smooth exponential cutoff in the poloidal part of the field-aligned Fourier filter (see sml_mode_select_num_m_damp). More...

logical sml_mode_select_keep_axisym = .false.
Whether to retain -sml_mode_select_mres_q*1 < m < sml_mode_select_mres_q*q (i.e. the axisymmetric mode) (used if FFT_NTOR_NUM_ZERO=On) More...

real(8) 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) More...

real(8) 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) More...

real(8) sml_bd_ext_delta3 =0.01
Inward shift of the outer boundary of the axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux) More...

real(8) sml_bd_ext_delta4 =0.02
Inward shift of the outer boundary of the RHS of the axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux) More...

real(8) sml_bd_ext_delta1h =0.01
Outward shift of the inner boundary of the non-axisymmetric Poisson solver relative to sml_inpsi (in norm. pol. flux) More...

real(8) sml_bd_ext_delta2h =0.02
Outward shift of the inner boundary of the RHS of the non-axisymmetric Poisson solver relative to sml_inpsi (in norm. pol. flux) More...

real(8) sml_bd_ext_delta3h =0.01
Inward shift of the outer boundary of the non-axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux) More...

real(8) sml_bd_ext_delta4h =0.02
Inward shift of the outer boundary of the RHS of the non-axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux) More...

real(8) sml_bd_ext_delta_ai = 0D0
Shift of inner boundary of n!=0 Ampere solver (LHS) outwards relative to sml_inpsi. More...

real(8) sml_bd_ext_delta_ao = 0D0
Shift of outer boundary of n!=0 Ampere solver (LHS) inwards relative to sml_outpsi. More...

real(8) sml_bd_ext_delta_ji = 0D0
Shift of inner boundary of n!=0 Ampere solver (RHS=current density) outwards relative to sml_inpsi. More...

real(8) sml_bd_ext_delta_jo = 0D0
Shift of outer boundary of n!=0 Ampere solver (RHS) inwards relative to sml_outpsi. More...

real(8) sml_dpot_bd_width = 0.02D0
Decay length (normalized flux) for (n=0,m>0) potential towards the magnetic axis. More...

logical sml_dpot_bd_apply = .false.
Damp (n=0,m>0) potential towards the magnetic axis. More...

real(8) sml_bd_ext_near_wall =0D0
To move the outer boundary of the Poisson solver away from the inner wall (in m) More...

logical sml_bd_ext_delta_in_simple00 = .false.
Use sml_bd_ext_delta in simple00 solve. More...

character(len=65) sml_input_file_dir
Path to the magnetic equilibrium, mesh and profile files (max. 65 characters) More...

logical sml_update_poisson_solver =.false.
If .true. density and temperature in the Poisson solver operators will be updated every sml_update_poisson_solver_nstep time steps. More...

logical sml_update_poisson_turb =.false.
Update the n != 0 Poisson solver, too (energy conservation?) More...

integer sml_update_poisson_solver_nstep =1
Number of time steps between subsequent updates of the Poisson solver operators. More...

logical sml_update_ampere_solver =.false.
If .true. density and temperature in the Ampere's law solver operators will be updated every sml_update_ampere_solver_nstep time steps. More...

integer sml_update_ampere_solver_nstep =1
Number of time steps between subsequent updates of the Ampere's law solver operators. More...

logical sml_poisson_use_bc =.false.
(XGCa only) False: 00-bc is phi=0 everywhere; true: 00-boundary is the wall with bc phi_bd=phi_sheath More...

logical sml_poisson_cylindrical_jac =.false.
Whether to use the cylindrical Jacobian in the Poisson solver or not. More...

logical sml_poisson_0m_full_geo =.false.
Whether to use full toroidal geometry in the axisymmetric Poisson solver (w/o approximation B_R<<B, and B_Z<<B) More...

logical sml_poisson_bias =.false.
Whether to use a (0,0) bias potential on top of phi_00. More...

real(8) sml_poisson_bias_psic = 0.50D0
Center position of bias potential phi_bia ~ exp(-(psi-psi0)^2), psi_normalized. More...

real(8) sml_poisson_bias_psiw = 0.02D0
Decay length of the radial envelope of the bias potential. More...

real(8) sml_poisson_bias_freq = 1D4
Frequency in Hz of the bias potential. More...

real(8) sml_poisson_bias_amp = 10D0
Ampltude of the bias potential in Volt. More...

integer sml_poisson_bias_start = 1
Time step in which the bias potential is started. More...

Use Pade approximation for short wavelengths. More...

real(8) sml_dpot_te_limit = 64D0
Limits the magnitude of the normalized turbulent potential e*dphi/T_e in order to, e.g., prevent an overflow in the Boltzmann term, exp(e*dphi/T_e) More...

real(8) sml_dpot_te_limit_n0 = 64D0
Limits the magnitude of the normalized axisymmetric potential e*dphi_0/T_e in order to, e.g., prevent an overflow in the Boltzmann term, exp(e*dphi_0/T_e) More...

logical sml_use_simple00 =.false.
Use simple 1D solver for the flux-surface averaged potential instead of PETSc. More...

logical 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. More...

integer sml_iter_solver_niter =10
Number of iterations for the iterative axisymmetric Poisson solver. More...

integer 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. More...

Additional electrostatic potential: (0) for off, (1) for reading data from file (2) for simple neoclassical axisymmetric field (not operational) More...

logical sml_replace_pot0 =.false.
If .true., replace Poisson solution with external data, if .false., add external potential to Poisson solution. More...

With sml_replace_pot0=.true. this option allows mixing the consistent solution with the imposed potential. At t=0 only the imposed field is used, over sml_add_pot0_mixing_time times steps the mixing factor is ramped down linearly to zero (only consistent field is used) More...

Name of the file containing the potential data to replace the consistent solution of the Poisson equation. More...

logical sml_exclude_private =.false.
If .true. the private-flux region is excluded from several aspects of the simulation (e.g., Poisson solver, collisions,...) More...

logical sml_exclude_private_turb = .true.
If .true. the private-flux region has no turbulence. More...

integer sml_sheath_mode =0
Mode of operation of the logical sheath boundary condition (0) off (1) The value of the logical sheath potential is adjusted locally reactively based on the number of ions and electrons that hit the wall in the previous time step. Can use sml_sheath_adjust_factor<1 to reduce noise. (2) Actual logical sheath mode: the number of ions and electrons hitting the wall is recorded, then the sheath potential required to balance ion and electron losses is determined, and only then is decided which electrons actually hit the wall and which were reflected by the sheath potential. The algorithm also tries to achieve a global balance if local balance cannot be achieved. (might need some debugging) More...

real(8) sml_sheath_init_pot_factor =2D0
Initial value of the sheath potential relative to the electron temperature. (for sml_sheath_mode=1) More...

logical sml_sheath_init_pot_auto =.false.
Set initial sheath potential to eq. based on Ti,Te, Maxwellian assumption. More...

Constant (.false.) or dynamic (.true.) sheath potential (for sml_sheath_mode=1) More...

Damping factor for slower adjustment of the sheath potential if sml_sheath_mode=1. More...

logical sml_rgn1_pot0_only =.false.
If .true., the axisymmetric Poisson equation is solved only inside the separatrix. More...

logical sml_source =.false.
Switch for heat and torque sources (sources must be configured separately with the parameters in the src_param namelist. More...

Switch for a simple radiation module using part of the ADAS data base (must be configured with the rad_param namelist) More...

logical sml_neutral =.false.
Switch for neutral recycling module (must be configured with the neu_param namelist) More...

logical sml_neutral_use_ion_loss =.false.
If .true., the charge loss used in the neutral recycling routine is computed from ion gyrocenters instead of electrons. More...

logical sml_pol_decomp =.true.
Switch for the use of radial-poloidal domain decomposition. More...

real(8) sml_max_imbalance =1.1D0
Threshold of the combined particle-mesh load imbalance that triggers an update of the domain decomposition. More...

real(8) sml_ptl_imbal_ion =3D0
Maximal load ion particle imbalance. More...

logical sml_00_xz_up =.false.
Use only $$Z>Z_{xp}$$ for flux-surface average calculation (only for -DCONVERT_GRID2=OFF) More...

integer, parameter sml_n_vf_diag =9
Number of diagnostic output quantities from the particle push routine. More...

integer sml_00_npsi
Size of the uniform 1D psi-grid (relevant only for -DCONVERT_GRID2=OFF) More...

Maximum particle energy (wrt the thermal speed) in initial particle distribution (if sml_flat_marker=.true.) More...

logical, parameter sml_cylindrical =.false.
Use straight cylinder geometry with periodic boundary conditions along the cylinder axis. More...

logical sml_resamp_on = .false.
Switch for particle resampling (must be configured with resamp_param namelist. More...

logical sml_3db_on = .false.
Switch RMP field on/off –> should replace ptb_3db_on at some point Must be configured with ptb_3db_param namelist. More...

Switch for adjusting the electron density in the Poisson equation based on the radial particle flux instead of the weight evolution equation. (Experimental, don't use unless you know what you are doing) More...

width for adjusting factor near axis More...

width for adjusting factor near separatrix More...

maximum bulk radial drift of electron (m/s) – you can overestimate x10. More...

Set zero electron density change near axis. More...

??? More...

Whether to include the SOL when (sml_adjust_eden=.true.) More...

logical sml_verbose = .false.
??? More...

logical sml_ff_boundary_zero_p = .false.

logical sml_increase_ptl_tor = .false.
increase # of particle with different toroidal angle when reading restart file More...

integer sml_increase_ptl_factor_int = 1
the factor to increase when sml_increase_ptl_tor More...

logical sml_em_mixed_variable = .false.
Switch for use of mixed-variable formulation. More...

integer 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 More...

logical sml_em_control_variate = .false.
Switch for use of control variate method. More...

integer sml_em_control_variate_niter = 1
Number of iterations for Ampere solve with control-variate method. More...

logical sml_em_control_variate_final_cv = .false.
Internal setting for control variate method. More...

logical sml_em_control_variate_flag = .false.
Internal setting for control variate method. More...

logical sml_em_exclude_private = .true.
Makes the private flux region electrostatic if .true. More...

logical sml_em_dasdt_filter_on = .false.
Switch for applying Fourier filters on RHS of dAs/dt equation (pullback mode 4) More...

logical sml_em_dasdt_hypvis = .false.
Use radial hyperviscosity in dA_s/dt (push_As) More...

logical sml_em_b_para_eff = .false.
Effective dB_|| via a modified grad-B drift (Joiner et al., PoP, 2010) More...

logical sml_em_n0 = .false.
Include n=0 electromagnetic mode. More...

logical sml_em_es_step = .false.
If this is true, A_s is fixed, A_h=0, the Poisson equation is solved in the ES form (with adiabatic response on the LHS), and the electron weight update uses the ES method, i.e. the ES algorithm is used in a constant perturbed magnetic field. This parameter is not an input but set dynamically through a control function (intended for RMP penetration calculation). More...

logical sml_diff_on = .false.
Anomalous diffusion. More...

logical sml_split_weight_scheme = .false.
Whether to use the split-weight scheme. More...

## Member Data Documentation

Enable/disable Adios stage mode for xgc.3d.

Enable/disable Adios stage mode for xgc.escaped_ptls.

Enable/disable Adios stage mode for xgc.f0.

Maximum numbrer of steps for Adios xgc.f0 stage write.

Enable/disable Adios stage mode for xgc.f3d.

Maximum numbrer of steps for Adios xgc.f3d stage write.

Enable/disable Adios stage mode for xgc.particle.

Enable/disable Adios stage mode for xgc.restart.

Enable/disable Adios stage mode for xgc.restartf0.

 logical sml_module::false
 logical sml_module::for
 logical sml_module::new
 logical sml_module::restart
 logical sml_module::restarting
 logical sml_module::run
 logical sml_module::simulation
 logical sml_module::sml_00_efield =.true.

Flux-surface averaged potential not used for calculating the electric field if .false.

 integer sml_module::sml_00_npsi

Size of the uniform 1D psi-grid (relevant only for -DCONVERT_GRID2=OFF)

 logical sml_module::sml_00_poisson =.true.

Flux-surface averaged Poisson equation not solved if .false.

 logical sml_module::sml_00_xz_up =.false.

Use only $$Z>Z_{xp}$$ for flux-surface average calculation (only for -DCONVERT_GRID2=OFF)

 real (8), parameter sml_module::sml_2pi = 6.2831853071795862D0

2 Pi

 real (8) sml_module::sml_2pi_wedge_n

Toroidal angle spanned by the wedge simulated by the code –> $$\text{sml_2pi_wedge_n}=2\pi/\text{sml_wedge_n}$$.

 logical sml_module::sml_3db_on = .false.

Switch RMP field on/off –> should replace ptb_3db_on at some point Must be configured with ptb_3db_param namelist.

Additional electrostatic potential: (0) for off, (1) for reading data from file (2) for simple neoclassical axisymmetric field (not operational)

Name of the file containing the potential data to replace the consistent solution of the Poisson equation.

With sml_replace_pot0=.true. this option allows mixing the consistent solution with the imposed potential. At t=0 only the imposed field is used, over sml_add_pot0_mixing_time times steps the mixing factor is ramped down linearly to zero (only consistent field is used)

width for adjusting factor near axis

Whether to include the SOL when (sml_adjust_eden=.true.)

???

width for adjusting factor near separatrix

maximum bulk radial drift of electron (m/s) – you can overestimate x10.

Set zero electron density change near axis.

Switch for adjusting the electron density in the Poisson equation based on the radial particle flux instead of the weight evolution equation. (Experimental, don't use unless you know what you are doing)

 real (8) sml_module::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)

 real (8) sml_module::sml_bd_ext_delta1h =0.01

Outward shift of the inner boundary of the non-axisymmetric Poisson solver relative to sml_inpsi (in norm. pol. flux)

 real (8) sml_module::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)

 real (8) sml_module::sml_bd_ext_delta2h =0.02

Outward shift of the inner boundary of the RHS of the non-axisymmetric Poisson solver relative to sml_inpsi (in norm. pol. flux)

 real (8) sml_module::sml_bd_ext_delta3 =0.01

Inward shift of the outer boundary of the axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux)

 real (8) sml_module::sml_bd_ext_delta3h =0.01

Inward shift of the outer boundary of the non-axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux)

 real (8) sml_module::sml_bd_ext_delta4 =0.02

Inward shift of the outer boundary of the RHS of the axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux)

 real (8) sml_module::sml_bd_ext_delta4h =0.02

Inward shift of the outer boundary of the RHS of the non-axisymmetric Poisson solver relative to sml_outpsi (in norm. pol. flux)

 real (8) sml_module::sml_bd_ext_delta_ai = 0D0

Shift of inner boundary of n!=0 Ampere solver (LHS) outwards relative to sml_inpsi.

 real (8) sml_module::sml_bd_ext_delta_ao = 0D0

Shift of outer boundary of n!=0 Ampere solver (LHS) inwards relative to sml_outpsi.

 logical sml_module::sml_bd_ext_delta_in_simple00 = .false.

Use sml_bd_ext_delta in simple00 solve.

 real (8) sml_module::sml_bd_ext_delta_ji = 0D0

Shift of inner boundary of n!=0 Ampere solver (RHS=current density) outwards relative to sml_inpsi.

 real (8) sml_module::sml_bd_ext_delta_jo = 0D0

Shift of outer boundary of n!=0 Ampere solver (RHS) inwards relative to sml_outpsi.

 real (8) sml_module::sml_bd_ext_near_wall =0D0

To move the outer boundary of the Poisson solver away from the inner wall (in m)

 real (8) sml_module::sml_bd_max_r =1D3

Simulation boundary in R-Z space (in m)

 real (8) sml_module::sml_bd_max_z =1D3

Simulation boundary in R-Z space (in m)

 real (8) sml_module::sml_bd_min_r =1D-4

Simulation boundary in R-Z space (in m)

 real (8) sml_module::sml_bd_min_z =-1D3

Simulation boundary in R-Z space (in m)

 real (8) sml_module::sml_bp_mult

Artificial multiplication of poloidal B-field.

 real (8) sml_module::sml_bp_sign =1D0

sml_bp_sign is opposite of sign of poloidal current Ip. sml_bp_sign=-1 for Ip // phi, sml_bp_sign=+1 for Ip // (-phi) The direction of Bp and Ip are following right hand rule. phi is from the (R,phi,Z) cylindrical coordinate system. The direction of phi is counter-clockwise looking on the torus from above.

 real (8) sml_module::sml_bt_mult

Artificial multiplication of toroidal B-field.

 real (8) sml_module::sml_bt_sign =-1D0

1 for Bt // phi, -1 for Bt // (-phi) The direction of phi is described in the comments of sml_bp_sign. The default is bp_sign = 1 and bt_sign = -1 -> both Ip and Bt are -phi direction. (co-current Bt)

 integer sml_module::sml_comm

Global MPI communicator within an XGC instance.

 integer sml_module::sml_comm_color

Communicator color (used for mpi split/code-coupling). Set by my_mpi_init call.

 integer sml_module::sml_comm_null

MPI_COMM_NULL communicator for adios posix method.

 integer sml_module::sml_comm_self

MPI_COMM_SELF communicator for single-process adios2 outputs.

 integer sml_module::sml_comm_world

Global communicator between separate XGC instances (or XGC-GENE, XGC-GEM –> code-coupling) after MPI_COMM_WORLD split.

 logical sml_module::sml_concentric =.false.

(Partially obsolete) Simulation for concentric circular geometry –> would only control behavior of bounce boundary condition in XGC_core/bounce.F90, but that part is commented out at this time

 logical, parameter sml_module::sml_cylindrical =.false.

Use straight cylinder geometry with periodic boundary conditions along the cylinder axis.

 logical sml_module::sml_debug_flag = .false.

Switch for some debugging statements.

 logical sml_module::sml_deltaf = .true.

delta-f switch: .false. for off, .true. for on. Total-f mode uses delta-f particles –> default is .true.

 logical sml_module::sml_deltaf_elec = .true.

delta-f switch: .false. for off, .true. for on. Total-f mode uses delta-f particles –> default is .true.

 integer sml_module::sml_deltaf_f0_mode =-1

For classical delta-f: Use fixed gradient scale lengths (-1), use actual profiles (-2)

 logical sml_module::sml_diff_on = .false.

Anomalous diffusion.

 logical sml_module::sml_dpot_bd_apply = .false.

Damp (n=0,m>0) potential towards the magnetic axis.

 real (8) sml_module::sml_dpot_bd_width = 0.02D0

Decay length (normalized flux) for (n=0,m>0) potential towards the magnetic axis.

 real (8) sml_module::sml_dpot_te_limit = 64D0

Limits the magnitude of the normalized turbulent potential e*dphi/T_e in order to, e.g., prevent an overflow in the Boltzmann term, exp(e*dphi/T_e)

 real (8) sml_module::sml_dpot_te_limit_n0 = 64D0

Limits the magnitude of the normalized axisymmetric potential e*dphi_0/T_e in order to, e.g., prevent an overflow in the Boltzmann term, exp(e*dphi_0/T_e)

 logical sml_module::sml_drift_on =.true.

Whether drifts are active in the equations of motion. Set .false. for tracing field lines or Poincare plots.

 real (8) sml_module::sml_dt = 2D-3

Time step size in units of the toroidal ion transit time $$\tau_T = 2\pi R_{ax} / \sqrt{2 E_{norm}/m_i}$$, where $$E_{norm}$$ is a reference energy set with sml_en_order_keV (in keV) $$\Rightarrow\,E_{norm} = \text{sml_en_order_keV}\, 10^{3} e$$. The default value of sml_en_order is 0.2 keV.

 logical sml_module::sml_dwdt_exb_only = .true.

Switch for classical delta-f weight evolution equation (i.e. not for total-f mode, must compile with DELTAF_CONV=ON): .false. to include all drifts (grad(B), curl(b),and ExB), .true. for ExB only.

 logical sml_module::sml_dwdt_fix_bg = .false.

Switch for classical delta-f weight evolution equation (i.e. not for total-f mode, must compile with DELTAF_CONV=ON): .false. for (1-w) pre-factor, .true. for (1) pre-factor. default is .false.

 real (8), parameter sml_module::sml_e_charge =1.6022D-19

elementary charge in C (MKS)

 character (len=65) sml_module::sml_ele_file ="neo10.1.node"

Unstructured mesh data: ele-file.

 real (8), parameter sml_module::sml_elec_mass =9.1094D-31

electron mass in kg (MKS)

 logical sml_module::sml_electron_on =.false.

Whether to run with adiabatic (.false.) or kinetic (.true.) electrons.

 logical sml_module::sml_em_b_para_eff = .false.

Effective dB_|| via a modified grad-B drift (Joiner et al., PoP, 2010)

 logical sml_module::sml_em_control_variate = .false.

Switch for use of control variate method.

 logical sml_module::sml_em_control_variate_final_cv = .false.

Internal setting for control variate method.

 logical sml_module::sml_em_control_variate_flag = .false.

Internal setting for control variate method.

 integer sml_module::sml_em_control_variate_niter = 1

Number of iterations for Ampere solve with control-variate method.

 logical sml_module::sml_em_dasdt_filter_on = .false.

Switch for applying Fourier filters on RHS of dAs/dt equation (pullback mode 4)

 logical sml_module::sml_em_dasdt_hypvis = .false.

Use radial hyperviscosity in dA_s/dt (push_As)

 logical sml_module::sml_em_es_step = .false.

If this is true, A_s is fixed, A_h=0, the Poisson equation is solved in the ES form (with adiabatic response on the LHS), and the electron weight update uses the ES method, i.e. the ES algorithm is used in a constant perturbed magnetic field. This parameter is not an input but set dynamically through a control function (intended for RMP penetration calculation).

 logical sml_module::sml_em_exclude_private = .true.

Makes the private flux region electrostatic if .true.

 logical sml_module::sml_em_mixed_variable = .false.

Switch for use of mixed-variable formulation.

 logical sml_module::sml_em_n0 = .false.

Include n=0 electromagnetic mode.

 integer sml_module::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

 real (8) sml_module::sml_en_order

(not an input) Characteristic ion energy in normalized unit

 real (8) sml_module::sml_en_order_kev =0.2D0

Characteristic ion energy (keV) –> controls reference time (toroidal ion transit time)

 integer sml_module::sml_epc

(Obsolete) 2nd order Runge-Kutta index, or predictor-corrector index for electrons

 real (8), parameter sml_module::sml_epsilon0 =8.8542D-12

permittivity of free space in F/m (MKS)

 real (8), parameter sml_module::sml_ev2j =sml_e_charge

Conversion factor from eV to J.

 logical sml_module::sml_exclude_private =.false.

If .true. the private-flux region is excluded from several aspects of the simulation (e.g., Poisson solver, collisions,...)

 logical sml_module::sml_exclude_private_turb = .true.

If .true. the private-flux region has no turbulence.

 real (8) sml_module::sml_f0_1_ln =2.22D0

Normalized density gradient scale length $$R_{ax}/L_n$$.

 real (8) sml_module::sml_f0_1_lt =6.92D0

Normalized ion temperature gradient scale length $$R_{ax}/L_{Ti}$$.

 real (8) sml_module::sml_f0_1_lt_e =6.92D0

Normalized electron temperature gradient scale length $$R_{ax}/L_{Te}$$.

 logical sml_module::sml_f0_grid =.true.

Switch for total-f simulation (roughly: include $$\boldsymbol{v}_D\cdot(\partial f_0/\partial \boldsymbol{x})$$ in the weight evolution equation. Enables use of 5D phase space grid for particle noise control (use sml_f0_grid_alpha>0).

 real (8) sml_module::sml_f0_grid_alpha =0D0

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.

 integer sml_module::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.

 real (8) sml_module::sml_f0_grid_init_ptl_imbal =1D0

 integer sml_module::sml_f0_grid_lbal_period =0

Force periodic update of the domain decomposition every sml_f0_grid_lbal_period time steps. When set to zero, the domain decomposition is adjusted only when the load imbalance exceeds its thresholds.

 real (8) sml_module::sml_f0_grid_max_ptl_imbal =2D0

Upper threshold for the particle load imbalance (typically ~1.3).

 real (8) sml_module::sml_f0_grid_min_ptl_imbal =1D0

Lower threshold for the particle load imbalance.

 integer sml_module::sml_f0_nmu_decomp =1

(Not operational!) Parameter to control the decomposition of the velocity space grid in the $$v_\perp$$ direction. 1 means no decomposition.

 integer sml_module::sml_f_source_period =1

Run source routines (collisions, neutral recycling, etc.) every sml_f_source_period time steps.

 logical sml_module::sml_ff_boundary_zero_p = .false.
 integer sml_module::sml_ff_order =4

Order of RK method used for field-following search/mapping (default=4) (set to 0 to let XGC decide)

 integer sml_module::sml_ff_step =2

Number of steps for field-following search/mapping (default=2) (set to 0 to let XGC decide)

 logical sml_module::sml_field_aligned_initial =.false.

Use field aligned initial condition.

 logical sml_module::sml_flat_electron_density =.false.

In case of adiabatic electrons, whether to use a uniform electron background density.

 logical sml_module::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.

 real (8) sml_module::sml_flat_marker_cutoff1 =4D0

Normalized (to $$v_{th}$$) parallel velocity cutoff of flat marker distribution.

 real (8) sml_module::sml_flat_marker_cutoff2 =4D0

Like sml_flat_marker_cutoff1 but for the perpendicular velocity.

 real (8) sml_module::sml_flat_marker_decay_start1 =3.5D0

Normalized (to $$v_{th}$$) velocity at which the marker distribution decays exponentially.

 real (8) sml_module::sml_flat_marker_decay_start2 =3.5D0

Like sml_flat_marker_decay_start1 but for the perpendicular velocity.

 real (8) sml_module::sml_flat_marker_width1 =0.5D0

Decay length of flat marker distribution in the normalized (to $$v_{th}$$) parallel velocity.

 real (8) sml_module::sml_flat_marker_width2 =0.5D0

Like sml_flat_marker_width1 but for the perpendicular velocity.

If .true., gradiant operator is calculated as $$(\hat{\boldsymbol{\psi}}\cdot\nabla,\hat{\boldsymbol{\theta}}^\ast)\cdot\nabla$$ instead of $$(R,Z)$$ coordinates.

If $$|\nabla\psi|$$ is smaller than this threshold, $$\nabla\psi$$ is computed $$(R,Z)$$ coordinates instead of $$(\hat{\boldsymbol{\psi}}\cdot\nabla,\hat{\boldsymbol{\theta}}^\ast)\cdot\nabla$$ even if sml_grad_psitheta is .true.

 integer sml_module::sml_grid_nrho =6

Size of the gyroradius grid (should be such that the resolution is >= 0.5 rho_i)

 integer sml_module::sml_gstep

Global time step (counting the current + all previous runs in case of restarts)

 integer sml_module::sml_guess_table_size =500

Size of the hash table used to narrow down the number of triangles in which to search a particle.

 integer sml_module::sml_increase_ptl_factor_int = 1

the factor to increase when sml_increase_ptl_tor

 logical sml_module::sml_increase_ptl_tor = .false.

increase # of particle with different toroidal angle when reading restart file

 real (8) sml_module::sml_initial_deltaf_noise =1D-3

Delta-f particle weights are initialized with this level of noise.

 logical sml_module::sml_initial_flow =.false.

Set .true. for non-zero initial toroidal rotation flow (must set parameters eq_flowi_XXX and eq_flowe_XXX)

 real (8) sml_module::sml_inpsi =0D0

Inner boundary for initial loading and other routines (e.g. solvers, bounce, ...); normalized poloidal flux (0 on axis, 1 on separatrix)

 character (len=65) sml_module::sml_input_file_dir

Path to the magnetic equilibrium, mesh and profile files (max. 65 characters)

 integer sml_module::sml_intpl_comm

Communicator for all MPI ranks assigned to the same (R,Z) patch (toroidal communication)

 integer sml_module::sml_intpl_group

MPI group for all MPI ranks assigned to the same (R,Z) patch.

 integer sml_module::sml_intpl_mype

MPI rank index within sml_intpl_comm.

 integer sml_module::sml_intpl_totalpe

Total number of MPI ranks within sml_intpl_comm.

 real (8) sml_module::sml_inv_f_source_period

(Not an input) Inverse of sml_f_source_period

 integer sml_module::sml_istep = 0

Current time step number (counting only the current simulation)

 logical sml_module::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.

 integer sml_module::sml_iter_solver_niter =10

Number of iterations for the iterative axisymmetric Poisson solver.

 real (8), parameter sml_module::sml_j2ev =1D0/sml_e_charge

Conversion factor from J to eV.

 integer sml_module::sml_ksp_comm = -1

MPI communicator for a subset of ranks on a plane used for PETSc KSP solves.

 integer sml_module::sml_ksp_group = -1

MPI group for a subset of ranks on a plane used for PETSc KSP solves.

 integer sml_module::sml_ksp_mype = -1

MPI rank index within sml_ksp_comm.

 logical sml_module::sml_limit_marker_den =.false.

Switch for limiting the marker density in the private region to sml_limit_marker_den_fac of the target number of markers/vertex (mainly for RMP!)

 real (kind=8) sml_module::sml_limit_marker_den_fac =5D0

Threshold for removing excess particles in multiples of the target # of ptl/vertex when sml_limit_marker_den=.true.

 real (8), parameter sml_module::sml_load_maxe = 12D0

Maximum particle energy (wrt the thermal speed) in initial particle distribution (if sml_flat_marker=.true.)

Avg. number of ptl/vertex.

 real (8) sml_module::sml_low_mu_fill_population = 0D0

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.)

 integer sml_module::sml_machine = -99

Not used anymore. Left only for input file compatibility. Will be removed near future.

 real (8) sml_module::sml_marker_den

 real (8), dimension(:,:), allocatable sml_module::sml_marker_den2

Triangle based marker density.

 real (8) sml_module::sml_marker_min_temp = 1D1

minimum temperature of markers (only if sml_flat_marker=.false.)

 real (8) sml_module::sml_marker_temp_factor = 1D0

Initial loading with Maxwellian marker distribution with virtual temperature $$T_{marker} = \alpha*T_{plasma}$$ (only if sml_flat_marker=.false.).

 real (8) sml_module::sml_marker_temp_factor2 =1D0

perp temperature factor (only if sml_flat_marker=.false.)

 real (8) sml_module::sml_marker_temp_factor3 =1D0

low mu fill temperature (only if sml_flat_marker=.false.)

 real (8) sml_module::sml_max_imbalance =1.1D0

Threshold of the combined particle-mesh load imbalance that triggers an update of the domain decomposition.

Upper limit for loading factor (default is conservative, might need higher value)

 logical sml_module::sml_mode_select_bands_on = .false.

Determine the number of side bands to include by using gridm_max_surf(i)

 real (kind=8) sml_module::sml_mode_select_bd_width = 0.01D0

width of boundary envelope

 integer sml_module::sml_mode_select_cutoff = 2

Factor for cutoff in Fourier space, determines gridm_max_surf(i) The default is the Nyquist limit sml_mode_select_cutoff=2.

 integer sml_module::sml_mode_select_cutoff_mode = 1

(1) Default: calculate max. pol. mode number using $$\max(\Delta\theta^\ast)$$; (2) use $$\Delta\theta^\ast$$ at $$B=B_{max}$$ on the flux-surface.

 real (kind=8) sml_module::sml_mode_select_damp_width = 2D0

Width (in terms of poloidal mode numbers of the smooth exponential cutoff in the poloidal part of the field-aligned Fourier filter (see sml_mode_select_num_m_damp).

 logical sml_module::sml_mode_select_div_mix = .true.

Whether to blend filtered and unfiltered data near the divertor plates (set .false. for increasing stability in EM simulations)

 real (kind=8) sml_module::sml_mode_select_inpsi = -0.1D0

inner boundary for mode selection

 logical sml_module::sml_mode_select_keep_axisym = .false.

Whether to retain -sml_mode_select_mres_q*1 < m < sml_mode_select_mres_q*q (i.e. the axisymmetric mode) (used if FFT_NTOR_NUM_ZERO=On)

 real (kind=8) sml_module::sml_mode_select_max_kth_rho = 1.0D0

Max. k_theta*rhoi retained in poloidal Fourier filter.

 integer sml_module::sml_mode_select_mmax = 25

Highest pol. mode number for Fourier filter.

 integer sml_module::sml_mode_select_mmin = 0

Lowest pol. mode number for Fourier filter.

 integer sml_module::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.

 integer sml_module::sml_mode_select_mres_q = 3

number of pol. mode numbers around the resonant mode divided by q; –> |m/q - n| <= mres_q or |m -n*q| <= mres_q*q

 integer sml_module::sml_mode_select_n = 1

Toroidal mode number for Fourier filter.

 integer sml_module::sml_mode_select_nmax = 1

Highest numerical tor. mode number for Fourier filter (0,1,...,sml_nphi_total-1)

 integer sml_module::sml_mode_select_nmax_real = 999

Highest real toroidal mode number for FFT filter (n_real = (n_num+(i-1)*sml_nphi_total)*sml_wedge_n), max. i depending on mesh resolution.

 integer sml_module::sml_mode_select_nmin = 1

Lowest numerical tor. mode number for Fourier filter (0,1,...,sml_nphi_total-1)

 integer sml_module::sml_mode_select_nmin_real = 0

Lowest real toroidal mode number for FFT filter (n_real = (n_num+(i-1)*sml_nphi_total)*sml_wedge_n), max. i depending on mesh resolution.

 logical sml_module::sml_mode_select_no_m0 = .true.

filter out m=0 mode while field-following FFT filtering. (fourier_filter_n_m_range_parallel)

 integer sml_module::sml_mode_select_num_m_damp = 0

Pad the rectangular mode filter with |m/q-n|<=N with sml_mode_select_num_m_damp modes left and right and damp those modes exponentially. The damping factor is given by exp(-(x/w)^2) where x=max(0,|m-n*q|-sml_mode_select_mres_q) and w=sml_mode_select_damp_width. The default is sml_mode_select_num_m_damp=0, i.e., a sharp cutoff in the filter.

 real (kind=8) sml_module::sml_mode_select_outpsi = 10.0D0

outer boundary for mode selection

 real (kind=8) sml_module::sml_mode_select_psitol = 5D-5

psi tolerance (in SI-units –> Wb) for the identification of flux-surfaces

 integer sml_module::sml_mode_select_sol_mode = 0

0: Retain sine and cosine modes in SOL but use a window function 1: Retain only sine modes in SOL and don't use a window function (Applies only to filter modes sml_mode_select_mode={5,6}!)

 logical sml_module::sml_mode_select_use_minm = .false.

Restrict poloidal mode number m to m>1 in field aligned filter (sml_mode_select_mode=5)

 integer sml_module::sml_monte_num =10000

Number of samples for Monte-Carlo volume calculation. It should be greater than particle number for correct simulation.

 integer sml_module::sml_mstep = 10

Total number of time steps for simulation.

 real (8), parameter sml_module::sml_mu0 =1.2566370614D-6

Magnetic vacuum permeability in H/m (MKS)

 integer sml_module::sml_mype

Processor index, 0 - (# of MPI ranks -1)

 integer, parameter sml_module::sml_n_vf_diag =9

Number of diagnostic output quantities from the particle push routine.

 integer sml_module::sml_ncycle_half =30

Half the number of electron substeps per ion time step. Should be larger than $$\sqrt{m_i/m_e}/2$$. For electrostatic simulation this should be divisible by 5.

 logical sml_module::sml_neutral =.false.

Switch for neutral recycling module (must be configured with the neu_param namelist)

 logical sml_module::sml_neutral_use_ion_loss =.false.

If .true., the charge loss used in the neutral recycling routine is computed from ion gyrocenters instead of electrons.

 integer, parameter sml_module::sml_nhybrid =2

Number of iterations in electrostatic electron weight evolution scheme This used to be an input variable but is now a parameter (sml_nhybrid=2) because a value of 2 was the only workable value. It implies a two-step Poisson solve (adiabatic electron solve -> electron weight update -> kinetic electron solve)

 integer, parameter sml_module::sml_nlarmor =4

Number of points used in gyroaverage. This is used only for calculating the electron background density in simulations with adiabatic electrons and in the direct evaluation of the (obsolete) flux-surface averaged ion gyrocenter and electron charge density.

 logical sml_module::sml_no_fp_in_f =.false.

If .true. the distribution function used for the source routines will not include particle information (only for testing)

 logical sml_module::sml_no_turb =.false.

Set all non-axisymmetric field perturbations to zero (electromagnetic version only)

 character (len=65) sml_module::sml_node_file ="neo10.1.node"

Unstructured mesh data: node-file.

 logical sml_module::sml_node_vol_monte

Calculate node volume using Monte-Carlo method (true), or analytic method (false)

 integer sml_module::sml_nphi_2pi

In wedge simulations (sml_wegde_n>1): Number of poloidal planes in full torus.

 integer sml_module::sml_nphi_total

Number of poloidal planes (= toroidal grid size)

 integer, parameter sml_module::sml_nrk = 2

Order of Runge-Kutta time integration of particles + fields.

 integer sml_module::sml_nsurf3 =0

Number of flux-surfaces in the private flux region (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON)

 integer sml_module::sml_nsurf3_2 =0

Number of flux-surfaces in the second private flux region (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON)

Total number of OpenMP threads per process.

 real (8) sml_module::sml_outpsi =1.05D0

Outer boundary for initial loading and other routines (e.g. solvers, bounce, ...); normalized poloidal flux (0 on axis, 1 on separatrix)

 real (8) sml_module::sml_outpsi_priv1 =0.97D0

Outer boundary (for Poisson solver), normalized poloidal flux.

 real (8) sml_module::sml_outpsi_priv2 =2.0D0

Outer boundary (for Poisson solver, 2nd private region), normalized poloidal flux.

 integer sml_module::sml_pe_per_ksp = 0

Number of MPI ranks used for PETSc KSP solves.

 integer sml_module::sml_pe_per_plane

Number of MPI ranks per poloidal plane (>=2*sml_grid_nrho)

 real (8), parameter sml_module::sml_pi = 3.1415926535897931D0

Pi.

 integer sml_module::sml_plane_comm

Communicator for all MPI ranks assigned to the same poloidal plane.

 integer sml_module::sml_plane_group

MPI group for all MPI ranks assigned to the same poloidal plane.

 integer sml_module::sml_plane_index

Index of the poloidal plane to which an MPI rank is assigned (0...sml_nphi_total-1)

 logical sml_module::sml_plane_major =.false.

MPI task ordering to use when mapping to 2D virtual processor grid. .true. for consecutive within plane; .false. for consecutive between planes.

 integer sml_module::sml_plane_mype

MPI rank index within sml_plane_comm.

 integer sml_module::sml_plane_per_pe

Number of poloidal planes per MPI rank (typically 1)

 integer sml_module::sml_plane_totalpe

Total number of MPI ranks assigned to a poloidal plane.

 logical sml_module::sml_poisson_0m_full_geo =.false.

Whether to use full toroidal geometry in the axisymmetric Poisson solver (w/o approximation B_R<<B, and B_Z<<B)

 logical sml_module::sml_poisson_bias =.false.

Whether to use a (0,0) bias potential on top of phi_00.

 real (8) sml_module::sml_poisson_bias_amp = 10D0

Ampltude of the bias potential in Volt.

 real (8) sml_module::sml_poisson_bias_freq = 1D4

Frequency in Hz of the bias potential.

 real (8) sml_module::sml_poisson_bias_psic = 0.50D0

Center position of bias potential phi_bia ~ exp(-(psi-psi0)^2), psi_normalized.

 real (8) sml_module::sml_poisson_bias_psiw = 0.02D0

Decay length of the radial envelope of the bias potential.

 integer sml_module::sml_poisson_bias_start = 1

Time step in which the bias potential is started.

 logical sml_module::sml_poisson_cylindrical_jac =.false.

Whether to use the cylindrical Jacobian in the Poisson solver or not.

 integer sml_module::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.

 logical sml_module::sml_poisson_use_bc =.false.

(XGCa only) False: 00-bc is phi=0 everywhere; true: 00-boundary is the wall with bc phi_bd=phi_sheath

 logical sml_module::sml_pol_decomp =.true.

Switch for the use of radial-poloidal domain decomposition.

 real (8), parameter sml_module::sml_prot_mass =1.6720D-27

proton mass in kg (MKS)

 real (8) sml_module::sml_ptl_imbal_ion =3D0

Switch for a simple radiation module using part of the ADAS data base (must be configured with the rad_param namelist)

Read B-field profile from an eqd-file.

 logical sml_module::sml_replace_pot0 =.false.

If .true., replace Poisson solution with external data, if .false., add external potential to Poisson solution.

 logical sml_module::sml_resamp_on = .false.

Switch for particle resampling (must be configured with resamp_param namelist.

 logical sml_module::sml_restart =.false.
 logical sml_module::sml_rgn1_pot0_only =.false.

If .true., the axisymmetric Poisson equation is solved only inside the separatrix.

 real (8) sml_module::sml_rhomax =1D-2

Upper cutoff of the gyroradius grid (should be the gyroradius of the fastest ions of interest)

 integer sml_module::sml_run_count

Run count for continued simulations: 1 for fresh start and 2, 3, 4, ... for restarted simulations.

 integer sml_module::sml_sep2_surf_index =99999

Index of the outer separatrix surface in the flux-surface data (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON)

 integer sml_module::sml_sep_surf_index =99999

Index of the inner separatrix surface in the flux-surface data (from sml_surf_file if compiled with -DNEW_FLX_AIF=ON)

Constant (.false.) or dynamic (.true.) sheath potential (for sml_sheath_mode=1)

Damping factor for slower adjustment of the sheath potential if sml_sheath_mode=1.

 logical sml_module::sml_sheath_init_pot_auto =.false.

Set initial sheath potential to eq. based on Ti,Te, Maxwellian assumption.

 real (8) sml_module::sml_sheath_init_pot_factor =2D0

Initial value of the sheath potential relative to the electron temperature. (for sml_sheath_mode=1)

 integer sml_module::sml_sheath_mode =0

Mode of operation of the logical sheath boundary condition (0) off (1) The value of the logical sheath potential is adjusted locally reactively based on the number of ions and electrons that hit the wall in the previous time step. Can use sml_sheath_adjust_factor<1 to reduce noise. (2) Actual logical sheath mode: the number of ions and electrons hitting the wall is recorded, then the sheath potential required to balance ion and electron losses is determined, and only then is decided which electrons actually hit the wall and which were reflected by the sheath potential. The algorithm also tries to achieve a global balance if local balance cannot be achieved. (might need some debugging)

 logical sml_module::sml_source =.false.

Switch for heat and torque sources (sources must be configured separately with the parameters in the src_param namelist.

 integer sml_module::sml_special =0

Switch for special simulation: (0) normal, (1) single particle simulation, (4) Poincare plot.

 logical sml_module::sml_split_weight_scheme = .false.

Whether to use the split-weight scheme.

 real (8), parameter sml_module::sml_sqrt2pi = 2.5066282746310002D0

Sqrt(2Pi)

 real (8), parameter sml_module::sml_sqrtpi = 1.7724538509055158D0

Sqrt(Pi)

 character (len=65) sml_module::sml_surf_file ="dummy"

Unstructured mesh data: flx-file.

 logical sml_module::sml_symmetric_f =.true.

Enforce axisymmetry of the total distribution function on the grid.

 logical sml_module::sml_symmetric_f0g =.false.

Enforce axisymmetry only in f0g (used only in XGC1 fluid-kinetic hybrid method; -DHYB_EM=ON)

 real (8) sml_module::sml_time

Simulation time in seconds.

 real (8) sml_module::sml_time0

Initial time for PETSc TS solver in seconds.

 integer sml_module::sml_totalpe

Total number of processors (must be > (2*sml_grid_nrho)*sml_nphi_total)

 real (8) sml_module::sml_tran

Torodial transit time of an ion with the characteristic energy.

 logical sml_module::sml_tri_psi_weighting =.true.

Use modified triangle shape functions (Useful for coarse meshes in XGCa when straight element edges do not represent the curved flux-surfaces well.

 logical sml_module::sml_turb_efield =.true.

E-field calculated only with $$<\phi>$$ if .false. psndpot will still contain all (n=0,|m|>0) and (|n|>0,m) modes.

 logical sml_module::sml_turb_poisson =.true.

Non-axisymmetric Poisson equation not solved if .false.

 logical sml_module::sml_turb_poisson_n0_only =.false.

Keep only the axisymmetric potential (n=0,|m|>0) in psndpot.

 logical sml_module::sml_update_ampere_solver =.false.

If .true. density and temperature in the Ampere's law solver operators will be updated every sml_update_ampere_solver_nstep time steps.

 integer sml_module::sml_update_ampere_solver_nstep =1

Number of time steps between subsequent updates of the Ampere's law solver operators.

 logical sml_module::sml_update_poisson_solver =.false.

If .true. density and temperature in the Poisson solver operators will be updated every sml_update_poisson_solver_nstep time steps.

 integer sml_module::sml_update_poisson_solver_nstep =1

Number of time steps between subsequent updates of the Poisson solver operators.

 logical sml_module::sml_update_poisson_turb =.false.

Update the n != 0 Poisson solver, too (energy conservation?)

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.

Use Pade approximation for short wavelengths.

 logical sml_module::sml_use_simple00 =.false.

Use simple 1D solver for the flux-surface averaged potential instead of PETSc.

 integer sml_module::sml_veclen =32

(Obsolete) Vectorization length, used in defunct AVX512 vectorized electron push kernel

 logical sml_module::sml_verbose = .false.

???

 integer sml_module::sml_wedge_n =1

Simulate a wedge of 2pi/sml_wedge_n of the full torus.

 logical sml_module::sml_zero_inner_bd =.false.

If .true., use Dirichlet boundary condition $$\phi=0$$ for axisymmetric Poisson solver.

 logical sml_module::switch
 logical sml_module::true

The documentation for this module was generated from the following file:
• /u/gitlab-xgc/builds/YGMz2TJ8/0/xgc/XGC-Devel/XGC_core/module.F90