![]() |
ASPECT
|
Static Public Member Functions | |
static void | declare_parameters (ParameterHandler &prm) |
![]() | |
static void | get_composition_values_at_q_point (const std::vector< std::vector< double >> &composition_values, const unsigned int q, std::vector< double > &composition_values_at_q_point) |
Public Attributes | |
std::vector< double > | reference_densities |
Private Attributes | |
std::vector< double > | reference_temperatures |
std::vector< double > | reference_isothermal_compressibilities |
std::vector< double > | isothermal_bulk_modulus_pressure_derivatives |
std::vector< double > | reference_thermal_expansivities |
std::vector< double > | isochoric_specific_heats |
bool | enable_phase_transitions |
A compressible equation of state that is intended for use with multiple compositional fields and potentially phases.
For models without phase transitions, each material property is specified as a comma delimited list of length N+1 for the background and compositional fields (N) For models with phase transitions, the list needs to contain each field name, including the background, for a total of N+1 names, and for each of these names, specify the value for each phase Therefore, the total number of values given is N+P+1, with P = sum(P_c) the total number of phase transitions, summed over all phases.
If no phase transitions are included, the material parameters for each compositional field are calculated self-consistently, assuming a constant pressure derivative of the isothermal bulk modulus ( \(K_T'\)) at the reference temperature (i.e. a Murnaghan equation of state), a constant ratio of the thermal expansivity ( \(\alpha\)) and isothermal compressibility ( \(\beta_T\)), and a constant isochoric specific heat \(C_v\). This leads to the following expressions for the material properties of each material:
\(\rho(p,T) = \rho_0 f^{1/K_T'}\) \(C_p(p,T) = C_v + (\alpha T \frac{\alpha}{\beta} f^{-1-(1/K_T')} / \rho_0)\) \(\alpha(p, T) = \alpha_0/f\) \(\beta_T(p, T) = \beta_0/f\) \(f = (1 + (p - \frac{\alpha}{\beta}(T-T_0)) K_T' \beta)\).
where \(\rho\) is the density and \(C_p\) is the isobaric heat capacity. \(f\) is a scaling factor for \(\alpha\) and \(\beta_T\).
Significantly, if phase transitions are included the formulation no longer self-consistently calculates the second derivative properties (heat capacity, thermal expansivity, and compressibility), as they are they are affected by the P-T-X dependence of the phase function. In terms of physics, this means that latent heat and excess expansivity/compressibility of reactions are neglected. Fixing that would require implementing equations 20, 21, 23 in Stixrude and Lithgow-Bertelloni, 2022 (https://doi.org/10.1093/gji/ggab394).
Definition at line 69 of file multicomponent_compressible.h.
void aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::evaluate | ( | const MaterialModel::MaterialModelInputs< dim > & | in, |
const unsigned int | q, | ||
MaterialModel::EquationOfStateOutputs< dim > & | eos_outputs | ||
) | const |
A function that computes the output of the equation of state eos_outputs
for all compositions and phases, given the inputs in in
and an index q that determines which entry of the vector of inputs is used.
bool aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::is_compressible | ( | ) | const |
Return whether the model is compressible or not. Incompressibility does not necessarily imply that the density is constant; rather, it may still depend on temperature or pressure. In the current context, compressibility means whether we should solve the continuity equation as \(\nabla \cdot (\rho \mathbf u)=0\) (compressible Stokes) or as \(\nabla \cdot \mathbf{u}=0\) (incompressible Stokes). This model is compressible.
|
static |
Declare the parameters this class takes through input files. The optional parameter n_compositions
determines the maximum number of compositions the equation of state is set up with, in other words, how many compositional fields influence the density.
void aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::parse_parameters | ( | ParameterHandler & | prm, |
const std::unique_ptr< std::vector< unsigned int >> & | expected_n_phases_per_composition = nullptr |
||
) |
Read the parameters this class declares from the parameter file. If expected_n_phases_per_composition
points to a vector of unsigned integers, this is considered the number of phases for each compositional field and will be checked against the parsed parameters.
std::vector<double> aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::reference_densities |
Vector of reference densities \(\rho_0\) with one entry per composition and phase plus one for the background field.
Definition at line 118 of file multicomponent_compressible.h.
|
private |
Vector of reference temperatures \(T_0\) with one entry per composition and phase plus one for the background field.
Definition at line 125 of file multicomponent_compressible.h.
|
private |
Vector of reference compressibilities, with one entry per composition and phase plus one for the background field.
Definition at line 131 of file multicomponent_compressible.h.
|
private |
Vector of isothermal bulk modulus pressure derivatives with one entry per composition and phase plus one for the background field.
Definition at line 137 of file multicomponent_compressible.h.
|
private |
Vector of reference thermal expansivities, with one entry per composition and phase plus one for the background field.
Definition at line 143 of file multicomponent_compressible.h.
|
private |
Vector of isochoric specific heats, with one entry per composition and phase plus one for the background field.
Definition at line 149 of file multicomponent_compressible.h.
|
private |
Whether to enable the use of phase transitions, which currently breaks thermodynamic consistency
Definition at line 154 of file multicomponent_compressible.h.