ASPECT
grain_size.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2014 - 2024 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 doc/COPYING. If not see
18  <http://www.gnu.org/licenses/>.
19 */
20 
21 
22 #ifndef _aspect_material_model_grain_size_h
23 #define _aspect_material_model_grain_size_h
24 
27 
31 
32 #include <deal.II/matrix_free/fe_point_evaluation.h>
33 
34 #include <array>
35 
36 namespace aspect
37 {
38  namespace MaterialModel
39  {
45  template <int dim>
47  {
48  public:
49  DislocationViscosityOutputs(const unsigned int n_points);
50 
51  std::vector<double> get_nth_output(const unsigned int idx) const override;
52 
58  std::vector<double> dislocation_viscosities;
59 
65  std::vector<double> diffusion_viscosities;
66  };
67 
68 
69 
91  template <int dim>
93  {
94  public:
99  void
100  initialize () override;
101 
110  bool is_compressible () const override;
111 
115  void evaluate(const typename Interface<dim>::MaterialModelInputs &in,
116  typename Interface<dim>::MaterialModelOutputs &out) const override;
117 
125  static
126  void
127  declare_parameters (ParameterHandler &prm);
128 
132  void
133  parse_parameters (ParameterHandler &prm) override;
134 
139  void
140  create_additional_named_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const override;
141 
145  double enthalpy (const double temperature,
146  const double pressure,
147  const std::vector<double> &compositional_fields,
148  const Point<dim> &position) const;
149 
161  std::array<std::pair<double, unsigned int>,2>
162  enthalpy_derivative (const typename Interface<dim>::MaterialModelInputs &in) const;
163 
164  private:
166  double reference_T;
167  double eta;
170 
175 
179  double k_value;
180 
186  std::vector<double> dislocation_creep_exponent;
187  std::vector<double> dislocation_activation_energy;
188  std::vector<double> dislocation_activation_volume;
189  std::vector<double> dislocation_creep_prefactor;
190  std::vector<double> diffusion_creep_exponent;
191  std::vector<double> diffusion_activation_energy;
192  std::vector<double> diffusion_activation_volume;
193  std::vector<double> diffusion_creep_prefactor;
195 
202  double min_eta;
203  double max_eta;
210 
215  double diffusion_viscosity (const double temperature,
216  const double adiabatic_temperature,
217  const double adiabatic_pressure,
218  const double grain_size,
219  const double second_strain_rate_invariant,
220  const unsigned int phase_index) const;
221 
233  double dislocation_viscosity (const double temperature,
234  const double adiabatic_temperature,
235  const double adiabatic_pressure,
236  const SymmetricTensor<2,dim> &strain_rate,
237  const unsigned int phase_index,
238  const double diffusion_viscosity,
239  const double viscosity_guess = 0) const;
240 
241  double density (const double temperature,
242  const double pressure,
243  const std::vector<double> &compositional_fields,
244  const Point<dim> &position) const;
245 
246  double compressibility (const double temperature,
247  const double pressure,
248  const std::vector<double> &compositional_fields,
249  const Point<dim> &position) const;
250 
251  double specific_heat (const double temperature,
252  const double pressure,
253  const std::vector<double> &compositional_fields,
254  const Point<dim> &position) const;
255 
256  double thermal_expansion_coefficient (const double temperature,
257  const double pressure,
258  const std::vector<double> &compositional_fields,
259  const Point<dim> &position) const;
260 
264  double seismic_Vp (const double temperature,
265  const double pressure,
266  const std::vector<double> &compositional_fields,
267  const Point<dim> &position) const;
268 
272  double seismic_Vs (const double temperature,
273  const double pressure,
274  const std::vector<double> &compositional_fields,
275  const Point<dim> &position) const;
276 
277 
286  unsigned int
287  get_phase_index (const MaterialUtilities::PhaseFunctionInputs<dim> &in) const;
288 
289 
293  unsigned int n_phase_transitions;
294 
301  std::shared_ptr<MaterialUtilities::PhaseFunction<dim>> phase_function;
302 
303 
308  std::string datadirectory;
309  std::vector<std::string> material_file_names;
310  std::vector<std::string> derivatives_file_names;
311  unsigned int n_material_data;
315 
316 
321  enum formats
322  {
324  hefesto
325  } material_file_format;
326 
332  std::vector<std::unique_ptr<MaterialModel::MaterialUtilities::Lookup::MaterialLookup>> material_lookup;
333 
340  mutable std::unique_ptr<FEPointEvaluation<1, dim>> temperature_evaluator;
341  mutable std::unique_ptr<FEPointEvaluation<1, dim>> pressure_evaluator;
342 
343  /*
344  * Object for computing plastic stresses, viscosities, and additional outputs,
345  * as well as an object for the required input parameters.
346  */
351 
355  std::unique_ptr<ReactionModel::GrainSizeEvolution<dim>> grain_size_evolution;
356  };
357 
358  }
359 }
360 
361 #endif
std::vector< double > diffusion_activation_volume
Definition: grain_size.h:192
Rheology::DruckerPrager< dim > drucker_prager_plasticity
Definition: grain_size.h:349
std::vector< std::string > material_file_names
Definition: grain_size.h:309
std::unique_ptr< ReactionModel::GrainSizeEvolution< dim > > grain_size_evolution
Definition: grain_size.h:355
std::vector< double > diffusion_creep_exponent
Definition: grain_size.h:190
std::vector< double > dislocation_activation_volume
Definition: grain_size.h:188
std::vector< double > get_nth_output(const unsigned int idx) const override
void declare_parameters(ParameterHandler &prm)
std::vector< std::unique_ptr< MaterialModel::MaterialUtilities::Lookup::MaterialLookup > > material_lookup
Definition: grain_size.h:332
Rheology::DruckerPragerParameters drucker_prager_parameters
Definition: grain_size.h:350
DislocationViscosityOutputs(const unsigned int n_points)
std::vector< double > diffusion_creep_grain_size_exponent
Definition: grain_size.h:194
std::vector< double > diffusion_creep_prefactor
Definition: grain_size.h:193
std::vector< double > dislocation_activation_energy
Definition: grain_size.h:187
unsigned int dislocation_viscosity_iteration_number
Definition: grain_size.h:185
std::vector< double > dislocation_creep_exponent
Definition: grain_size.h:186
Definition: compat.h:59
std::unique_ptr< FEPointEvaluation< 1, dim > > temperature_evaluator
Definition: grain_size.h:340
std::vector< double > diffusion_activation_energy
Definition: grain_size.h:191
std::vector< std::string > derivatives_file_names
Definition: grain_size.h:310
std::unique_ptr< FEPointEvaluation< 1, dim > > pressure_evaluator
Definition: grain_size.h:341
std::shared_ptr< MaterialUtilities::PhaseFunction< dim > > phase_function
Definition: grain_size.h:301
std::vector< double > dislocation_creep_prefactor
Definition: grain_size.h:189