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:

1μ=kZkXkAk

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:

p=(γ1)ρe.

γ is specified by the runtime parameter 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

p=ρkTμmu

where k is Boltzmann’s constant and μ is the mean molecular weight, calculated from the composition, Xk. This EOS assumes the gas is either completely neutral (eos.assume_neutral = 1), giving:

μ1=kXkAk

or completely ionized (eos.assume_neutral = 0), giving:

μ1=k(1+Zk)XkAk

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 γ=5/3 gas.

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 in helmholtz 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. If eos_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 pγ=(1/3)aT4). 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 density eos.prad_limiter_rho_c and transitioning via a tanh profile to zero over a scale eos.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 γ. This mainly affects how the internal energy is constructed as each species, represented with a mass fraction Xk will have its contribution to the total specific internal energy take the form of e=p/ρ/(γk1). The main thermodynamic quantities take the form:

p=ρkTmukXkAke=kTmuk1γk1XkAkh=kTmukγkγk1XkAk

We recognize that the usual astrophysical A¯1=kXk/Ak, but now we have two other sums that involve different γk weightings.

The specific heats are constructed as usual,

cv=eT|ρ=kmuk1γk1XkAkcp=hT|p=kmukγkγk1XkAk

and it can be seen that the specific gas constant, Rcpcv is independent of the γi, and is simply R=k/muA¯ giving the usual relation that p=RρT. Furthermore, we can show

Γ1logplogρ|s=(kγkγk1XkAk)/(k1γk1XkAk)=cpcvγeffective

and p=ρe(γeffective1).

This equation of state takes several runtime parameters that can set the γi for a specific species. The parameters are:

  • eos.eos_gamma_default: the default γ to apply for all species

  • eos.species_X_name and eos.species_X_gamma: set the γi for the species whose name is given as eos.species_X_name to the value provided by eos.species_X_gamma. Here, X can be one of the letters: a, b, or c, allowing us to specify custom γi for up to three different species.

polytrope

polytrope represents a polytropic fluid, with equation of state:

p=Kργ.

The gas is also assumed to obey the above gamma law relation connecting the pressure and internal energy. Therefore ρ is the only independent variable; there is no temperature dependence. The user either selects from a set of predefined options reflecting physical polytropes (e.g. a non-relativistic, fully degenerate electron gas) or inputs their own values for K and γ via 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 γ=5/3 and

    K=(3π)2/3h220memp5/31μe5/3

    where mue is the mean molecular weight per electron, specified via eos.polytrope_mu_e

    This is the form appropriate for a non-relativistic fully-degenerate electron gas.

  • eos.polytrope_type = 2: sets γ=4/3 and

    K=(3π)1/3hc8mp4/31μe4/3

    This 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:

cv=AρmTn

and energy:

e=A1nρmT1n

where the runtime parameters provide the constants:

  • eos.eos_const_c_v =A

  • eos.eos_c_v_exp_m =m

  • eos.eos_c_v_exp_n =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:

p(x)=A(x(2x23)(x2+1)1/2+3sinh1(x)),

with A=πme4c5/(3h3). Here x is a dimensionless measure of the Fermi momentum, with ρ=Bx3 and B=8πμempme3c3/(3h3), where μe is the mean molecular weight per electron and h is the Planck constant.

The enthalpy was worked out by Hachisu (1986):

h(x)=8AB(x2+1)1/2.

(note the unfortunate notation here, but this h is specific enthalpy). The specific internal energy satisfies the standard relationship to the specific enthalpy:

e=hp/ρ.

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.