ASPECT
visco_plastic.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) 2020-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_visco_plastic_h
16 #define _aspect_material_model_rheology_visco_plastic_h
17 
18 #include <aspect/global.h>
33 
35 
36 namespace aspect
37 {
38  namespace MaterialModel
39  {
45  template <int dim>
47  {
48  public:
49  PlasticAdditionalOutputs(const unsigned int n_points);
50 
51  std::vector<double> get_nth_output(const unsigned int idx) const override;
52 
58  std::vector<double> cohesions;
59 
65  std::vector<double> friction_angles;
66 
71  std::vector<double> yield_stresses;
72 
77  std::vector<double> yielding;
78 
79  };
80 
84  template <int dim>
86  {
87  public:
92  enum class Property
93  {
94  diffusion_viscosity,
95  dislocation_viscosity
96  };
97 
101  ViscosityAdditionalOutputs(const unsigned int n_points,
102  const std::vector<Property> &active_properties);
103 
104  std::vector<double>
105  get_nth_output(const unsigned int idx) const override;
106 
107  private:
112  std::vector<Property> active_properties;
113 
114  public:
121  std::vector<double> diffusion_viscosities;
122 
129  std::vector<double> dislocation_viscosities;
130 
131  };
132 
137  {
141  std::vector<double> composition_viscosities;
142 
146  std::vector<bool> composition_yielding;
147 
151  std::vector<Rheology::DruckerPragerParameters> drucker_prager_parameters;
152 
158  std::vector<double> dilation_lhs_terms;
159 
165  std::vector<double> dilation_rhs_terms;
166 
170  std::vector<double> diffusion_viscosities;
171 
175  std::vector<double> dislocation_viscosities;
176  };
177 
178  namespace Rheology
179  {
180 
181  template <int dim>
183  {
184  public:
188  ViscoPlastic();
189 
199  calculate_isostrain_viscosities ( const MaterialModel::MaterialModelInputs<dim> &in,
200  const unsigned int i,
201  const std::vector<double> &volume_fractions,
202  const std::vector<double> &phase_function_values = {},
203  const std::vector<unsigned int> &n_phase_transitions_per_composition =
204  std::vector<unsigned int>()) const;
205 
215  void compute_viscosity_derivatives(const unsigned int point_index,
216  const std::vector<double> &volume_fractions,
217  const IsostrainViscosities &isostrain_values,
220  const std::vector<double> &phase_function_values = {},
221  const std::vector<unsigned int> &n_phase_transitions_per_composition =
222  std::vector<unsigned int>()) const;
223 
230  ComponentMask get_volumetric_composition_mask() const;
231 
235  static
236  void
238 
246  void
247  parse_parameters (ParameterHandler &prm,
248  const std::unique_ptr<std::vector<unsigned int>> &expected_n_phases_per_composition = nullptr);
249 
254  void
255  create_plastic_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const;
256 
262  void fill_plastic_outputs(const unsigned int point_index,
263  const std::vector<double> &volume_fractions,
264  const bool plastic_yielding,
267  const IsostrainViscosities &isostrain_viscosities) const;
271  void
272  create_viscosity_outputs(MaterialModel::MaterialModelOutputs<dim> &out) const;
273 
278  void fill_viscosity_outputs(const unsigned int point_index,
279  const std::vector<double> &volume_fractions,
281  const IsostrainViscosities &isostrain_viscosities) const;
282 
289 
295 
300 
305 
310 
311 
312  private:
313 
320 
327  std::vector<double> minimum_viscosity;
331  std::vector<double> maximum_viscosity;
332 
339  {
344  minimum_diffusion_dislocation
345  };
350 
356  {
358  drucker_prager
359  };
364 
372 
383 
393 
399  std::vector<double> exponents_stress_limiter;
400 
406 
412  std::unique_ptr<Rheology::FrankKamenetskii<dim>> frank_kamenetskii_rheology;
413 
419 
423  std::unique_ptr<Rheology::GrainBoundarySliding<dim>> grain_boundary_sliding_rheology;
424 
431 
435  std::unique_ptr<Rheology::PeierlsCreep<dim>> peierls_creep;
436 
443 
448 
449  /*
450  * Object for computing plastic stresses, viscosities, and additional outputs
451  */
453 
454  };
455  }
456  }
457 }
458 #endif
MaterialUtilities::CompositionalAveragingOperation viscosity_averaging
Rheology::FrictionModels< dim > friction_models
std::unique_ptr< Rheology::FrankKamenetskii< dim > > frank_kamenetskii_rheology
Rheology::DruckerPrager< dim > drucker_prager_plasticity
std::vector< Rheology::DruckerPragerParameters > drucker_prager_parameters
void declare_parameters(ParameterHandler &prm)
Rheology::ConstantViscosityPrefactors< dim > constant_viscosity_prefactors
Rheology::DislocationCreep< dim > dislocation_creep
PlasticAdditionalOutputs(const unsigned int n_points)
Rheology::CompositionalViscosityPrefactors< dim > compositional_viscosity_prefactors
Rheology::StrainDependent< dim > strain_rheology
Rheology::DiffusionCreep< dim > diffusion_creep
std::unique_ptr< Rheology::PeierlsCreep< dim > > peierls_creep
std::unique_ptr< Rheology::GrainBoundarySliding< dim > > grain_boundary_sliding_rheology
Rheology::Elasticity< dim > elastic_rheology
std::vector< double > get_nth_output(const unsigned int idx) const override