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 
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 
116  typename Interface<dim>::MaterialModelOutputs &out) const override;
117 
125  static
126  void
128 
132  void
134 
139  void
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>
163 
164  private:
172  double reference_T;
176  double eta;
185 
192 
197  double k_value;
198 
211  std::vector<double> dislocation_creep_exponent;
215  std::vector<double> dislocation_activation_energy;
219  std::vector<double> dislocation_activation_volume;
223  std::vector<double> dislocation_creep_prefactor;
227  std::vector<double> diffusion_creep_exponent;
231  std::vector<double> diffusion_activation_energy;
235  std::vector<double> diffusion_activation_volume;
239  std::vector<double> diffusion_creep_prefactor;
244 
255  double min_eta;
259  double max_eta;
284 
289  double diffusion_viscosity (const double temperature,
290  const double adiabatic_temperature,
291  const double adiabatic_pressure,
292  const double grain_size,
293  const double second_strain_rate_invariant,
294  const unsigned int phase_index) const;
295 
307  double dislocation_viscosity (const double temperature,
308  const double adiabatic_temperature,
309  const double adiabatic_pressure,
311  const unsigned int phase_index,
312  const double diffusion_viscosity,
313  const double viscosity_guess = 0) const;
314 
315  double density (const double temperature,
316  const double pressure,
317  const std::vector<double> &compositional_fields,
318  const Point<dim> &position) const;
319 
320  double compressibility (const double temperature,
321  const double pressure,
322  const std::vector<double> &compositional_fields,
323  const Point<dim> &position) const;
324 
325  double specific_heat (const double temperature,
326  const double pressure,
327  const std::vector<double> &compositional_fields,
328  const Point<dim> &position) const;
329 
331  const double pressure,
332  const std::vector<double> &compositional_fields,
333  const Point<dim> &position) const;
334 
338  double seismic_Vp (const double temperature,
339  const double pressure,
340  const std::vector<double> &compositional_fields,
341  const Point<dim> &position) const;
342 
346  double seismic_Vs (const double temperature,
347  const double pressure,
348  const std::vector<double> &compositional_fields,
349  const Point<dim> &position) const;
350 
351 
360  unsigned int
362 
363 
371  std::vector<unsigned int> n_phase_transitions;
372 
379  std::shared_ptr<MaterialUtilities::PhaseFunction<dim>> phase_function;
380 
381 
387  std::string datadirectory;
391  std::vector<std::string> material_file_names;
395  std::vector<std::string> derivatives_file_names;
396  unsigned int n_material_data;
409 
410 
415  enum formats
416  {
418  hefesto
419  };
424 
430  std::vector<std::unique_ptr<MaterialModel::MaterialUtilities::Lookup::MaterialLookup>> material_lookup;
431 
438  mutable std::unique_ptr<FEPointEvaluation<1, dim>> temperature_evaluator;
439  mutable std::unique_ptr<FEPointEvaluation<1, dim>> pressure_evaluator;
440 
441  /*
442  * Object for computing plastic stresses, viscosities, and additional outputs,
443  * as well as an object for the required input parameters.
444  *
445  * This variable is read from the parameter file through a parameter called 'Use Drucker-Prager rheology'.
446  */
454 
458  std::unique_ptr<ReactionModel::GrainSizeEvolution<dim>> grain_size_evolution;
459  };
460 
461  }
462 }
463 
464 #endif
DislocationViscosityOutputs(const unsigned int n_points)
std::vector< double > get_nth_output(const unsigned int idx) const override
std::vector< double > dislocation_creep_exponent
Definition: grain_size.h:211
double specific_heat(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
std::vector< double > dislocation_activation_energy
Definition: grain_size.h:215
static void declare_parameters(ParameterHandler &prm)
double density(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
std::vector< double > diffusion_activation_energy
Definition: grain_size.h:231
unsigned int dislocation_viscosity_iteration_number
Definition: grain_size.h:207
unsigned int get_phase_index(const MaterialUtilities::PhaseFunctionInputs< dim > &in) const
std::vector< std::string > material_file_names
Definition: grain_size.h:391
std::vector< double > dislocation_creep_prefactor
Definition: grain_size.h:223
double seismic_Vs(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
double seismic_Vp(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
std::vector< double > diffusion_creep_prefactor
Definition: grain_size.h:239
std::vector< double > diffusion_creep_exponent
Definition: grain_size.h:227
std::vector< double > diffusion_creep_grain_size_exponent
Definition: grain_size.h:243
std::vector< std::unique_ptr< MaterialModel::MaterialUtilities::Lookup::MaterialLookup > > material_lookup
Definition: grain_size.h:430
double compressibility(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
Rheology::DruckerPragerParameters drucker_prager_parameters
Definition: grain_size.h:453
double dislocation_viscosity(const double temperature, const double adiabatic_temperature, const double adiabatic_pressure, const SymmetricTensor< 2, dim > &strain_rate, const unsigned int phase_index, const double diffusion_viscosity, const double viscosity_guess=0) const
std::shared_ptr< MaterialUtilities::PhaseFunction< dim > > phase_function
Definition: grain_size.h:379
std::unique_ptr< FEPointEvaluation< 1, dim > > pressure_evaluator
Definition: grain_size.h:439
void create_additional_named_outputs(MaterialModel::MaterialModelOutputs< dim > &out) const override
double diffusion_viscosity(const double temperature, const double adiabatic_temperature, const double adiabatic_pressure, const double grain_size, const double second_strain_rate_invariant, const unsigned int phase_index) const
bool is_compressible() const override
double enthalpy(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const
std::vector< double > diffusion_activation_volume
Definition: grain_size.h:235
std::vector< unsigned int > n_phase_transitions
Definition: grain_size.h:371
void parse_parameters(ParameterHandler &prm) override
std::unique_ptr< ReactionModel::GrainSizeEvolution< dim > > grain_size_evolution
Definition: grain_size.h:458
std::vector< double > dislocation_activation_volume
Definition: grain_size.h:219
void evaluate(const typename Interface< dim >::MaterialModelInputs &in, typename Interface< dim >::MaterialModelOutputs &out) const override
std::vector< std::string > derivatives_file_names
Definition: grain_size.h:395
std::array< std::pair< double, unsigned int >, 2 > enthalpy_derivative(const typename Interface< dim >::MaterialModelInputs &in) const
Rheology::DruckerPrager< dim > drucker_prager_plasticity
Definition: grain_size.h:452
std::unique_ptr< FEPointEvaluation< 1, dim > > temperature_evaluator
Definition: grain_size.h:438
double thermal_expansion_coefficient(const double temperature, const double pressure, const std::vector< double > &compositional_fields, const Point< dim > &position) const