Available Equations of State
The following equations of state are available in Microphysics.
Note
The EOS is chosen at compile-time via the EOS_DIR
make
variable.
Note
Except where noted, each of these EOSs will provide the full
thermodynamic data (including all derivatives) in the eos_t
type.
breakout
The breakout
EOS is essentially the same as gamma_law
, but it gets
its composition information from the auxiliary data. In particular,
it expects an auxiliary quantity named invmu
which is the inverse
of the mean molecular weight:
The general_null
network provides this when used with the breakout.net
network inputs.
gamma_law
gamma_law
represents a gamma law gas, with
equation of state:
eos.eos_gamma
. For
an ideal gas, this represents the ratio of specific heats. The gas is
assumed to be ideal, with the pressure given by
where eos.assume_neutral = 1
),
giving:
or completely ionized (eos.assume_neutral = 0
), giving:
The entropy comes from the Sackur-Tetrode equation. Because of the
complex way that composition enters into the entropy, the entropy
formulation here is only correct for a
helmholtz
helmholtz
contains a general, publicly available stellar
equation of state based on the Helmholtz free energy, with
contributions from ions, radiation, and electron degeneracy, as
described in [5, 6, 7].
Note
Our implementation of the helmholtz
EOS has been modified
extensively from the original Fortran source. It has been
made threadsafe and makes heavy use of C++ templating to optimize
the evaluation of thermodynamic quantities.
The helmholtz
EOS has the ability to perform a Newton-Raphson
iteration so that if we call the EOS with, e.g., density and energy,
and iterate over temperature until we find the temperature
that matches this density–energy combination. If we cannot find an
appropriate temperature, we will reset it to small_temp
, which
needs to be set in the equation of state wrapper module in the code
calling this.
The following runtime parameters affect the EOS:
eos.use_eos_coulomb
: do we include Coulomb corrections? This is enabled by default. Coulomb corrections can cause problems in some regimes, because the implementation inhelmholtz
doesn’t have the correct asymptotic behavior and can lead to negative pressures or energies.eos.eos_input_is_constant
: when inverting the EOS for find the density and/or temperature that match the inputs, there is a choice of whether to update the inputs to match the final density / temperature, respecting thermodynamic consistency. Ifeos_input_is_constant=1
is set (the default), then we leave the input thermodynamic quantities unchanged, respecting energy conservation.eos.eos_ttol
,eos.eos_dtol
: these are the tolerances for temperature and density used by the Newton solver when inverting the EOS.eos.prad_limiter_rho_c
,eos.prad_limiter_delta_rho
: by default, radiation pressure is included in the optically-thick, LTE limit (with ). At low densities, this can cause issues, leading to an artificially high soundspeed dominated by radiation when, in fact, we should be optically thin. These parameters allow us turn off the radiation component smoothly, starting at a densityeos.prad_limiter_rho_c
and transitioning via a profile to zero over a scaleeos.prad_limiter_delta_rho
.
We thank Frank Timmes for permitting us to modify his code and publicly release it in this repository.
metal_chem
This is a multi-gamma equation of state for metal ISM chemistry.
multigamma
multigamma
is an ideal gas equation of state where each
species can have a different value of
We recognize that the usual astrophysical
The specific heats are constructed as usual,
and it can be seen that the specific gas constant,
and
This equation of state takes several runtime parameters that can set
the
eos.eos_gamma_default
: the default to apply for all specieseos.species_X_name
andeos.species_X_gamma
: set the for the species whose name is given aseos.species_X_name
to the value provided byeos.species_X_gamma
. Here,X
can be one of the letters:a
,b
, orc
, allowing us to specify custom for up to three different species.
polytrope
polytrope
represents a polytropic fluid, with equation of
state:
The gas is also assumed to obey the above gamma law relation
connecting the pressure and internal energy. Therefore eos.polytrope_K
and eos.polytrope_gamma
.
The runtime parameter eos.polytrope_type
selects the pre-defined
polytropic relations. The options are:
eos.polytrope_type = 1
: sets andwhere
is the mean molecular weight per electron, specified viaeos.polytrope_mu_e
This is the form appropriate for a non-relativistic fully-degenerate electron gas.
eos.polytrope_type = 2
: sets andThis is the form appropriate for a relativistic fully-degenerate electron gas.
primordial_chem
This is a version of the multi-gamma equation of state that models primordial chemistry.
rad_power_law
This is an artificial equation of state for radiation transport test problems. It uses a parameterization of the specific heat at constant volume:
and energy:
where the runtime parameters provide the constants:
eos.eos_const_c_v
eos.eos_c_v_exp_m
eos.eos_c_v_exp_n
tillotson
This is an equation of state for hypervelocity impacts based on [8].
ztwd
ztwd
is the zero-temperature degenerate electron equation
of state of Chandrasekhar (1935), which is designed to describe
white dward material. The pressure satisfies the equation:
with
The enthalpy was worked out by Hachisu (1986):
(note the unfortunate notation here, but this
Since the pressure-density relationship does not admit a closed-form solution for the density in terms of the pressure, if we call the EOS with pressure as a primary input then we do Newton-Raphson iteration to find the density that matches this pressure.