ASPECT
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
visco_plastic.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2020 - 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 LICENSE. If not see
18  <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef _aspect_material_model_rheology_visco_plastic_h
22 #define _aspect_material_model_rheology_visco_plastic_h
23 
24 #include <aspect/global.h>
39 
40 #include<deal.II/fe/component_mask.h>
41 
42 namespace aspect
43 {
44  namespace MaterialModel
45  {
51  template <int dim>
53  {
54  public:
55  PlasticAdditionalOutputs(const unsigned int n_points);
56 
57  std::vector<double> get_nth_output(const unsigned int idx) const override;
58 
64  std::vector<double> cohesions;
65 
71  std::vector<double> friction_angles;
72 
77  std::vector<double> yield_stresses;
78 
83  std::vector<double> yielding;
84 
85  };
86 
91  {
95  std::vector<double> composition_viscosities;
96 
100  std::vector<bool> composition_yielding;
101 
105  std::vector<Rheology::DruckerPragerParameters> drucker_prager_parameters;
106 
112  std::vector<double> dilation_lhs_terms;
113 
119  std::vector<double> dilation_rhs_terms;
120  };
121 
122  namespace Rheology
123  {
124 
125  template <int dim>
127  {
128  public:
132  ViscoPlastic();
133 
143  calculate_isostrain_viscosities ( const MaterialModel::MaterialModelInputs<dim> &in,
144  const unsigned int i,
145  const std::vector<double> &volume_fractions,
146  const std::vector<double> &phase_function_values = std::vector<double>(),
147  const std::vector<unsigned int> &n_phase_transitions_per_composition =
148  std::vector<unsigned int>()) const;
149 
159  void compute_viscosity_derivatives(const unsigned int point_index,
160  const std::vector<double> &volume_fractions,
161  const IsostrainViscosities &isostrain_values,
164  const std::vector<double> &phase_function_values = std::vector<double>(),
165  const std::vector<unsigned int> &n_phase_transitions_per_composition =
166  std::vector<unsigned int>()) const;
167 
174  ComponentMask get_volumetric_composition_mask() const;
175 
179  static
180  void
181  declare_parameters (ParameterHandler &prm);
182 
190  void
191  parse_parameters (ParameterHandler &prm,
192  const std::unique_ptr<std::vector<unsigned int>> &expected_n_phases_per_composition = nullptr);
193 
198  void
199  create_plastic_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const;
200 
206  void fill_plastic_outputs(const unsigned int point_index,
207  const std::vector<double> &volume_fractions,
208  const bool plastic_yielding,
211  const IsostrainViscosities &isostrain_viscosities) const;
212 
217 
222 
227 
232 
237 
238 
239  private:
240 
246 
252  std::vector<double> minimum_viscosity;
253  std::vector<double> maximum_viscosity;
254 
261  {
266  minimum_diffusion_dislocation
267  } viscous_flow_law;
268 
274  {
276  drucker_prager
277  } yield_mechanism;
278 
285 
295 
304 
309  std::vector<double> exponents_stress_limiter;
310 
315 
321  std::unique_ptr<Rheology::FrankKamenetskii<dim>> frank_kamenetskii_rheology;
322 
327 
331  std::unique_ptr<Rheology::GrainBoundarySliding<dim>> grain_boundary_sliding_rheology;
332 
337 
341  std::unique_ptr<Rheology::PeierlsCreep<dim>> peierls_creep;
342 
349 
354 
355  /*
356  * Object for computing plastic stresses, viscosities, and additional outputs
357  */
359 
360  };
361  }
362  }
363 }
364 #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