15 #ifndef _aspect_material_model_utilities_h 16 #define _aspect_material_model_utilities_h 32 template <
int dim>
class SimulatorAccess;
52 class StructuredDataLookup;
54 namespace MaterialModel
56 template <
int dim>
class MaterialModelOutputs;
64 namespace MaterialUtilities
83 density(
const double temperature,
84 const double pressure)
const;
87 thermal_expansivity(
const double temperature,
88 const double pressure)
const;
91 seismic_Vp(
const double temperature,
92 const double pressure)
const;
95 seismic_Vs(
const double temperature,
96 const double pressure)
const;
99 enthalpy(
const double temperature,
100 const double pressure)
const;
108 dHdT (
const double temperature,
109 const double pressure)
const;
117 dHdp (
const double temperature,
118 const double pressure)
const;
132 std::array<std::pair<double, unsigned int>,2>
133 enthalpy_derivatives(
const std::vector<double> &temperatures,
134 const std::vector<double> &pressures,
135 const unsigned int n_substeps = 1)
const;
138 dRhodp (
const double temperature,
139 const double pressure)
const;
146 dominant_phase (
const double temperature,
147 const double pressure)
const;
154 has_dominant_phase()
const;
160 std::vector<std::string>
161 phase_volume_column_names()
const;
168 phase_volume_fraction(
const int phase_id,
169 const double temperature,
170 const double pressure)
const;
177 get_pT_steps()
const;
186 const std::vector<std::string> &
187 get_dominant_phase_names()
const;
198 value (
const double temperature,
199 const double pressure,
201 const bool interpol)
const;
209 value (
const double temperature,
210 const double pressure,
216 double get_nT(
const double temperature)
const;
221 double get_np(
const double pressure)
const;
263 const std::string &derivatives_filename,
265 const MPI_Comm
comm);
277 const MPI_Comm
comm);
293 const std::string &data_directory,
294 const std::string &material_file_name);
308 const double pressure)
const;
314 thermal_expansivity(
const double entropy,
315 const double pressure)
const;
322 const double pressure)
const;
328 seismic_vp(
const double entropy,
329 const double pressure)
const;
335 seismic_vs(
const double entropy,
336 const double pressure)
const;
342 density_gradient(
const double entropy,
343 const double pressure)
const;
373 const std::vector<unsigned int> &indices_to_use,
374 const double minimum_fraction = -std::numeric_limits<double>::max());
400 const double minimum_fraction = -std::numeric_limits<double>::max());
411 const std::vector<double> &densities,
412 const bool return_as_fraction);
462 double average_value (
const std::vector<double> &volume_fractions,
463 const std::vector<double> ¶meter_values,
485 const std::vector<double> &mass_fractions,
486 const std::vector<double> &volume_fractions,
487 const unsigned int i,
495 namespace PhaseUtilities
533 const std::vector<unsigned int> &reaction_progress_mapping,
534 const std::vector<unsigned int> &n_phase_transitions_per_composition,
535 std::vector<double> ¶meter_values,
536 const unsigned int composition_index,
558 const std::vector<unsigned int> &n_phase_transitions_per_composition,
559 const std::vector<double> ¶meter_values,
560 const unsigned int composition_index,
568 std::pair<bool, double>
570 const std::vector<unsigned> &reaction_progress_mapping,
571 const unsigned int phase_transition_index);
588 const double pressure_depth_derivative,
589 const unsigned int phase_transition_index);
642 double compute_derivative ()
const;
647 unsigned int n_phase_transitions ()
const;
652 unsigned int n_phases ()
const;
657 unsigned int n_phases_over_all_chemical_compositions ()
const;
662 const std::vector<unsigned int> &
663 n_phase_transitions_for_each_chemical_composition ()
const;
668 const std::vector<unsigned int> &
669 n_phases_for_each_chemical_composition ()
const;
677 const std::vector<unsigned int> &
678 n_phase_transitions_for_each_composition ()
const;
686 const std::vector<unsigned int> &
687 n_phases_for_each_composition ()
const;
826 unsigned int n_phase_transitions ()
const;
831 unsigned int n_phases ()
const;
836 unsigned int n_phases_over_all_chemical_compositions ()
const;
842 double get_transition_slope (
const unsigned int phase_transition_index)
const;
847 double get_transition_depth (
const unsigned int phase_transition_index)
const;
852 const std::vector<unsigned int> &
853 n_phase_transitions_for_each_chemical_composition ()
const;
858 const std::vector<unsigned int> &
859 n_phases_for_each_chemical_composition ()
const;
867 const std::vector<unsigned int> &
868 n_phase_transitions_for_each_composition ()
const;
876 const std::vector<unsigned int> &
877 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