5. Description of the parameters in PION parameter files¶
PION is controlled mainly by a parameter file that sets what kind of initial conditions to set up, what equations to use, the properties of the computational grid, source terms such as stellar wind, and numerical parameters specifying the integration scheme.
The parameter file is ASCII text and each line should contain a key and its value, separated by whitespace.
String values should be input as normal text, floating-point numbers in format 1.2345
or 1.2345e-67
(PION defaults to run in double precision).
Unless otherwise stated, physical quantities should be input in CGS units, magnetic field in Gauss.
Comment lines that begin with #
are ignored.
Some parameters are required and some are optional; for optional parameters PION will fall back to default values for any parameters that are not given.
The parameters are described in more detail below.
5.1. Initial Conditions Generator¶
There are a number of different problems that can be set up with PION, with source files located in source/ics/
.
The parameter ics
determines which problem is set up, with the following options:
Problem (key value) | Location of source file | Brief description |
---|---|---|
1Dto2D |
read_1Dto2D.cpp |
Read 1D snapshot and map to 2D or 3D grid |
Advection |
basic_tests.cpp |
Sets up advection of an overdense clump |
BlastWave |
blast_wave.cpp |
Set up supernova blastwave problems |
DivBPeak |
basic_tests.cpp |
Sets up a uniform medium with a peak in \(\nabla\cdot\mathbf{B}\) |
DoubleMachRef |
basic_tests.cpp |
The Double Mach-Reflection test |
FieldLoop |
basic_tests.cpp |
Advection of a magnetic field loop |
Jet |
jet.cpp |
Sets up 2D axisymmetric jet or 3D jet |
KelvinHelmholtz |
basic_tests.cpp |
Set up Kelvin-Helmholtz instability test |
LaserAblationAxi |
laser_ablation.cpp |
Set up a HEDP laser ablation test calc |
LiskaWendroffImplosion |
basic_tests.cpp |
The Liska and Wendroff implosion test |
OrszagTang |
basic_tests.cpp |
The 2D Orszag-Tang Vortex test |
PE_MC_FN or PE_MC_FM |
photoevaporating_multiclumps.cpp |
Set up photoevaporation of dense clouds |
PhotoEvaporatingClump |
photoevaporating_clump.cpp |
Sets up photoevaporation of dense cloud |
PhotEvap_RandomClumps |
photoevaporating_random_clumps.cpp |
Set up photoevaporation of randomly placed dense clouds |
RadiativeShock |
radiative_shock.cpp |
Sets up 1D or 2D radiative shock test |
ShockCloud |
shock_cloud.cpp |
Set up shock-cloud interaction problems |
Uniform |
basic_tests.cpp |
Sets up a uniform medium |
Each of these types of initial-condition generator has some distinct parameters that should be set in the parameter file (discussed in more detail below).
5.2. General Parameters¶
5.2.1. Integration Scheme¶
Some required parameters set the coordinate system, equations to be solved, accuracy of the solution, etc.
Parameter | Type | Units | Description |
---|---|---|---|
ndim |
integer | none | Number of spatial dimensions to simulate |
coordinates |
string | none | Geometry. 1D: spherical, 2D: cylindrical/cartesian, 3D: cartesian |
eqn |
string | none | System of equations to solve: euler, mhd, glm-mhd |
GAMMA |
double | none | adiabatic index of the gas (usually 5/3=1.66666666666667) |
solver |
integer | none | Which flux solver to use (see above for options) |
OrderOfAccSpace |
integer | none | spatial order of accuracy: 1 = piecewise constant; 2 = piecewise linear |
OrderOfAccTime |
integer | none | temporal order of accurasy: 1 = 1st order piecewise constant; 2 = 2nd order, piecewise linear |
CFL |
double | none | Courant-Friedrichs-Lewy number (<1 1D, <0.5 2D, <0.33 3D) |
ArtificialViscosity |
integer | none | 0=no AV, 1=Falle+(1998) AV, 3=Sanders+(1998) H-correction H-correction only works with some solvers. |
EtaViscosity |
double | none | Viscosity parameter for Falle+(1998) AV, in range [0,1], default value is 0.15. |
There are three different types of equations that can be set up:
- Euler equations: the inviscid equations of hydrodynamics.
- Ideal MHD equations: magnetohydrodynamics, only usable in 1D because there is no scheme for dealing with DivB errors.
- GLM-MHD equations: magnetohydrodynamics plus the Dedner et al. (2002) divergence cleaning mechanism for mitigating DivB errors.
There are a number of different flux solvers that can be used, with different levels of robustness and accuracy:
Available solvers:
- Euler: 0 = Lax-Friedrichs, 1 = linear, 2 = exact (slow), 3 = linear+exact hybrid, 4 = Roe conserved variables, 6 = Flux-vector splitting, 8 = HLL, 9 = Roe+HLL hybrid)
- MHD: 0 = Lax-Friedrichs, 1 = linear, 4 = Roe conserved variables, 7 = HLLD+HLL hybrid, 8 = HLL
Notes:
- Recommended solver for the Euler equations is 9, and for the MHD equations is 7.
- GAMMA should be in the range (1,2)
- Spatial and temporal order of accuracy may both be set to 1 or 2, but they should be the same as each other. 2nd-order scheme is better.
- The CFL parameter for an unsplit scheme should be <1/ndim
- Cartesian coordinate system is available in 1D,2D,3D.
- Cylindrical coordinates are only available in 2D \((z,R)\) with rotational symmetry in \(\theta\) direction. The radial coordinate (
y
axis) should begin at \(R=0\) and use an axisymmetric boundary condition. - Spherical coordinate system is only available in 1D, radial coordinate, with reflection symmetry at \(r=0\).
5.2.2. Computational Grid¶
The PION computational grid is a uniform rectilinear grid in 1, 2 or 3 spatial dimensions.
Static mesh-refinement (nested grids) is implemented for the case where each refinement level has the same shape and number of cells as the coarser level above it, but the spatial resolution is a factor of 2 higher and so the grid covers 1/2 of the domain of the coarser grid in each dimension.
The focus of the nested grid can be at the centre of the domain, the negative boundary or the positive boundary for each dimension.
The number of refinement levels is in principle unlimited, but snapshots can only be written every coarse timestep and this imposes a practical limit: for 10 grid levels there are 512 finest-level timesteps per coarsest-level step, and one may wish to save a snapshot at least this often.
The coarsest level is denoted level 0
, and each refined level has a higher level number.
The parameters are:
Parameter | Type | Units | Description |
---|---|---|---|
NGridX |
integer | none | Number of grid points in \(\hat{x}\)-direction |
NGridY |
integer | none | Number of grid points in \(\hat{y}\)-direction |
NGridZ |
integer | none | Number of grid points in \(\hat{z}\)-direction |
Xmin |
double | cm | negative boundary in \(\hat{x}\)-direction (level 0) |
Ymin |
double | cm | negative boundary in \(\hat{y}\)-direction (level 0) |
Zmin |
double | cm | negative boundary in \(\hat{z}\)-direction (level 0) |
Xmax |
double | cm | positive boundary in \(\hat{x}\)-direction (level 0) |
Ymax |
double | cm | positive boundary in \(\hat{y}\)-direction (level 0) |
Zmax |
double | cm | positive boundary in \(\hat{z}\)-direction (level 0) |
grid_nlevels |
integer | none | Number of grid levels for static mesh-refinement (>=1) |
grid_aspect_ratio_XX |
integer | none | Aspect ratio of grid in each dimension |
grid_aspect_ratio_YY |
integer | none | Aspect ratio of grid in each dimension |
grid_aspect_ratio_ZZ |
integer | none | Aspect ratio of grid in each dimension |
NG_centre_XX |
double | cm | focus of nested grid refinement in X |
NG_centre_YY |
double | cm | focus of nested grid refinement in Y |
NG_centre_ZZ |
double | cm | focus of nested grid refinement in Z |
NG_refine_XX |
integer | none | refine in x-direction? (1==yes) |
NG_refine_YY |
integer | none | refine in y-direction? (1==yes) |
NG_refine_ZZ |
integer | none | refine in z-direction? (1==yes) |
5.2.3. Boundary Conditions¶
parameter name | type | description |
---|---|---|
BC_XN |
string | boundary condition for negative x-direction |
BC_XP |
string | boundary condition for positive x-direction |
BC_YN |
string | boundary condition for negative y-direction |
BC_YP |
string | boundary condition for positive y-direction |
BC_ZN |
string | boundary condition for negative z-direction |
BC_ZP |
string | boundary condition for positive z-direction |
BC_Ninternal |
integer | Number of internal boundary regions (stellar wind) |
BC_INTERNAL_000 |
string | type of 1st internal boundary region (if BC_Ninternal >0) |
The possible values for the boundary conditions are listed in Boundary Conditions.
5.2.4. Units¶
PION uses CGS units by default. There are parameters to set up a system of units, but currently they do not do anything. Internally PION solves the MHD equations in units such that factors of \(4\pi\) do not appear, but these are rescaled by \(\sqrt{4\pi}\) on reading from and writing to snapshots, and so the snapshots have magnetic field units of Gauss.
parameter name | type | value |
---|---|---|
units | string | cgs |
rhoval | double | 1.0 |
lenval | double | 1.0 |
velval | double | 1.0 |
magval | double | 1.0 |
5.3. Source terms¶
5.3.1. Radiation sources¶
The parameter RT_Nsources
is an integer setting the number of radiation sources.
Each source i
, numbered from 0, has parameters of the form RT_[name]_[i]
that describe the radiation field emitted.
parameter key | value type | description |
---|---|---|
RT_position_[i]_[n] |
double | position of source along axis n (cm). Value >1e100 (or <-1e100)
implies a source at infinity. |
RT_src_type_[i] |
integer | 1=point source (tested), 2=diffuse radiation (untested) |
RT_at_infty_[i] |
integer | 1: source is at infinity, 0: point source obeying inverse square law |
RT_update___[i] |
integer | 1: use C2-ray update (Mellema+2006); 2: use Mackey(2012) update; 2 is recommended - 1 may be broken. |
RT_effect___[i] |
integer | 1: UV heating, 2: monochromatic photoionizing field, 3: multifrequency photoionization (switch to 5 in next release UPDATE CODES!). |
RT_Tau_src__[i] |
integer | set to 10 so that the opacity in a cell is calculated by the microphysics module. Other options are being deprecated. |
RT_Tau_var__[i] |
integer | unused if RT_Tau_src is set to 10. Other options deprecated. |
RT_Nbins____[i] |
integer | Number of energy bins for radiation field (set to 1 unless using MPv10) |
RT_EVO_FILE_[i] |
string | “NONE”: constant wind, or name of text file containing time evolution information. |
RT_strength_[i] |
double | luminosity in erg/s for multi-frequency source, or in photons/s for monochromatic source. For a source at infinity this is the incident flux (erg/cm2/s or photons/cm2/s). Not used for evolving source. |
RT_Rstar____[i] |
double | Stellar radius in R_sun . Not used for evolving source. |
RT_Tstar____[i] |
double | Stellar effective temperature in K. Not used for evolving source. |
5.3.2. Stellar Winds¶
The parameter WIND_NSRC
is an integer setting the number of stellar-wind sources.
These are implemented as a spherical boundary region in which the fluid quantities are set according to the wind parameters for each source.
Stellar winds in PION are implemented in 3 modules: a constant wind, an evolving wind, and a latitude-dependent wind.
The parameter file for a constant wind has a number of parameters that should be set, quoted below with the expected units. They are stored in these units in the SWP
struct of type stellarwind_params
.
Parameter | Description | Units/values |
---|---|---|
WIND_[i]_pos[n] |
Star position \(n\in[0,1,2]\) | cm |
WIND_[i]_velocity[n] |
Star velocity \(n\in[0,1,2]\) | cm/s (if moving) default is 0 |
WIND_[i]_radius |
Radius of wind injection region | cm |
WIND_[i]_type |
[Constant, evolving, latitude dependent] | [0,1,2] |
WIND_[i]_mdot |
Mass-loss rate from star (dot{M}) | \(\mathrm{M_{\odot}\,yr}^{-1}\) |
WIND_[i]_vinf |
Terminal velocity of wind | \(\mathrm{km\,s}^{-1}\) |
WIND_[i]_vrot |
Equatorial rotation velocity | \(\mathrm{km\,s}^{-1}\) |
WIND_[i]_temp |
Effective Temperature of star, \(T_\mathrm{eff}\) | K |
WIND_[i]_Rstr |
Radius of star | cm |
WIND_[i]_Bstr |
Strength of surface magnetic field | Gauss |
WIND_[i]_TR[n] |
Value of tracer \(n\) in wind | Usually \(\in [0,1]\) |
WIND_[i]_evofile |
Text file with data for evolving wind | Default is NOFILE |
WIND_[i]_t_offset |
offset of sim time from evolution time | Default is 0.0 |
WIND_[i]_t_scalefac |
scaling simulation time to evolution time | Default is 1.0 |
WIND_[i]_updatefreq |
How often to update the wind | seconds |
WIND_[i]_enhance_mdot |
ad-hoc flag to increase \(\dot{M}\) | Default is 0 |
WIND_[i]_moving |
is star moving? yes==1, no==0 | Default is 0 |
WIND_[i]_acceleration |
is wind accelerated? yes==1, no==0 | Default is 0 (inject at v_inf) |
For constant winds, these data are stored in the global struct SWP
, defined in
pion/source/constants.h
, using these units. In simulation snapshots they also have the
same units.
The evolving wind file should have all units in CGS.
5.3.3. Jet inflow¶
There is an untested module for injecting protostellar jets along the symmetry axis in 2D cylindrical simulations, or along the positive x-axis in 3D Cartesian simulations.
The parameter N_JET
takes an integer argument for the number of jet sources.
The module worked in 2010 when it was used for testing v.1.0 of PION, but has not been used since then.
If you want to know more about this, especially what extra parameters you need to include, take a look at source/ics/jet.cpp
(and probably modify the source code for your needs).
5.4. Types of initial conditions that have been programmed¶
5.4.1. Uniform¶
This sets up uniform initial conditions throughout the domain in the standard mode, but it can also be used to set up a spherically symmetric medium with a constant density core and a power-lsw density profile outside the core.
One may add random adiabatic noise to this initial condition by setting the parameter noise
to a value between 0 and 1 (this is the fractional level of the noise with respect to background density).
Parameters:
parameter key | type | description |
---|---|---|
UNIFORM_ambRO |
double | gas density (g/cm3) |
UNIFORM_ambPG |
double | gas pressure (dyne/cm2) |
UNIFORM_ambVX |
double | x-velocity (cm/s) |
UNIFORM_ambVY |
double | y-velocity (cm/s) |
UNIFORM_ambVZ |
double | z-velocity (cm/s) |
UNIFORM_ambBX |
double | magnetic field BX (Gauss) |
UNIFORM_ambBY |
double | magnetic field BY (Gauss) |
UNIFORM_ambBZ |
double | magnetic field BZ (Gauss) |
UNIFORM_ambTR[N] |
double | initial value of tracer N |
UNIFORM_radial_slope |
double | If non-zero, this is the power-law slope of density with radius (spherically symmetric) |
UNIFORM_core_radius |
double | constant-density core radius for case with power-law density |
UNIFORM_radial_velocity |
double | expansion/contraction velocity w.r.t. origin |
UNIFORM_core_centre_XX |
double | x position of core centre |
UNIFORM_core_centre_YY |
double | y position of core centre |
UNIFORM_core_centre_ZZ |
double | z position of core centre |
5.4.2. ShockCloud¶
Sets up a shock-cloud test problem
5.4.3. RadiativeShock¶
Sets up a radiative shock test, with a flow hitting a reflecting boundary.
5.4.4. PhotEvap_RandomClumps¶
Sets up a simulation with randomly placed clumps on a uniform ISM
5.4.5. PhotoEvaporatingClump¶
Sets up a simulation of a single dense clump evaporated by an ionizing radiation field.
5.4.6. PE_MC_FN or PE_MC_FM¶
Sets up a simulation with a fixed number of random clumps or a fixed total mass in random clumps
5.4.7. BlastWave¶
Sets up a blastwave test problem
5.4.8. Advection¶
Sets up an advection test on a periodic domain
5.4.9. DoubleMachRef¶
Sets up the double Mach reflection test problem.
5.4.10. OrszagTang¶
Sets up the Orzsag-Tang Vortex test problem
5.4.11. LiskaWendroffImplosion¶
Sets up the Liska and Wendroff implosion test problem.
5.4.12. KelvinHelmholtz¶
Sets up a KH instability test problem.
5.4.13. FieldLoop¶
Sets up the field-loop advection test.
5.4.14. DivBPeak¶
Sets up the test of how the code can deal with a peak in divB
5.4.15. Others¶
Not yet documented.