ASPECT
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
89  declare_parameters (ParameterHandler &prm);
90 
94  void
95  parse_parameters (ParameterHandler &prm) override;
100  private:
102  double reference_T;
103  double eta;
110 
114  double k_value;
115 
117 
122  // for the solidus temperature
123  double A1; // °C
124  double A2; // °C/Pa
125  double A3; // °C/(Pa^2)
126 
127  // for the lherzolite liquidus temperature
128  double B1; // °C
129  double B2; // °C/Pa
130  double B3; // °C/(Pa^2)
131 
132  // for the liquidus temperature
133  double C1; // °C
134  double C2; // °C/Pa
135  double C3; // °C/(Pa^2)
136 
137  // for the reaction coefficient of pyroxene
138  double r1; // cpx/melt
139  double r2; // cpx/melt/GPa
140  double M_cpx; // mass fraction of pyroxene
141 
142  // melt fraction exponent
143  double beta;
144 
145  // entropy change upon melting
147 
152  // for the melting temperature
153  double D1; // °C
154  double D2; // °C/Pa
155  double D3; // °C/(Pa^2)
156  // for the melt-fraction dependence of productivity
157  double E1;
158  double E2;
159 
160  // for the maximum melt fraction of pyroxenite
161  double F_px_max;
162 
163  // the relative density of molten material (compared to solid)
165 
167 
172  virtual
173  double
174  melt_fraction (const double temperature,
175  const double pressure,
176  const std::vector<double> &compositional_fields,
177  const Point<dim> &position) const;
178 
179  virtual
180  double
182  const double pressure,
183  const std::vector<double> &compositional_fields,
184  const Point<dim> &position) const;
185 
186  virtual
187  double
189  const double pressure,
190  const std::vector<double> &compositional_fields,
191  const Point<dim> &position) const;
192 
193  double
194  entropy_derivative ( const double temperature,
195  const double pressure,
196  const std::vector<double> &compositional_fields,
197  const Point<dim> &position,
198  const NonlinearDependence::Dependence dependence) const;
199  };
200 
201  }
202 }
203 
204 #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