ASPECT
reactive_fluid_transport.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 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_reactive_fluid_transport_h
22 #define _aspect_material_model_reactive_fluid_transport_h
23 
26 #include <aspect/melt.h>
27 #include <aspect/utilities.h>
29 
30 #include <aspect/melt.h>
31 #include <aspect/utilities.h>
34 
35 
36 
37 namespace aspect
38 {
39  namespace MaterialModel
40  {
41  using namespace dealii;
49  template <int dim>
51  {
52  public:
58  bool is_compressible () const override;
59 
64  virtual double reference_darcy_coefficient () const override;
65 
66 
75  std::vector<double> tian_equilibrium_bound_water_content(const MaterialModel::MaterialModelInputs<dim> &in,
76  unsigned int q) const;
77 
87  virtual void melt_fractions (const MaterialModel::MaterialModelInputs<dim> &in,
88  std::vector<double> &melt_fractions) const override;
89 
94  void
95  initialize () override;
96 
100  void update() override;
101 
105  void
106  evaluate (const typename Interface<dim>::MaterialModelInputs &in,
107  typename Interface<dim>::MaterialModelOutputs &out) const override;
108 
112  static void
113  declare_parameters (ParameterHandler &prm);
114 
118  void
119  parse_parameters (ParameterHandler &prm) override;
120 
125  virtual
126  void
127  create_additional_named_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const override;
128 
129  private:
130 
134  std::unique_ptr<MaterialModel::Interface<dim>> base_model;
135 
136  // Variables that describe the properties of the fluid, i.e. its density,
137  // viscosity, and compressibility.
138  // Properties of the solid are defined in the base model.
140  double eta_f;
142 
143  // Material properties governing the transport of the fluid with respect
144  // to the solid, i.e., the bulk viscosity (relative to the shear viscosity),
145  // the permeability, and how much the solid viscosity changes in the presence
146  // of fluids.
151  double alpha_phi;
152  double reference_T;
153 
154  // Time scale for fluid release and absorption.
156 
157  // The maximum water content for each of the 4 rock types in the tian approximation
158  // method. These are important for keeping the polynomial bounded within reasonable
159  // values.
164 
165  // The following coefficients are taken from a publication from Tian et al., 2019, and can be found
166  // in Table 3 (Gabbro), Table B1 (MORB), Table B2 (Sediments) and Table B3 (peridotite).
167  // LR refers to the effective enthalpy change for devolatilization reactions,
168  // csat is the saturated mass fraction of water in the solid, and Td is the
169  // onset temperature of devolatilization for water.
170  std::vector<double> LR_peridotite_poly_coeffs {-19.0609, 168.983, -630.032, 1281.84, -1543.14, 1111.88, -459.142, 95.4143, 1.97246};
171  std::vector<double> csat_peridotite_poly_coeffs {0.00115628, 2.42179};
172  std::vector<double> Td_peridotite_poly_coeffs {-15.4627, 94.9716, 636.603};
173 
174  std::vector<double> LR_gabbro_poly_coeffs {-1.81745, 7.67198, -10.8507, 5.09329, 8.14519};
175  std::vector<double> csat_gabbro_poly_coeffs {-0.0176673, 0.0893044, 1.52732};
176  std::vector<double> Td_gabbro_poly_coeffs {-1.72277, 20.5898, 637.517};
177 
178  std::vector<double> LR_MORB_poly_coeffs {-1.78177, 7.50871, -10.4840, 5.19725, 7.96365};
179  std::vector<double> csat_MORB_poly_coeffs {0.0102725, -0.115390, 0.324452, 1.41588};
180  std::vector<double> Td_MORB_poly_coeffs {-3.81280, 22.7809, 638.049};
181 
182  std::vector<double> LR_sediment_poly_coeffs {-2.03283, 10.8186, -21.2119, 18.3351, -6.48711, 8.32459};
183  std::vector<double> csat_sediment_poly_coeffs {-0.150662, 0.301807, 1.01867};
184  std::vector<double> Td_sediment_poly_coeffs {2.83277, -24.7593, 85.9090, 524.898};
185 
186  // The polynomials breakdown above certain pressures, 10 GPa for peridotite, 26 GPa for gabbro, 16 GPa for MORB,
187  // and 50 GPa for sediment. These cutoff pressures were determined by extending the pressure range in Tian et al. (2019)
188  // and observing where the maximum allowed water contents jump towards infinite values.
189  const std::vector<double> pressure_cutoffs {10, 26, 16, 50};
190 
191  std::vector<std::vector<double>> devolatilization_enthalpy_changes {LR_peridotite_poly_coeffs, LR_gabbro_poly_coeffs, \
192  LR_MORB_poly_coeffs, LR_sediment_poly_coeffs
193  };
194 
195  std::vector<std::vector<double>> water_mass_fractions {csat_peridotite_poly_coeffs, csat_gabbro_poly_coeffs, \
196  csat_MORB_poly_coeffs, csat_sediment_poly_coeffs
197  };
198 
199  std::vector<std::vector<double>> devolatilization_onset_temperatures {Td_peridotite_poly_coeffs, Td_gabbro_poly_coeffs, \
200  Td_MORB_poly_coeffs, Td_sediment_poly_coeffs
201  };
202 
203  /*
204  * Object for computing Katz 2003 melt parameters
205  */
207 
251  {
255  katz2003
256  }
257  fluid_solid_reaction_scheme;
258  };
259  }
260 }
261 
262 #endif
std::unique_ptr< MaterialModel::Interface< dim > > base_model
void declare_parameters(ParameterHandler &prm)
Definition: compat.h:59
ReactionModel::Katz2003MantleMelting< dim > katz2003_model
Definition: compat.h:42