21 #ifndef _aspect_material_model_utilities_h 22 #define _aspect_material_model_utilities_h 25 #include <deal.II/base/point.h> 26 #include <deal.II/base/symmetric_tensor.h> 27 #include <deal.II/fe/component_mask.h> 28 #include <deal.II/base/signaling_nan.h> 29 #include <deal.II/base/parameter_handler.h> 36 template <
int dim>
class SimulatorAccess;
53 using namespace ::Utilities;
56 class StructuredDataLookup;
58 namespace MaterialModel
60 template <
int dim>
class MaterialModelOutputs;
68 namespace MaterialUtilities
87 density(
const double temperature,
88 const double pressure)
const;
91 thermal_expansivity(
const double temperature,
92 const double pressure)
const;
95 seismic_Vp(
const double temperature,
96 const double pressure)
const;
99 seismic_Vs(
const double temperature,
100 const double pressure)
const;
103 enthalpy(
const double temperature,
104 const double pressure)
const;
112 dHdT (
const double temperature,
113 const double pressure)
const;
121 dHdp (
const double temperature,
122 const double pressure)
const;
136 std::array<std::pair<double, unsigned int>,2>
137 enthalpy_derivatives(
const std::vector<double> &temperatures,
138 const std::vector<double> &pressures,
139 const unsigned int n_substeps = 1)
const;
142 dRhodp (
const double temperature,
143 const double pressure)
const;
150 dominant_phase (
const double temperature,
151 const double pressure)
const;
158 has_dominant_phase()
const;
164 std::vector<std::string>
165 phase_volume_column_names()
const;
172 phase_volume_fraction(
const int phase_id,
173 const double temperature,
174 const double pressure)
const;
181 get_pT_steps()
const;
190 const std::vector<std::string> &
191 get_dominant_phase_names()
const;
202 value (
const double temperature,
203 const double pressure,
204 const Table<2, double> &values,
205 const bool interpol)
const;
213 value (
const double temperature,
214 const double pressure,
215 const Table<2, unsigned int> &values)
const;
220 double get_nT(
const double temperature)
const;
225 double get_np(
const double pressure)
const;
267 const std::string &derivatives_filename,
269 const MPI_Comm comm);
281 const MPI_Comm comm);
297 const std::string &data_directory,
298 const std::string &material_file_name);
312 const double pressure)
const;
318 thermal_expansivity(
const double entropy,
319 const double pressure)
const;
326 const double pressure)
const;
332 seismic_vp(
const double entropy,
333 const double pressure)
const;
339 seismic_vs(
const double entropy,
340 const double pressure)
const;
346 density_gradient(
const double entropy,
347 const double pressure)
const;
374 const std::vector<unsigned int> &indices_to_use);
396 const ComponentMask &field_mask = ComponentMask());
407 const std::vector<double> &densities,
408 const bool return_as_fraction);
435 const ParameterHandler &prm);
458 double average_value (
const std::vector<double> &volume_fractions,
459 const std::vector<double> ¶meter_values,
481 const std::vector<double> &mass_fractions,
482 const std::vector<double> &volume_fractions,
483 const unsigned int i,
491 namespace PhaseUtilities
522 const std::vector<unsigned int> &n_phase_transitions_per_composition,
523 const std::vector<double> ¶meter_values,
524 const unsigned int composition_index,
544 const double pressure_depth_derivative,
545 const unsigned int phase_transition_index);
598 double compute_derivative ()
const;
603 unsigned int n_phase_transitions ()
const;
608 unsigned int n_phases ()
const;
613 unsigned int n_phases_over_all_chemical_compositions ()
const;
618 const std::vector<unsigned int> &
619 n_phase_transitions_for_each_chemical_composition ()
const;
624 const std::vector<unsigned int> &
625 n_phases_for_each_chemical_composition ()
const;
633 const std::vector<unsigned int> &
634 n_phase_transitions_for_each_composition ()
const;
642 const std::vector<unsigned int> &
643 n_phases_for_each_composition ()
const;
662 parse_parameters (ParameterHandler &prm);
778 unsigned int n_phase_transitions ()
const;
783 unsigned int n_phases ()
const;
788 unsigned int n_phases_over_all_chemical_compositions ()
const;
794 double get_transition_slope (
const unsigned int phase_transition_index)
const;
799 double get_transition_depth (
const unsigned int phase_transition_index)
const;
804 const std::vector<unsigned int> &
805 n_phase_transitions_for_each_chemical_composition ()
const;
810 const std::vector<unsigned int> &
811 n_phases_for_each_chemical_composition ()
const;
819 const std::vector<unsigned int> &
820 n_phase_transitions_for_each_composition ()
const;
828 const std::vector<unsigned int> &
829 n_phases_for_each_composition ()
const;
848 parse_parameters (ParameterHandler &prm);
unsigned int n_phases_total
void fill_averaged_equation_of_state_outputs(const EquationOfStateOutputs< dim > &eos_outputs, const std::vector< double > &mass_fractions, const std::vector< double > &volume_fractions, const unsigned int i, MaterialModelOutputs< dim > &out)
std::vector< double > transition_depths
std::string data_directory
std::vector< unsigned int > n_phases_per_composition
::Table< 2, double > vp_values
std::vector< std::string > dominant_phase_names
std::vector< double > transition_slopes
CompositionalAveragingOperation
unsigned int n_phases_total_chemical_compositions
unsigned int n_phases_total_chemical_compositions
std::unique_ptr< Utilities::StructuredDataLookup< 2 > > material_lookup
std::vector< std::string > material_file_names
::Table< 2, double > density_values
std::vector< double > transition_pressure_widths
std::vector<::Table< 2, double > > phase_volume_fractions
std::vector< unsigned int > n_phases_per_composition
std::vector< double > maximum_temperature
std::vector< std::string > phase_column_names
void declare_parameters(ParameterHandler &prm)
std::unique_ptr< std::vector< unsigned int > > n_phase_transitions_per_composition
bool use_depth_instead_of_pressure
::Table< 2, double > enthalpy_values
bool has_dominant_phase_column
std::unique_ptr< std::vector< unsigned int > > n_phase_transitions_per_composition
std::vector< unsigned int > n_phase_transitions_per_chemical_composition
double average_value(const std::vector< double > &volume_fractions, const std::vector< double > ¶meter_values, const CompositionalAveragingOperation &average_type)
::Table< 2, double > specific_heat_values
std::vector< std::unique_ptr< Utilities::StructuredDataLookup< 2 > > > material_lookup
double phase_average_value(const std::vector< double > &phase_function_values, const std::vector< unsigned int > &n_phase_transitions_per_composition, const std::vector< double > ¶meter_values, const unsigned int composition_index, const PhaseUtilities::PhaseAveragingOperation operation=PhaseUtilities::arithmetic)
::Table< 2, unsigned int > dominant_phase_indices
std::vector< double > minimum_temperature
std::vector< unsigned int > n_phase_transitions_per_chemical_composition
std::vector< double > maximum_pressure
::Table< 2, double > vs_values
CompositionalAveragingOperation parse_compositional_averaging_operation(const std::string ¶meter_name, const ParameterHandler &prm)
std::vector< unsigned int > n_phases_per_chemical_composition
std::vector< double > minimum_pressure
std::vector< double > transition_temperature_upper_limits
unsigned int n_temperature
std::vector< double > compute_volumes_from_masses(const std::vector< double > &masses, const std::vector< double > &densities, const bool return_as_fraction)
unsigned int n_phases_total
std::vector< unsigned int > n_phases_per_chemical_composition
std::vector< double > transition_widths
std::vector< double > compute_only_composition_fractions(const std::vector< double > &compositional_fields, const std::vector< unsigned int > &indices_to_use)
std::vector< unsigned int > transition_indicators
::Table< 2, double > thermal_expansivity_values
std::vector< double > transition_pressures
std::vector< double > transition_temperatures
std::vector< double > interval_temperature
std::vector< double > transition_temperature_lower_limits
std::vector< double > compute_composition_fractions(const std::vector< double > &compositional_fields, const ComponentMask &field_mask=ComponentMask())
std::vector< double > interval_pressure