ASPECT
grain_size_evolution.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) 2024-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 #ifndef _aspect_material_model_reaction_model_grain_size_evolution_h
16 #define _aspect_material_model_reaction_model_grain_size_evolution_h
17 
20 
21 namespace aspect
22 {
23  namespace MaterialModel
24  {
25  namespace ReactionModel
26  {
43  template <int dim>
45  {
46  public:
53 
73  void
75  const std::vector<double> &adiabatic_pressure,
76  const std::vector<unsigned int> &phase_indices,
77  const std::function<double(const double,const double,
78  const double,const SymmetricTensor<2,dim> &,const unsigned int,const double, const double)> &dislocation_viscosity,
79  const std::function<double(
80  const double, const double, const double,const double,const double,const unsigned int)> &diffusion_viscosity,
81  const double min_eta,
82  const double max_eta,
83  typename Interface<dim>::MaterialModelOutputs &out) const;
84 
91  void
93 
100  void
102  const typename MaterialModel::MaterialModelOutputs<dim> &out,
103  const std::vector<unsigned int> &phase_indices,
104  const std::vector<double> &dislocation_viscosities,
105  std::vector<std::shared_ptr<MaterialModel::AdditionalMaterialOutputs<dim>>> &additional_outputs) const;
106 
110  static
111  void
113 
117  void
119 
120  private:
126  std::vector<double> grain_growth_activation_energy;
130  std::vector<double> grain_growth_activation_volume;
134  std::vector<double> grain_growth_rate_constant;
138  std::vector<double> grain_growth_exponent;
146  std::vector<double> reciprocal_required_strain;
150  std::vector<double> recrystallized_grain_size;
151 
156  std::vector<double> grain_boundary_energy;
164  std::vector<double> geometric_constant;
165 
170  struct Formulation
171  {
192  enum Kind
193  {
197  };
198 
203  static
204  Kind
205  parse(const std::string &input)
206  {
207  if (input == "paleowattmeter")
209  else if (input == "paleopiezometer")
211  else if (input == "pinned grain damage")
213  else
214  AssertThrow(false, ExcNotImplemented());
215 
216  return Formulation::Kind();
217  }
218  };
219 
226 
233  double compute_partitioning_fraction (const double temperature) const;
234 
251 
263 
273 
283  std::shared_ptr<MaterialUtilities::PhaseFunction<dim>> phase_function;
284 
288  unsigned int n_phase_transitions;
289 
295 
302  };
303  }
304 
305  }
306 }
307 
308 #endif
void create_additional_named_outputs(MaterialModel::MaterialModelOutputs< dim > &out) const
double compute_partitioning_fraction(const double temperature) const
static void declare_parameters(ParameterHandler &prm)
void initialize_phase_function(std::shared_ptr< MaterialUtilities::PhaseFunction< dim >> &phase_function)
std::shared_ptr< MaterialUtilities::PhaseFunction< dim > > phase_function
#define AssertThrow(cond, exc)
static ::ExceptionBase & ExcNotImplemented()
void fill_additional_outputs(const typename MaterialModel::MaterialModelInputs< dim > &in, const typename MaterialModel::MaterialModelOutputs< dim > &out, const std::vector< unsigned int > &phase_indices, const std::vector< double > &dislocation_viscosities, std::vector< std::shared_ptr< MaterialModel::AdditionalMaterialOutputs< dim >>> &additional_outputs) const
void calculate_reaction_terms(const typename Interface< dim >::MaterialModelInputs &in, const std::vector< double > &adiabatic_pressure, const std::vector< unsigned int > &phase_indices, const std::function< double(const double, const double, const double, const SymmetricTensor< 2, dim > &, const unsigned int, const double, const double)> &dislocation_viscosity, const std::function< double(const double, const double, const double, const double, const double, const unsigned int)> &diffusion_viscosity, const double min_eta, const double max_eta, typename Interface< dim >::MaterialModelOutputs &out) const