ASPECT
latent_heat_melt.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2013 - 2022 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  {
32  using namespace dealii;
33 
41  template <int dim>
44  public ::aspect::SimulatorAccess<dim>
45  {
46  public:
51  void evaluate(const MaterialModel::MaterialModelInputs<dim> &in,
52  MaterialModel::MaterialModelOutputs<dim> &out) const override;
53 
54 
72  bool is_compressible () const override;
77  void melt_fractions (const MaterialModel::MaterialModelInputs<dim> &in,
78  std::vector<double> &melt_fractions) const override;
79 
80 
88  static
89  void
90  declare_parameters (ParameterHandler &prm);
91 
95  void
96  parse_parameters (ParameterHandler &prm) override;
101  private:
103  double reference_T;
104  double eta;
111 
115  double k_value;
116 
118 
123  // for the solidus temperature
124  double A1; // °C
125  double A2; // °C/Pa
126  double A3; // °C/(Pa^2)
127 
128  // for the lherzolite liquidus temperature
129  double B1; // °C
130  double B2; // °C/Pa
131  double B3; // °C/(Pa^2)
132 
133  // for the liquidus temperature
134  double C1; // °C
135  double C2; // °C/Pa
136  double C3; // °C/(Pa^2)
137 
138  // for the reaction coefficient of pyroxene
139  double r1; // cpx/melt
140  double r2; // cpx/melt/GPa
141  double M_cpx; // mass fraction of pyroxene
142 
143  // melt fraction exponent
144  double beta;
145 
146  // entropy change upon melting
148 
153  // for the melting temperature
154  double D1; // °C
155  double D2; // °C/Pa
156  double D3; // °C/(Pa^2)
157  // for the melt-fraction dependence of productivity
158  double E1;
159  double E2;
160 
161  // for the maximum melt fraction of pyroxenite
162  double F_px_max;
163 
164  // the relative density of molten material (compared to solid)
166 
168 
173  virtual
174  double
175  melt_fraction (const double temperature,
176  const double pressure,
177  const std::vector<double> &compositional_fields,
178  const Point<dim> &position) const;
179 
180  virtual
181  double
182  peridotite_melt_fraction (const double temperature,
183  const double pressure,
184  const std::vector<double> &compositional_fields,
185  const Point<dim> &position) const;
186 
187  virtual
188  double
189  pyroxenite_melt_fraction (const double temperature,
190  const double pressure,
191  const std::vector<double> &compositional_fields,
192  const Point<dim> &position) const;
193 
194  double
195  entropy_derivative ( const double temperature,
196  const double pressure,
197  const std::vector<double> &compositional_fields,
198  const Point<dim> &position,
199  const NonlinearDependence::Dependence dependence) const;
200  };
201 
202  }
203 }
204 
205 #endif
void declare_parameters(ParameterHandler &prm)
Definition: compat.h:42