ASPECT
latent_heat_melt.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2013 - 2023 by the authors of the ASPECT code.
3 
4  This file is part of ASPECT.
5 
6  ASPECT is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2, or (at your option)
9  any later version.
10 
11  ASPECT is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with ASPECT; see the file LICENSE. If not see
18  <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef _aspect_material_model_latent_heat_melt_h
22 #define _aspect_material_model_latent_heat_melt_h
23 
26 #include <aspect/melt.h>
27 
28 namespace aspect
29 {
30  namespace MaterialModel
31  {
39  template <int dim>
42  public ::aspect::SimulatorAccess<dim>
43  {
44  public:
50  MaterialModel::MaterialModelOutputs<dim> &out) const override;
51 
52 
70  bool is_compressible () const override;
76  std::vector<double> &melt_fractions,
77  const MaterialModel::MaterialModelOutputs<dim> *out = nullptr) const override;
78 
79 
87  static
88  void
90 
94  void
100  private:
108  double reference_T;
112  double eta;
137 
143  double k_value;
144 
149 
154  // for the solidus temperature
158  double A1; // °C
162  double A2; // °C/Pa
166  double A3; // °C/(Pa^2)
167 
168  // for the lherzolite liquidus temperature
172  double B1; // °C
176  double B2; // °C/Pa
180  double B3; // °C/(Pa^2)
181 
182  // for the liquidus temperature
186  double C1; // °C
190  double C2; // °C/Pa
194  double C3; // °C/(Pa^2)
195 
196  // for the reaction coefficient of pyroxene
200  double r1; // cpx/melt
204  double r2; // cpx/melt/GPa
208  double M_cpx; // mass fraction of pyroxene
209 
210  // melt fraction exponent
214  double beta;
215 
216  // entropy change upon melting
221 
226  // for the melting temperature
230  double D1; // °C
234  double D2; // °C/Pa
238  double D3; // °C/(Pa^2)
239  // for the melt-fraction dependence of productivity
243  double E1;
247  double E2;
248 
249  // for the maximum melt fraction of pyroxenite
253  double F_px_max;
254 
255  // the relative density of molten material (compared to solid)
260 
265 
270  virtual
271  double
272  melt_fraction (const double temperature,
273  const double pressure,
274  const std::vector<double> &compositional_fields,
275  const Point<dim> &position) const;
276 
277  virtual
278  double
280  const double pressure,
281  const std::vector<double> &compositional_fields,
282  const Point<dim> &position) const;
283 
284  virtual
285  double
287  const double pressure,
288  const std::vector<double> &compositional_fields,
289  const Point<dim> &position) const;
290 
291  double
293  const double pressure,
294  const std::vector<double> &compositional_fields,
295  const Point<dim> &position,
296  const NonlinearDependence::Dependence dependence) const;
297  };
298 
299  }
300 }
301 
302 #endif
void melt_fractions(const MaterialModel::MaterialModelInputs< dim > &in, std::vector< double > &melt_fractions, const MaterialModel::MaterialModelOutputs< dim > *out=nullptr) const override
virtual double pyroxenite_melt_fraction(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
bool is_compressible() const override
double entropy_derivative(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position, const NonlinearDependence::Dependence dependence) const
void parse_parameters(ParameterHandler &prm) override
void evaluate(const MaterialModel::MaterialModelInputs< dim > &in, MaterialModel::MaterialModelOutputs< dim > &out) const override
virtual double peridotite_melt_fraction(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
static void declare_parameters(ParameterHandler &prm)
virtual double melt_fraction(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const