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> 33 template <
int dim>
class SimulatorAccess;
50 using namespace ::Utilities;
53 class StructuredDataLookup;
55 namespace MaterialModel
57 template <
int dim>
class MaterialModelOutputs;
65 namespace MaterialUtilities
84 density(
const double temperature,
85 const double pressure)
const;
88 thermal_expansivity(
const double temperature,
89 const double pressure)
const;
92 seismic_Vp(
const double temperature,
93 const double pressure)
const;
96 seismic_Vs(
const double temperature,
97 const double pressure)
const;
100 enthalpy(
const double temperature,
101 const double pressure)
const;
109 dHdT (
const double temperature,
110 const double pressure)
const;
118 dHdp (
const double temperature,
119 const double pressure)
const;
133 std::array<std::pair<double, unsigned int>,2>
134 enthalpy_derivatives(
const std::vector<double> &temperatures,
135 const std::vector<double> &pressures,
136 const unsigned int n_substeps = 1)
const;
139 dRhodp (
const double temperature,
140 const double pressure)
const;
147 dominant_phase (
const double temperature,
148 const double pressure)
const;
155 has_dominant_phase()
const;
161 std::vector<std::string>
162 phase_volume_column_names()
const;
169 phase_volume_fraction(
const int phase_id,
170 const double temperature,
171 const double pressure)
const;
178 get_pT_steps()
const;
187 const std::vector<std::string> &
188 get_dominant_phase_names()
const;
199 value (
const double temperature,
200 const double pressure,
201 const Table<2, double> &values,
202 const bool interpol)
const;
210 value (
const double temperature,
211 const double pressure,
212 const Table<2, unsigned int> &values)
const;
217 double get_nT(
const double temperature)
const;
222 double get_np(
const double pressure)
const;
264 const std::string &derivatives_filename,
266 const MPI_Comm comm);
278 const MPI_Comm comm);
294 const std::string &data_directory,
295 const std::string &material_file_name);
309 const double pressure)
const;
315 thermal_expansivity(
const double entropy,
316 const double pressure)
const;
323 const double pressure)
const;
329 seismic_vp(
const double entropy,
330 const double pressure)
const;
336 seismic_vs(
const double entropy,
337 const double pressure)
const;
343 density_gradient(
const double entropy,
344 const double pressure)
const;
371 const std::vector<unsigned int> &indices_to_use);
393 const ComponentMask &field_mask = ComponentMask());
404 const std::vector<double> &densities,
405 const bool return_as_fraction);
432 const ParameterHandler &prm);
455 double average_value (
const std::vector<double> &volume_fractions,
456 const std::vector<double> ¶meter_values,
478 const std::vector<double> &mass_fractions,
479 const std::vector<double> &volume_fractions,
480 const unsigned int i,
488 namespace PhaseUtilities
519 const std::vector<unsigned int> &n_phase_transitions_per_composition,
520 const std::vector<double> ¶meter_values,
521 const unsigned int composition_index,
541 const double pressure_depth_derivative,
542 const unsigned int phase_transition_index);
595 double compute_derivative ()
const;
600 unsigned int n_phase_transitions ()
const;
605 unsigned int n_phases ()
const;
610 unsigned int n_phases_over_all_chemical_compositions ()
const;
615 const std::vector<unsigned int> &
616 n_phase_transitions_for_each_chemical_composition ()
const;
621 const std::vector<unsigned int> &
622 n_phases_for_each_chemical_composition ()
const;
630 const std::vector<unsigned int> &
631 n_phase_transitions_for_each_composition ()
const;
639 const std::vector<unsigned int> &
640 n_phases_for_each_composition ()
const;
659 parse_parameters (ParameterHandler &prm);
775 unsigned int n_phase_transitions ()
const;
780 unsigned int n_phases ()
const;
785 unsigned int n_phases_over_all_chemical_compositions ()
const;
791 double get_transition_slope (
const unsigned int phase_transition_index)
const;
796 double get_transition_depth (
const unsigned int phase_transition_index)
const;
801 const std::vector<unsigned int> &
802 n_phase_transitions_for_each_chemical_composition ()
const;
807 const std::vector<unsigned int> &
808 n_phases_for_each_chemical_composition ()
const;
816 const std::vector<unsigned int> &
817 n_phase_transitions_for_each_composition ()
const;
825 const std::vector<unsigned int> &
826 n_phases_for_each_composition ()
const;
845 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