21 #ifndef _aspect_material_model_utilities_h 22 #define _aspect_material_model_utilities_h 38 template <
int dim>
class SimulatorAccess;
58 class StructuredDataLookup;
60 namespace MaterialModel
62 template <
int dim>
class MaterialModelOutputs;
70 namespace MaterialUtilities
89 density(
const double temperature,
90 const double pressure)
const;
93 thermal_expansivity(
const double temperature,
94 const double pressure)
const;
97 seismic_Vp(
const double temperature,
98 const double pressure)
const;
101 seismic_Vs(
const double temperature,
102 const double pressure)
const;
105 enthalpy(
const double temperature,
106 const double pressure)
const;
114 dHdT (
const double temperature,
115 const double pressure)
const;
123 dHdp (
const double temperature,
124 const double pressure)
const;
138 std::array<std::pair<double, unsigned int>,2>
139 enthalpy_derivatives(
const std::vector<double> &temperatures,
140 const std::vector<double> &pressures,
141 const unsigned int n_substeps = 1)
const;
144 dRhodp (
const double temperature,
145 const double pressure)
const;
152 dominant_phase (
const double temperature,
153 const double pressure)
const;
160 has_dominant_phase()
const;
166 std::vector<std::string>
167 phase_volume_column_names()
const;
174 phase_volume_fraction(
const int phase_id,
175 const double temperature,
176 const double pressure)
const;
183 get_pT_steps()
const;
192 const std::vector<std::string> &
193 get_dominant_phase_names()
const;
204 value (
const double temperature,
205 const double pressure,
207 const bool interpol)
const;
215 value (
const double temperature,
216 const double pressure,
222 double get_nT(
const double temperature)
const;
227 double get_np(
const double pressure)
const;
269 const std::string &derivatives_filename,
271 const MPI_Comm
comm);
283 const MPI_Comm
comm);
299 const std::string &data_directory,
300 const std::string &material_file_name);
314 const double pressure)
const;
320 thermal_expansivity(
const double entropy,
321 const double pressure)
const;
328 const double pressure)
const;
334 seismic_vp(
const double entropy,
335 const double pressure)
const;
341 seismic_vs(
const double entropy,
342 const double pressure)
const;
348 density_gradient(
const double entropy,
349 const double pressure)
const;
379 const std::vector<unsigned int> &indices_to_use,
380 const double minimum_fraction = -std::numeric_limits<double>::max());
406 const double minimum_fraction = -std::numeric_limits<double>::max());
417 const std::vector<double> &densities,
418 const bool return_as_fraction);
468 double average_value (
const std::vector<double> &volume_fractions,
469 const std::vector<double> ¶meter_values,
491 const std::vector<double> &mass_fractions,
492 const std::vector<double> &volume_fractions,
493 const unsigned int i,
501 namespace PhaseUtilities
539 const std::vector<unsigned int> &reaction_progress_mapping,
540 const std::vector<unsigned int> &n_phase_transitions_per_composition,
541 std::vector<double> ¶meter_values,
542 const unsigned int composition_index,
564 const std::vector<unsigned int> &n_phase_transitions_per_composition,
565 const std::vector<double> ¶meter_values,
566 const unsigned int composition_index,
574 std::pair<bool, double>
576 const std::vector<unsigned> &reaction_progress_mapping,
577 const unsigned int phase_transition_index);
594 const double pressure_depth_derivative,
595 const unsigned int phase_transition_index);
648 double compute_derivative ()
const;
653 unsigned int n_phase_transitions ()
const;
658 unsigned int n_phases ()
const;
663 unsigned int n_phases_over_all_chemical_compositions ()
const;
668 const std::vector<unsigned int> &
669 n_phase_transitions_for_each_chemical_composition ()
const;
674 const std::vector<unsigned int> &
675 n_phases_for_each_chemical_composition ()
const;
683 const std::vector<unsigned int> &
684 n_phase_transitions_for_each_composition ()
const;
692 const std::vector<unsigned int> &
693 n_phases_for_each_composition ()
const;
832 unsigned int n_phase_transitions ()
const;
837 unsigned int n_phases ()
const;
842 unsigned int n_phases_over_all_chemical_compositions ()
const;
848 double get_transition_slope (
const unsigned int phase_transition_index)
const;
853 double get_transition_depth (
const unsigned int phase_transition_index)
const;
858 const std::vector<unsigned int> &
859 n_phase_transitions_for_each_chemical_composition ()
const;
864 const std::vector<unsigned int> &
865 n_phases_for_each_chemical_composition ()
const;
873 const std::vector<unsigned int> &
874 n_phase_transitions_for_each_composition ()
const;
882 const std::vector<unsigned int> &
883 n_phases_for_each_composition ()
const;
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
std::vector< double > compute_composition_fractions(const std::vector< double > &compositional_fields, const ComponentMask &field_mask=ComponentMask(), const double minimum_fraction=-std::numeric_limits< double >::max())
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
void reaction_progress_modify_values(const std::vector< double > &reaction_progress_values, const std::vector< unsigned int > &reaction_progress_mapping, const std::vector< unsigned int > &n_phase_transitions_per_composition, std::vector< double > ¶meter_values, const unsigned int composition_index, const PhaseUtilities::PhaseAveragingOperation operation=PhaseUtilities::arithmetic)
::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
*braid_SplitCommworld & comm
std::vector< double > compute_volumes_from_masses(const std::vector< double > &masses, const std::vector< double > &densities, const bool return_as_fraction)
std::pair< bool, double > get_reaction_progress_for_phase_transition(const std::vector< double > &reaction_progress_values, const std::vector< unsigned > &reaction_progress_mapping, const unsigned int phase_transition_index)
unsigned int n_phases_total
std::vector< unsigned int > n_phases_per_chemical_composition
std::vector< double > compute_only_composition_fractions(const std::vector< double > &compositional_fields, const std::vector< unsigned int > &indices_to_use, const double minimum_fraction=-std::numeric_limits< double >::max())
std::vector< double > transition_widths
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 > interval_pressure