XGC1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
Simulation< Device > Class Template Reference

#include <sml.hpp>

Public Member Functions

 Simulation (NLReader::NamelistReader &nlr, double transit_time_in=1.0, double psi_norm=1.0)
 

Public Attributes

int bounce
 Bounce routine switch 0 for off, 1 for inner boundary, 2 for both boundaries. More...
 
int bounce_zero_weight
 If ==1 and bounce>0, set particle weights to zero after bouncing from the outer boundary. More...
 
double bounce_buffer
 Buffer width between sml_outpsi and where the particle actually bounces (must be >=0) More...
 
double dt
 Time step (s) More...
 
double transit_time
 Torodial transit time of an ion with the characteristic energy. More...
 
int sheath_mode
 Type of sheath (0 is none) More...
 
bool sheath_adjust
 Whether to adjust the sheath. More...
 
bool ptb_3db_on
 Toggle for ptb_3db. More...
 
bool drift_on
 Toggle for using drift. More...
 
bool neutrals
 Toggle for using neutrals. More...
 
bool diag_heat_on
 Use heat diagnostics in sheath. More...
 
bool deltaf
 Whether some species is deltaf. More...
 
bool xz_00_up
 Use upper region of xz when obtaining 00 mode. More...
 
int mstep
 Max number of time steps. More...
 
int nrk
 Order of Runge-Kutta time integration of particles + fields. More...
 
bool electron_on
 Use kinetic electrons. More...
 
bool f0_grid
 Whether to use f0 grid. More...
 
bool limit_marker_den
 Whether to limit marker density. More...
 
int special
 Special run (eg single particle, poincare) More...
 
int nthreads
 Number of OMP threads on the host. More...
 
bool field_solver_on =true
 If false, charge deposition and field solve is skipped. More...
 
bool split_weight_scheme
 Whether to use the split-weight scheme. More...
 
bool dwdt_fix_bg
 
bool dwdt_exb_only
 
bool em_mixed_variable
 Switch for use of mixed-variable formulation. More...
 
bool em_control_variate
 Switch for use of control variate method. More...
 
int em_pullback_mode
 
bool em_control_variate_final_cv
 
bool em_control_variate_flag
 
int em_control_variate_niter
 Number of iterations for Ampere solve with control-variate method. More...
 
bool em_b_para_eff
 Effective dB_|| via a modified grad-B drift (Joiner et al., PoP, 2010) More...
 
bool em_es_step
 
bool em_dAsdt_filter_on
 Switch for applying Fourier filters on RHS of dAs/dt equation (pullback mode 4) More...
 
bool no_turb
 Set all non-axisymmetric field perturbations to zero (electromagnetic version only) More...
 
bool em_dAsdt_hypvis
 Use radial hyperviscosity in dA_s/dt (push_As) More...
 
bool exclude_private
 Whether to exclude private region in ion charge deposition. More...
 
bool grad_psitheta
 
bool update_poisson_solver
 Whether poisson solver is updated. More...
 
double dpot_te_limit
 Max absolute value of dpot/temp in getf0. More...
 
bool no_fp_in_f
 
double f0_grid_alpha
 
bool f0_update_analytic
 
bool f0_update_analytic_local
 If .false. –> flux-surface average update, .true. –> local. More...
 
double f0_update_analytic_alpha
 Separate alpha from sml_f0_grid_alpha for Maxwellian contribution. More...
 
double f0_update_analytic_damp_width
 
int f0_grid_alpha_start
 
bool ignore_f0g
 
bool symmetric_f
 Enforce axisymmetry of the total distribution function on the grid. More...
 
bool diff_on
 
bool resamp_on
 Do resampling. More...
 
bool resamp_for_final_restart_write
 Perform resampling before dumping the final restart file. More...
 
bool resamp_restart_read
 Whether to read a restart file written from a simulation with different grid. More...
 
bool field_aligned_initial
 
bool flat_marker
 
double marker_temp_factor
 
double marker_temp_factor2
 
double marker_temp_factor3
 
double flat_marker_decay_start1
 
double flat_marker_decay_start2
 
double flat_marker_cutoff1
 
double flat_marker_cutoff2
 
double flat_marker_width1
 
double flat_marker_width2
 
double initial_deltaf_noise
 
double marker_min_temp
 
double low_mu_fill_population
 
double time
 Current simulation time. More...
 
int gstep
 Current time step. More...
 
bool multirate_timestepping
 Use multirate timestepping. More...
 
int mr_factor
 
double mr_psi_max
 maximum normalized psi value of each multirate region More...
 
int mstep_rmp_es
 
int mstep_rmp_em
 
int rmp_es_to_em_dt_ratio
 Ratio of EM to ES time step size in RMP penetration calculation. More...
 
bool cce_coupling_on
 Core-edge coupling flag. More...
 
bool use_unfused_electron_push_kernel
 
bool loop_voltage_on
 Inductive current drive: loop voltage (from Faraday's law curl(E)=-dB/dt) More...
 
double loop_voltage
 
double loop_voltage_psimax
 Inductive current drive: outer boundary (in pol. flux) of the loop voltage. More...
 
bool current_drive_on
 
double current_drive_p
 Current drive PID controller: factor for proportional controller ( \(P\)) More...
 
double current_drive_i
 Current drive PID controller: factor for integral controller ( \(I\)) More...
 
double current_drive_d
 Current drive PID controller: factor for derivative controller ( \(D\)) More...
 

Static Public Attributes

static constexpr bool is_XGCa = false
 Equivalent to the preprocessor flag for now. More...
 
static constexpr bool reduced_deltaf = false
 Equivalent to the preprocessor flag for now. More...
 
static constexpr bool separate_n0 = true
 Equivalent to the preprocessor flag for now. More...
 
static constexpr bool explicit_electromagnetic = false
 Equivalent to the preprocessor flag for now. More...
 
static constexpr bool old_f0_update_analytic = false
 Equivalent to the preprocessor flag for now. More...
 
static constexpr int nhybrid = 2
 Number of iterations in electrostatic electron weight evolution scheme. More...
 

Constructor & Destructor Documentation

template<class Device >
Simulation< Device >::Simulation ( NLReader::NamelistReader nlr,
double  transit_time_in = 1.0,
double  psi_norm = 1.0 
)

Constructor for simulation

Here is the call graph for this function:

Member Data Documentation

template<class Device>
int Simulation< Device >::bounce

Bounce routine switch 0 for off, 1 for inner boundary, 2 for both boundaries.

template<class Device>
double Simulation< Device >::bounce_buffer

Buffer width between sml_outpsi and where the particle actually bounces (must be >=0)

template<class Device>
int Simulation< Device >::bounce_zero_weight

If ==1 and bounce>0, set particle weights to zero after bouncing from the outer boundary.

template<class Device>
bool Simulation< Device >::cce_coupling_on

Core-edge coupling flag.

template<class Device>
double Simulation< Device >::current_drive_d

Current drive PID controller: factor for derivative controller ( \(D\))

template<class Device>
double Simulation< Device >::current_drive_i

Current drive PID controller: factor for integral controller ( \(I\))

template<class Device>
bool Simulation< Device >::current_drive_on

Whether to use dynamic current drive via adjustments of the loop voltage ! The controller output is implemented as ! \(V_{loop} = 2\pi R \eta_\parallel P \left[\Delta j_\parallel + I \int_0^t \Delta j_\parallel \mathrm{d}\tau + D \frac{\partial \Delta j_\parallel}{\partial t} \right] \) ! Time integral and derivative are with respect to the ion time step instead of time, so \(1/I\) is the integration time scale, ! and \(D\) is the derivative time scale

template<class Device>
double Simulation< Device >::current_drive_p

Current drive PID controller: factor for proportional controller ( \(P\))

template<class Device>
bool Simulation< Device >::deltaf

Whether some species is deltaf.

template<class Device>
bool Simulation< Device >::diag_heat_on

Use heat diagnostics in sheath.

template<class Device>
bool Simulation< Device >::diff_on
template<class Device>
double Simulation< Device >::dpot_te_limit

Max absolute value of dpot/temp in getf0.

template<class Device>
bool Simulation< Device >::drift_on

Toggle for using drift.

template<class Device>
double Simulation< Device >::dt

Time step (s)

template<class Device>
bool Simulation< Device >::dwdt_exb_only
template<class Device>
bool Simulation< Device >::dwdt_fix_bg
template<class Device>
bool Simulation< Device >::electron_on

Use kinetic electrons.

template<class Device>
bool Simulation< Device >::em_b_para_eff

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

template<class Device>
bool Simulation< Device >::em_control_variate

Switch for use of control variate method.

template<class Device>
bool Simulation< Device >::em_control_variate_final_cv
template<class Device>
bool Simulation< Device >::em_control_variate_flag
template<class Device>
int Simulation< Device >::em_control_variate_niter

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

template<class Device>
bool Simulation< Device >::em_dAsdt_filter_on

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

template<class Device>
bool Simulation< Device >::em_dAsdt_hypvis

Use radial hyperviscosity in dA_s/dt (push_As)

template<class Device>
bool Simulation< Device >::em_es_step

If true, the ES algorithm will be used within the EM code (details in XGC_core/module.F90)

template<class Device>
bool Simulation< Device >::em_mixed_variable

Switch for use of mixed-variable formulation.

template<class Device>
int Simulation< Device >::em_pullback_mode

(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

template<class Device>
bool Simulation< Device >::exclude_private

Whether to exclude private region in ion charge deposition.

template<class Device>
constexpr bool Simulation< Device >::explicit_electromagnetic = false
static

Equivalent to the preprocessor flag for now.

template<class Device>
bool Simulation< Device >::f0_grid

Whether to use f0 grid.

template<class Device>
double Simulation< Device >::f0_grid_alpha

Fraction of the particle weight that is transferred to the background distribution function (particle noise control) every sml_f_source_period time steps. As a rule of thumb, sml_f0_grid_alpha=sml_dt*sml_f_source_period can be used.

template<class Device>
int Simulation< Device >::f0_grid_alpha_start

For delayed onset of total-f particle noise control. (must be >=1) Values >1 cause a linear ramp-up of sml_f0_grid_alpha from 0 to its input value from time step 1 to sml_f0_grid_alpha_start.

template<class Device>
bool Simulation< Device >::f0_update_analytic

Switch on/off the update of the analytic part of the distribution function

template<class Device>
double Simulation< Device >::f0_update_analytic_alpha

Separate alpha from sml_f0_grid_alpha for Maxwellian contribution.

template<class Device>
double Simulation< Device >::f0_update_analytic_damp_width

For width of \(\exp^{-(x/w)^2}\) damping factor for updating density/temperature of the analytical f0

template<class Device>
bool Simulation< Device >::f0_update_analytic_local

If .false. –> flux-surface average update, .true. –> local.

template<class Device>
bool Simulation< Device >::field_aligned_initial
template<class Device>
bool Simulation< Device >::field_solver_on =true

If false, charge deposition and field solve is skipped.

template<class Device>
bool Simulation< Device >::flat_marker
template<class Device>
double Simulation< Device >::flat_marker_cutoff1
template<class Device>
double Simulation< Device >::flat_marker_cutoff2
template<class Device>
double Simulation< Device >::flat_marker_decay_start1
template<class Device>
double Simulation< Device >::flat_marker_decay_start2
template<class Device>
double Simulation< Device >::flat_marker_width1
template<class Device>
double Simulation< Device >::flat_marker_width2
template<class Device>
bool Simulation< Device >::grad_psitheta

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

template<class Device>
int Simulation< Device >::gstep

Current time step.

template<class Device>
bool Simulation< Device >::ignore_f0g

Ignore f0g in f0 calculation. When true, it skips the update of den_f0_h, instead using the initialized value (which is zero). This is helpful to density conservation of heating when f0g is noisy due to insufficient number of particles.

template<class Device>
double Simulation< Device >::initial_deltaf_noise
template<class Device>
constexpr bool Simulation< Device >::is_XGCa = false
static

Equivalent to the preprocessor flag for now.

template<class Device>
bool Simulation< Device >::limit_marker_den

Whether to limit marker density.

template<class Device>
double Simulation< Device >::loop_voltage

Initial value for the loop-voltage ! Positive loop voltage corresponds to an electron torque opposite to the toroidal ! direction (clockwise looking down on the torus, i.e. in negative Z-direction).

template<class Device>
bool Simulation< Device >::loop_voltage_on

Inductive current drive: loop voltage (from Faraday's law curl(E)=-dB/dt)

template<class Device>
double Simulation< Device >::loop_voltage_psimax

Inductive current drive: outer boundary (in pol. flux) of the loop voltage.

template<class Device>
double Simulation< Device >::low_mu_fill_population
template<class Device>
double Simulation< Device >::marker_min_temp
template<class Device>
double Simulation< Device >::marker_temp_factor
template<class Device>
double Simulation< Device >::marker_temp_factor2
template<class Device>
double Simulation< Device >::marker_temp_factor3
template<class Device>
int Simulation< Device >::mr_factor
                    multirate timestepping for core region ions; mr_ratio (> 1) is the

factor used to accelerate the core region physics.

template<class Device>
double Simulation< Device >::mr_psi_max

maximum normalized psi value of each multirate region

template<class Device>
int Simulation< Device >::mstep

Max number of time steps.

template<class Device>
int Simulation< Device >::mstep_rmp_em

Number of electromagnetic time steps for RMP penetration calculation with damped Newton iteration

template<class Device>
int Simulation< Device >::mstep_rmp_es

Number of electrostatic time steps for RMP penetration calculation with damped Newton iteration

template<class Device>
bool Simulation< Device >::multirate_timestepping

Use multirate timestepping.

template<class Device>
bool Simulation< Device >::neutrals

Toggle for using neutrals.

template<class Device>
constexpr int Simulation< Device >::nhybrid = 2
static

Number of iterations in electrostatic electron weight evolution scheme.

template<class Device>
bool Simulation< Device >::no_fp_in_f

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

template<class Device>
bool Simulation< Device >::no_turb

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

template<class Device>
int Simulation< Device >::nrk

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

template<class Device>
int Simulation< Device >::nthreads

Number of OMP threads on the host.

template<class Device>
constexpr bool Simulation< Device >::old_f0_update_analytic = false
static

Equivalent to the preprocessor flag for now.

template<class Device>
bool Simulation< Device >::ptb_3db_on

Toggle for ptb_3db.

template<class Device>
constexpr bool Simulation< Device >::reduced_deltaf = false
static

Equivalent to the preprocessor flag for now.

template<class Device>
bool Simulation< Device >::resamp_for_final_restart_write

Perform resampling before dumping the final restart file.

template<class Device>
bool Simulation< Device >::resamp_on

Do resampling.

template<class Device>
bool Simulation< Device >::resamp_restart_read

Whether to read a restart file written from a simulation with different grid.

template<class Device>
int Simulation< Device >::rmp_es_to_em_dt_ratio

Ratio of EM to ES time step size in RMP penetration calculation.

template<class Device>
constexpr bool Simulation< Device >::separate_n0 = true
static

Equivalent to the preprocessor flag for now.

template<class Device>
bool Simulation< Device >::sheath_adjust

Whether to adjust the sheath.

template<class Device>
int Simulation< Device >::sheath_mode

Type of sheath (0 is none)

template<class Device>
int Simulation< Device >::special

Special run (eg single particle, poincare)

template<class Device>
bool Simulation< Device >::split_weight_scheme

Whether to use the split-weight scheme.

template<class Device>
bool Simulation< Device >::symmetric_f

Enforce axisymmetry of the total distribution function on the grid.

template<class Device>
double Simulation< Device >::time

Current simulation time.

template<class Device>
double Simulation< Device >::transit_time

Torodial transit time of an ion with the characteristic energy.

template<class Device>
bool Simulation< Device >::update_poisson_solver

Whether poisson solver is updated.

template<class Device>
bool Simulation< Device >::use_unfused_electron_push_kernel
template<class Device>
bool Simulation< Device >::xz_00_up

Use upper region of xz when obtaining 00 mode.


The documentation for this class was generated from the following files: