ASPECT
grain_size.h
Go to the documentation of this file.
1 // ------------------------------------------------------
2 //
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 //
5 // SPDX-FileCopyrightText: Copyright (C) 2014-2026 by the ASPECT authors.
6 //
7 // This file is part of ASPECT.
8 //
9 // Detailed license information governing the source code and
10 // contributions can be found in the folder LICENSES and in
11 // LICENSE and CONTRIBUTING.md at the top level directory.
12 //
13 // ------------------------------------------------------
14 
15 
16 #ifndef _aspect_material_model_grain_size_h
17 #define _aspect_material_model_grain_size_h
18 
21 
25 
27 
28 #include <array>
29 
30 namespace aspect
31 {
32  namespace MaterialModel
33  {
39  template <int dim>
41  {
42  public:
43  DislocationViscosityOutputs(const unsigned int n_points);
44 
45  std::vector<double> get_nth_output(const unsigned int idx) const override;
46 
52  std::vector<double> dislocation_viscosities;
53 
59  std::vector<double> diffusion_viscosities;
60  };
61 
62 
63 
85  template <int dim>
87  {
88  public:
93  void
94  initialize () override;
95 
104  bool is_compressible () const override;
105 
109  void evaluate(const typename Interface<dim>::MaterialModelInputs &in,
110  typename Interface<dim>::MaterialModelOutputs &out) const override;
111 
119  static
120  void
122 
126  void
127  parse_parameters (ParameterHandler &prm) override;
128 
133  void
134  create_additional_named_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const override;
135 
139  double enthalpy (const double temperature,
140  const double pressure,
141  const std::vector<double> &compositional_fields,
142  const Point<dim> &position) const;
143 
155  std::array<std::pair<double, unsigned int>,2>
156  enthalpy_derivative (const typename Interface<dim>::MaterialModelInputs &in) const;
157 
158  private:
166  double reference_T;
170  double eta;
179 
186 
191  double k_value;
192 
205  std::vector<double> dislocation_creep_exponent;
209  std::vector<double> dislocation_activation_energy;
213  std::vector<double> dislocation_activation_volume;
217  std::vector<double> dislocation_creep_prefactor;
221  std::vector<double> diffusion_creep_exponent;
225  std::vector<double> diffusion_activation_energy;
229  std::vector<double> diffusion_activation_volume;
233  std::vector<double> diffusion_creep_prefactor;
238 
249  double min_eta;
253  double max_eta;
278 
283  double diffusion_viscosity (const double temperature,
284  const double adiabatic_temperature,
285  const double adiabatic_pressure,
286  const double grain_size,
287  const double second_strain_rate_invariant,
288  const unsigned int phase_index) const;
289 
301  double dislocation_viscosity (const double temperature,
302  const double adiabatic_temperature,
303  const double adiabatic_pressure,
305  const unsigned int phase_index,
306  const double diffusion_viscosity,
307  const double viscosity_guess = 0) const;
308 
309  double density (const double temperature,
310  const double pressure,
311  const std::vector<double> &compositional_fields,
312  const Point<dim> &position) const;
313 
314  double compressibility (const double temperature,
315  const double pressure,
316  const std::vector<double> &compositional_fields,
317  const Point<dim> &position) const;
318 
319  double specific_heat (const double temperature,
320  const double pressure,
321  const std::vector<double> &compositional_fields,
322  const Point<dim> &position) const;
323 
324  double thermal_expansion_coefficient (const double temperature,
325  const double pressure,
326  const std::vector<double> &compositional_fields,
327  const Point<dim> &position) const;
328 
332  double seismic_Vp (const double temperature,
333  const double pressure,
334  const std::vector<double> &compositional_fields,
335  const Point<dim> &position) const;
336 
340  double seismic_Vs (const double temperature,
341  const double pressure,
342  const std::vector<double> &compositional_fields,
343  const Point<dim> &position) const;
344 
345 
354  unsigned int
355  get_phase_index (const MaterialUtilities::PhaseFunctionInputs<dim> &in) const;
356 
357 
365  std::vector<unsigned int> n_phase_transitions;
366 
373  std::shared_ptr<MaterialUtilities::PhaseFunction<dim>> phase_function;
374 
375 
381  std::string datadirectory;
385  std::vector<std::string> material_file_names;
389  std::vector<std::string> derivatives_file_names;
390  unsigned int n_material_data;
403 
404 
409  enum formats
410  {
412  hefesto
413  };
418 
424  std::vector<std::unique_ptr<MaterialModel::MaterialUtilities::Lookup::MaterialLookup>> material_lookup;
425 
432  mutable std::unique_ptr<FEPointEvaluation<1, dim>> temperature_evaluator;
433  mutable std::unique_ptr<FEPointEvaluation<1, dim>> pressure_evaluator;
434 
435  /*
436  * Object for computing plastic stresses, viscosities, and additional outputs,
437  * as well as an object for the required input parameters.
438  *
439  * This variable is read from the parameter file through a parameter called 'Use Drucker-Prager rheology'.
440  */
448 
452  std::unique_ptr<ReactionModel::GrainSizeEvolution<dim>> grain_size_evolution;
453  };
454 
455  }
456 }
457 
458 #endif
std::vector< double > diffusion_activation_volume
Definition: grain_size.h:229
Rheology::DruckerPrager< dim > drucker_prager_plasticity
Definition: grain_size.h:446
std::vector< std::string > material_file_names
Definition: grain_size.h:385
std::unique_ptr< ReactionModel::GrainSizeEvolution< dim > > grain_size_evolution
Definition: grain_size.h:452
std::vector< double > diffusion_creep_exponent
Definition: grain_size.h:221
std::vector< double > dislocation_activation_volume
Definition: grain_size.h:213
std::vector< unsigned int > n_phase_transitions
Definition: grain_size.h:365
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:424
Rheology::DruckerPragerParameters drucker_prager_parameters
Definition: grain_size.h:447
DislocationViscosityOutputs(const unsigned int n_points)
std::vector< double > diffusion_creep_grain_size_exponent
Definition: grain_size.h:237
std::vector< double > diffusion_creep_prefactor
Definition: grain_size.h:233
std::vector< double > dislocation_activation_energy
Definition: grain_size.h:209
unsigned int dislocation_viscosity_iteration_number
Definition: grain_size.h:201
std::vector< double > dislocation_creep_exponent
Definition: grain_size.h:205
std::unique_ptr< FEPointEvaluation< 1, dim > > temperature_evaluator
Definition: grain_size.h:432
std::vector< double > diffusion_activation_energy
Definition: grain_size.h:225
std::vector< std::string > derivatives_file_names
Definition: grain_size.h:389
std::unique_ptr< FEPointEvaluation< 1, dim > > pressure_evaluator
Definition: grain_size.h:433
std::shared_ptr< MaterialUtilities::PhaseFunction< dim > > phase_function
Definition: grain_size.h:373
std::vector< double > dislocation_creep_prefactor
Definition: grain_size.h:217