ASPECT
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Public Member Functions | Static Public Member Functions | Public Attributes | Private Attributes | List of all members
aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim > Class Template Reference
Inheritance diagram for aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >:
Inheritance graph
[legend]

Public Member Functions

void evaluate (const MaterialModel::MaterialModelInputs< dim > &in, const unsigned int q, MaterialModel::EquationOfStateOutputs< dim > &eos_outputs) const
 
bool is_compressible () const
 
void parse_parameters (ParameterHandler &prm, const std::unique_ptr< std::vector< unsigned int >> &expected_n_phases_per_composition=nullptr)
 
- Public Member Functions inherited from aspect::SimulatorAccess< dim >
 SimulatorAccess ()
 
 SimulatorAccess (const Simulator< dim > &simulator_object)
 
virtual ~SimulatorAccess ()=default
 
virtual void initialize_simulator (const Simulator< dim > &simulator_object)
 
const Introspection< dim > & introspection () const
 
const Simulator< dim > & get_simulator () const
 
const Parameters< dim > & get_parameters () const
 
SimulatorSignals< dim > & get_signals () const
 
MPI_Comm get_mpi_communicator () const
 
TimerOutput & get_computing_timer () const
 
const ConditionalOStream & get_pcout () const
 
double get_time () const
 
double get_timestep () const
 
double get_old_timestep () const
 
unsigned int get_timestep_number () const
 
const TimeStepping::Manager< dim > & get_timestepping_manager () const
 
unsigned int get_nonlinear_iteration () const
 
const parallel::distributed::Triangulation< dim > & get_triangulation () const
 
double get_volume () const
 
const Mapping< dim > & get_mapping () const
 
std::string get_output_directory () const
 
bool include_adiabatic_heating () const
 
bool include_latent_heat () const
 
bool include_melt_transport () const
 
int get_stokes_velocity_degree () const
 
double get_adiabatic_surface_temperature () const
 
double get_surface_pressure () const
 
bool convert_output_to_years () const
 
unsigned int get_pre_refinement_step () const
 
unsigned int n_compositional_fields () const
 
double get_end_time () const
 
void get_refinement_criteria (Vector< float > &estimated_error_per_cell) const
 
void get_artificial_viscosity (Vector< float > &viscosity_per_cell, const bool skip_interior_cells=false) const
 
void get_artificial_viscosity_composition (Vector< float > &viscosity_per_cell, const unsigned int compositional_variable) const
 
const LinearAlgebra::BlockVectorget_current_linearization_point () const
 
const LinearAlgebra::BlockVectorget_solution () const
 
const LinearAlgebra::BlockVectorget_old_solution () const
 
const LinearAlgebra::BlockVectorget_old_old_solution () const
 
const LinearAlgebra::BlockVectorget_reaction_vector () const
 
const LinearAlgebra::BlockVectorget_mesh_velocity () const
 
const DoFHandler< dim > & get_dof_handler () const
 
const FiniteElement< dim > & get_fe () const
 
const LinearAlgebra::BlockSparseMatrixget_system_matrix () const
 
const LinearAlgebra::BlockSparseMatrixget_system_preconditioner_matrix () const
 
const MaterialModel::Interface< dim > & get_material_model () const
 
const GravityModel::Interface< dim > & get_gravity_model () const
 
const InitialTopographyModel::Interface< dim > & get_initial_topography_model () const
 
const std::shared_ptr< const InitialTopographyModel::Interface< dim > > get_initial_topography_model_pointer () const
 
const GeometryModel::Interface< dim > & get_geometry_model () const
 
const AdiabaticConditions::Interface< dim > & get_adiabatic_conditions () const
 
bool has_boundary_temperature () const
 
const BoundaryTemperature::Manager< dim > & get_boundary_temperature_manager () const
 
const BoundaryConvectiveHeating::Manager< dim > & get_boundary_convective_heating_manager () const
 
const BoundaryHeatFlux::Interface< dim > & get_boundary_heat_flux () const
 
bool has_boundary_composition () const
 
const BoundaryComposition::Manager< dim > & get_boundary_composition_manager () const
 
const BoundaryTraction::Manager< dim > & get_boundary_traction_manager () const
 
std::shared_ptr< const InitialTemperature::Manager< dim > > get_initial_temperature_manager_pointer () const
 
const InitialTemperature::Manager< dim > & get_initial_temperature_manager () const
 
std::shared_ptr< const InitialComposition::Manager< dim > > get_initial_composition_manager_pointer () const
 
const InitialComposition::Manager< dim > & get_initial_composition_manager () const
 
const std::set< types::boundary_id > & get_fixed_temperature_boundary_indicators () const
 
const std::set< types::boundary_id > & get_fixed_heat_flux_boundary_indicators () const
 
const std::set< types::boundary_id > & get_fixed_convective_heating_boundary_indicators () const
 
const std::set< types::boundary_id > & get_fixed_composition_boundary_indicators () const
 
const std::set< types::boundary_id > & get_mesh_deformation_boundary_indicators () const
 
const BoundaryVelocity::Manager< dim > & get_boundary_velocity_manager () const
 
const HeatingModel::Manager< dim > & get_heating_model_manager () const
 
const MeshRefinement::Manager< dim > & get_mesh_refinement_manager () const
 
const MeltHandler< dim > & get_melt_handler () const
 
const VolumeOfFluidHandler< dim > & get_volume_of_fluid_handler () const
 
const NewtonHandler< dim > & get_newton_handler () const
 
const MeshDeformation::MeshDeformationHandler< dim > & get_mesh_deformation_handler () const
 
const LateralAveraging< dim > & get_lateral_averaging () const
 
const AffineConstraints< double > & get_current_constraints () const
 
bool simulator_is_past_initialization () const
 
double get_pressure_scaling () const
 
bool pressure_rhs_needs_compatibility_modification () const
 
bool model_has_prescribed_stokes_solution () const
 
TableHandler & get_statistics_object () const
 
const Postprocess::Manager< dim > & get_postprocess_manager () const
 
unsigned int n_particle_managers () const
 
const Particle::Manager< dim > & get_particle_manager (const unsigned int particle_manager_index) const
 
Particle::Manager< dim > & get_particle_manager (const unsigned int particle_manager_index)
 
bool is_stokes_matrix_free ()
 
const StokesMatrixFreeHandler< dim > & get_stokes_matrix_free () const
 
RotationProperties< dim > compute_net_angular_momentum (const bool use_constant_density, const LinearAlgebra::BlockVector &solution, const bool limit_to_top_faces=false) const
 
void remove_nullspace (LinearAlgebra::BlockVector &solution, LinearAlgebra::BlockVector &distributed_stokes_solution) const
 
double normalize_pressure (LinearAlgebra::BlockVector &vector) const
 
void denormalize_pressure (const double pressure_adjustment, LinearAlgebra::BlockVector &vector) const
 

Static Public Member Functions

static void declare_parameters (ParameterHandler &prm)
 
- Static Public Member Functions inherited from aspect::SimulatorAccess< dim >
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
 

Detailed Description

template<int dim>
class aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >

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.

Member Function Documentation

§ evaluate()

template<int dim>
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.

§ is_compressible()

template<int dim>
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.

§ declare_parameters()

template<int dim>
static void aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::declare_parameters ( ParameterHandler &  prm)
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.

§ parse_parameters()

template<int dim>
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.

Member Data Documentation

§ reference_densities

template<int dim>
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.

§ reference_temperatures

template<int dim>
std::vector<double> aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::reference_temperatures
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.

§ reference_isothermal_compressibilities

template<int dim>
std::vector<double> aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::reference_isothermal_compressibilities
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.

§ isothermal_bulk_modulus_pressure_derivatives

template<int dim>
std::vector<double> aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::isothermal_bulk_modulus_pressure_derivatives
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.

§ reference_thermal_expansivities

template<int dim>
std::vector<double> aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::reference_thermal_expansivities
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.

§ isochoric_specific_heats

template<int dim>
std::vector<double> aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::isochoric_specific_heats
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.

§ enable_phase_transitions

template<int dim>
bool aspect::MaterialModel::EquationOfState::MulticomponentCompressible< dim >::enable_phase_transitions
private

Whether to enable the use of phase transitions, which currently breaks thermodynamic consistency

Definition at line 154 of file multicomponent_compressible.h.


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