ASPECT
elasticity.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) 2019-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_rheology_elasticity_h
16 #define _aspect_material_model_rheology_elasticity_h
17 
18 #include <aspect/global.h>
21 
23 
24 namespace aspect
25 {
26  namespace MaterialModel
27  {
33  template <int dim>
35  {
36  public:
37  explicit ElasticAdditionalOutputs(const unsigned int n_points);
38 
39  std::vector<double> get_nth_output(const unsigned int idx) const override;
40 
48  std::vector<double> elastic_shear_moduli;
49 
55  std::vector<double> elastic_viscosity;
56 
63  std::vector<SymmetricTensor<2,dim>> deviatoric_stress;
64  };
65 
66 
67 
68  namespace Rheology
69  {
70  template <int dim>
72  {
73  public:
77  static
78  void
80 
84  void
85  parse_parameters (ParameterHandler &prm);
86 
92  void
93  create_elastic_additional_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const;
94 
115  void
116  fill_elastic_outputs (const MaterialModel::MaterialModelInputs<dim> &in,
117  const std::vector<double> &average_elastic_shear_moduli,
119 
139  void
140  fill_elastic_additional_outputs (const MaterialModel::MaterialModelInputs<dim> &in,
141  const std::vector<double> &average_elastic_shear_moduli,
143 
163  void
164  fill_reaction_outputs (const MaterialModel::MaterialModelInputs<dim> &in,
165  const std::vector<double> &average_elastic_shear_moduli,
167 
181  void
182  fill_reaction_rates (const MaterialModel::MaterialModelInputs<dim> &in,
183  const std::vector<double> &average_elastic_shear_moduli,
185 
190  const std::vector<double> &
191  get_elastic_shear_moduli () const;
192 
197  double
198  calculate_elastic_viscosity (const double shear_modulus) const;
199 
204  double
205  calculate_viscoelastic_viscosity (const double viscosity,
206  const double shear_modulus) const;
207 
226  calculate_viscoelastic_strain_rate (const SymmetricTensor<2,dim> &strain_rate,
227  const SymmetricTensor<2, dim> &stress_0_advected,
228  const SymmetricTensor<2, dim> &stress_old,
229  const double viscosity_pre_yield,
230  const double shear_modulus) const;
231 
239  bool
240  require_unrotated_viscoelastic_stress() const;
241 
245  double
246  elastic_timestep () const;
247 
252  double
253  calculate_timestep_ratio() const;
254 
255  private:
264  std::vector<SymmetricTensor<2, dim>>
265  retrieve_stress_previous_timestep (const MaterialModel::MaterialModelInputs<dim> &in,
266  const std::vector<Point<dim>> &quadrature_positions) const;
267 
274 
278  std::vector<double> elastic_shear_moduli;
279 
288 
294 
305 
312  mutable std::unique_ptr<FEPointEvaluation<dim, dim>> evaluator;
313  static constexpr unsigned int n_independent_components = SymmetricTensor<2, dim>::n_independent_components;
314  mutable std::unique_ptr<FEPointEvaluation<n_independent_components, dim>> evaluator_composition;
315 
316  };
317  }
318  }
319 }
320 #endif
std::vector< double > elastic_shear_moduli
Definition: elasticity.h:278
void declare_parameters(ParameterHandler &prm)
std::unique_ptr< FEPointEvaluation< n_independent_components, dim > > evaluator_composition
Definition: elasticity.h:314
std::unique_ptr< FEPointEvaluation< dim, dim > > evaluator
Definition: elasticity.h:312
std::vector< SymmetricTensor< 2, dim > > deviatoric_stress
Definition: elasticity.h:63
std::vector< double > get_nth_output(const unsigned int idx) const override
ElasticAdditionalOutputs(const unsigned int n_points)