ASPECT
latent_heat_melt.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) 2013-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_latent_heat_melt_h
16 #define _aspect_material_model_latent_heat_melt_h
17 
20 #include <aspect/melt.h>
21 
22 namespace aspect
23 {
24  namespace MaterialModel
25  {
33  template <int dim>
36  public ::aspect::SimulatorAccess<dim>
37  {
38  public:
44  MaterialModel::MaterialModelOutputs<dim> &out) const override;
45 
46 
64  bool is_compressible () const override;
70  std::vector<double> &melt_fractions,
71  const MaterialModel::MaterialModelOutputs<dim> *out = nullptr) const override;
72 
73 
81  static
82  void
84 
88  void
89  parse_parameters (ParameterHandler &prm) override;
94  private:
98  double reference_rho;
102  double reference_T;
106  double eta;
131 
137  double k_value;
138 
143 
148  // for the solidus temperature
152  double A1; // °C
156  double A2; // °C/Pa
160  double A3; // °C/(Pa^2)
161 
162  // for the lherzolite liquidus temperature
166  double B1; // °C
170  double B2; // °C/Pa
174  double B3; // °C/(Pa^2)
175 
176  // for the liquidus temperature
180  double C1; // °C
184  double C2; // °C/Pa
188  double C3; // °C/(Pa^2)
189 
190  // for the reaction coefficient of pyroxene
194  double r1; // cpx/melt
198  double r2; // cpx/melt/GPa
202  double M_cpx; // mass fraction of pyroxene
203 
204  // melt fraction exponent
208  double beta;
209 
210  // entropy change upon melting
215 
220  // for the melting temperature
224  double D1; // °C
228  double D2; // °C/Pa
232  double D3; // °C/(Pa^2)
233  // for the melt-fraction dependence of productivity
237  double E1;
241  double E2;
242 
243  // for the maximum melt fraction of pyroxenite
247  double F_px_max;
248 
249  // the relative density of molten material (compared to solid)
254 
259 
264  virtual
265  double
266  melt_fraction (const double temperature,
267  const double pressure,
268  const std::vector<double> &compositional_fields,
269  const Point<dim> &position) const;
270 
271  virtual
272  double
274  const double pressure,
275  const std::vector<double> &compositional_fields,
276  const Point<dim> &position) const;
277 
278  virtual
279  double
281  const double pressure,
282  const std::vector<double> &compositional_fields,
283  const Point<dim> &position) const;
284 
285  double
286  entropy_derivative ( const double temperature,
287  const double pressure,
288  const std::vector<double> &compositional_fields,
289  const Point<dim> &position,
290  const NonlinearDependence::Dependence dependence) const;
291  };
292 
293  }
294 }
295 
296 #endif
double entropy_derivative(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position, const NonlinearDependence::Dependence dependence) const
static void declare_parameters(ParameterHandler &prm)
bool is_compressible() const override
virtual double pyroxenite_melt_fraction(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
void parse_parameters(ParameterHandler &prm) override
void melt_fractions(const MaterialModel::MaterialModelInputs< dim > &in, std::vector< double > &melt_fractions, const MaterialModel::MaterialModelOutputs< dim > *out=nullptr) const override
void evaluate(const MaterialModel::MaterialModelInputs< dim > &in, MaterialModel::MaterialModelOutputs< dim > &out) const override
virtual double melt_fraction(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
virtual double peridotite_melt_fraction(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const