ASPECT
melt_boukare.h
Go to the documentation of this file.
1 // ------------------------------------------------------
2 //
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 //
5 // SPDX-FileCopyrightText: Copyright (C) 2015-2026 by the ASPECT authors.
6 //
7 // This file is part of ASPECT.
8 //
9 // Detailed license information governing the source code and
10 // contributions can be found in the folder LICENSES and in
11 // LICENSE and CONTRIBUTING.md at the top level directory.
12 //
13 // ------------------------------------------------------
14 
15 #ifndef _aspect_material_model_melt_boukare_h
16 #define _aspect_material_model_melt_boukare_h
17 
20 #include <aspect/melt.h>
21 
22 namespace aspect
23 {
24  namespace MaterialModel
25  {
29  template <int dim>
31  {
32  public:
33  BoukareOutputs(const unsigned int n_points);
34 
35  std::vector<double> get_nth_output(const unsigned int idx) const override;
36 
40  std::vector<double> bulk_composition;
41  std::vector<double> molar_volatiles_in_melt;
42  };
43 
59  template <int dim>
62  public ::aspect::SimulatorAccess<dim>
63  {
64  public:
68  void
69  initialize () override;
70 
75  bool is_compressible () const override;
76 
77  void evaluate(const typename Interface<dim>::MaterialModelInputs &in,
78  typename Interface<dim>::MaterialModelOutputs &out) const override;
79 
92  void melt_fractions (const MaterialModel::MaterialModelInputs<dim> &in,
93  std::vector<double> &melt_fractions,
94  const MaterialModel::MaterialModelOutputs<dim> *out = nullptr) const override;
95 
100  double reference_darcy_coefficient () const override;
101 
113  static
114  void
116 
120  void
121  parse_parameters (ParameterHandler &prm) override;
122 
127  void
128  create_additional_named_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const override;
129 
130 
131  private:
132  // Thermodynamic parameters of the endmember components in the equation of state,
133  // needed to compute their material properties.
137  std::vector<std::string> endmember_names;
141  std::vector<double> molar_masses;
145  std::vector<double> number_of_atoms;
149  std::vector<double> reference_volumes;
153  std::vector<double> reference_thermal_expansivities;
157  std::vector<double> reference_bulk_moduli;
169  std::vector<double> Einstein_temperatures;
173  std::vector<double> reference_enthalpies;
177  std::vector<double> reference_entropies;
181  std::vector<double> reference_specific_heats;
193  std::vector<double> specific_heat_third_coefficients;
194 
195  std::vector<double> tait_parameters_a;
196  std::vector<double> tait_parameters_b;
197  std::vector<double> tait_parameters_c;
198 
199  // Reference conditions for computing the material properties in the equation of state.
208 
209  // Rheological properties.
213  double eta_0;
217  double xi_0;
221  double eta_f;
233  double alpha_phi;
234 
235  // Transport properties that are not computed from the equation of state.
241 
242  // Parameters controlling melting and solidification of melt.
251 
252  // Parameters defining the molar composition of the two endmember compositions we use
253  // in the melting model.
254  const double molar_MgO_in_Mg_mantle_endmember = 0.581;
255  const double molar_SiO2_in_Mg_mantle_endmember = 0.419;
256  const double molar_FeO_in_Fe_mantle_endmember = 0.908;
257  const double molar_SiO2_in_Fe_mantle_endmember = 0.092;
258 
259  // Parameters describing the melting properties of the two endmembers of the melting model.
260  const double melting_reference_pressure = 120.e9;
261 
262  // reference melting temperature for Fe and Mg mantle endmember at the reference pressure
271 
272  // molar entropy change of melting in J/mol K
273  const double Fe_mantle_melting_entropy = 33.77;
274  const double Mg_mantle_melting_entropy = 34.33;
275 
276  // molar volume change of melting of solid Fe and Mg mantle endmember in m3/mol
277  const double Fe_mantle_melting_volume = 1.51e-07;
278  const double Mg_mantle_melting_volume = 9.29e-08;
279 
280  // Number of moles of atoms mixing on pseudosite in mantle lattice (empirical model fitting the full Boukare model).
289 
290  // Indices for the endmembers in the equation of state.
291  unsigned int febdg_idx;
292  unsigned int mgbdg_idx;
293  unsigned int wus_idx;
294  unsigned int per_idx;
295  unsigned int femelt_idx;
296  unsigned int mgmelt_idx;
297 
298 
299  // Parameter describing if an endmember in the equation of state is solid or molten.
301  {
302  enum Kind
303  {
305  melt
306  };
307  };
308 
309  std::vector<typename EndmemberState::Kind> endmember_states;
310 
311 
312  // Material properties of the different endmembers of the equation of state.
314  {
319  EndmemberProperties(const unsigned int n_endmembers);
320 
321  std::vector<double> volumes;
322  std::vector<double> gibbs_energies;
323  std::vector<double> entropies;
324  std::vector<double> thermal_expansivities;
325  std::vector<double> bulk_moduli;
326  std::vector<double> heat_capacities;
327  };
328 
329 
333  virtual
334  void
335  fill_endmember_properties (const typename Interface<dim>::MaterialModelInputs &in,
336  const unsigned int q,
337  EndmemberProperties &properties) const;
338 
339 
343  virtual
344  double
345  endmember_thermal_energy (const double temperature,
346  const unsigned int endmember_index) const;
347 
348 
352  virtual
353  double
354  endmember_molar_heat_capacity (const double temperature,
355  const unsigned int endmember_index) const;
356 
360  virtual
361  double
362  endmember_thermal_pressure (const double temperature,
363  const unsigned int endmember_index) const;
364 
369  virtual
370  double
371  endmember_enthalpy_thermal_addition (const double temperature,
372  const unsigned int endmember_index) const;
373 
378  virtual
379  double
380  endmember_entropy_thermal_addition (const double temperature,
381  const unsigned int endmember_index) const;
382 
383 
389  virtual
390  void
391  convert_composition_to_fraction_of_endmembers (const double temperature,
392  const double molar_Fe_in_solid,
393  const double molar_Fe_in_melt,
394  const std::vector<double> &endmember_gibbs_energies,
395  std::vector<double> &endmember_mole_fractions_per_phase,
396  double &molar_bridgmanite_in_solid) const;
397 
398 
404  virtual
405  double
406  compute_melt_molar_fraction (const double porosity,
407  const double bridgmanite_molar_fraction_in_solid,
408  EndmemberProperties &properties,
409  const std::vector<double> &endmember_mole_fractions_per_phase) const;
410 
411 
416  virtual
417  double
418  assert_update_is_within_0_and_1 (const double value,
419  const double change_of_value) const;
420 
421 
429  virtual
430  double
431  melt_fraction (const double temperature,
432  const double pressure,
433  const double bulk_composition,
434  double &molar_volatiles_in_melt,
435  double &solid_composition,
436  double &melt_composition) const;
437  };
438 
439  }
440 }
441 
442 #endif
std::vector< double > tait_parameters_b
Definition: melt_boukare.h:196
std::vector< double > get_nth_output(const unsigned int idx) const override
std::vector< double > number_of_atoms
Definition: melt_boukare.h:145
std::vector< double > bulk_modulus_second_pressure_derivatives
Definition: melt_boukare.h:165
std::vector< double > reference_volumes
Definition: melt_boukare.h:149
std::vector< std::string > endmember_names
Definition: melt_boukare.h:137
BoukareOutputs(const unsigned int n_points)
void declare_parameters(ParameterHandler &prm)
std::vector< double > tait_parameters_a
Definition: melt_boukare.h:195
std::vector< double > specific_heat_linear_coefficients
Definition: melt_boukare.h:185
std::vector< typename EndmemberState::Kind > endmember_states
Definition: melt_boukare.h:309
std::vector< double > bulk_composition
Definition: melt_boukare.h:40
std::vector< double > specific_heat_second_coefficients
Definition: melt_boukare.h:189
std::vector< double > reference_entropies
Definition: melt_boukare.h:177
std::vector< double > specific_heat_third_coefficients
Definition: melt_boukare.h:193
std::vector< double > bulk_modulus_pressure_derivatives
Definition: melt_boukare.h:161
std::vector< double > reference_bulk_moduli
Definition: melt_boukare.h:157
std::vector< double > molar_masses
Definition: melt_boukare.h:141
std::vector< double > reference_thermal_expansivities
Definition: melt_boukare.h:153
std::vector< double > Einstein_temperatures
Definition: melt_boukare.h:169
std::vector< double > reference_specific_heats
Definition: melt_boukare.h:181
std::vector< double > tait_parameters_c
Definition: melt_boukare.h:197
std::vector< double > reference_enthalpies
Definition: melt_boukare.h:173
std::vector< double > molar_volatiles_in_melt
Definition: melt_boukare.h:41