ASPECT
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 
90  template <int dim>
92  {
93  public:
98  enum class Property
99  {
100  diffusion_viscosity,
101  dislocation_viscosity
102  };
103 
107  ViscosityAdditionalOutputs(const unsigned int n_points,
108  const std::vector<Property> &active_properties);
109 
110  std::vector<double>
111  get_nth_output(const unsigned int idx) const override;
112 
113  private:
118  std::vector<Property> active_properties;
119 
120  public:
127  std::vector<double> diffusion_viscosities;
128 
135  std::vector<double> dislocation_viscosities;
136 
137  };
138 
143  {
147  std::vector<double> composition_viscosities;
148 
152  std::vector<bool> composition_yielding;
153 
157  std::vector<Rheology::DruckerPragerParameters> drucker_prager_parameters;
158 
164  std::vector<double> dilation_lhs_terms;
165 
171  std::vector<double> dilation_rhs_terms;
172 
176  std::vector<double> diffusion_viscosities;
177 
181  std::vector<double> dislocation_viscosities;
182  };
183 
184  namespace Rheology
185  {
186 
187  template <int dim>
189  {
190  public:
194  ViscoPlastic();
195 
205  calculate_isostrain_viscosities ( const MaterialModel::MaterialModelInputs<dim> &in,
206  const unsigned int i,
207  const std::vector<double> &volume_fractions,
208  const std::vector<double> &phase_function_values = std::vector<double>(),
209  const std::vector<unsigned int> &n_phase_transitions_per_composition =
210  std::vector<unsigned int>()) const;
211 
221  void compute_viscosity_derivatives(const unsigned int point_index,
222  const std::vector<double> &volume_fractions,
223  const IsostrainViscosities &isostrain_values,
226  const std::vector<double> &phase_function_values = std::vector<double>(),
227  const std::vector<unsigned int> &n_phase_transitions_per_composition =
228  std::vector<unsigned int>()) const;
229 
236  ComponentMask get_volumetric_composition_mask() const;
237 
241  static
242  void
243  declare_parameters (ParameterHandler &prm);
244 
252  void
253  parse_parameters (ParameterHandler &prm,
254  const std::unique_ptr<std::vector<unsigned int>> &expected_n_phases_per_composition = nullptr);
255 
260  void
261  create_plastic_outputs (MaterialModel::MaterialModelOutputs<dim> &out) const;
262 
268  void fill_plastic_outputs(const unsigned int point_index,
269  const std::vector<double> &volume_fractions,
270  const bool plastic_yielding,
273  const IsostrainViscosities &isostrain_viscosities) const;
277  void
278  create_viscosity_outputs(MaterialModel::MaterialModelOutputs<dim> &out) const;
279 
284  void fill_viscosity_outputs(const unsigned int point_index,
285  const std::vector<double> &volume_fractions,
287  const IsostrainViscosities &isostrain_viscosities) const;
288 
295 
301 
306 
311 
316 
317 
318  private:
319 
326 
333  std::vector<double> minimum_viscosity;
337  std::vector<double> maximum_viscosity;
338 
345  {
350  minimum_diffusion_dislocation
351  };
356 
362  {
364  drucker_prager
365  };
370 
378 
389 
399 
405  std::vector<double> exponents_stress_limiter;
406 
412 
418  std::unique_ptr<Rheology::FrankKamenetskii<dim>> frank_kamenetskii_rheology;
419 
425 
429  std::unique_ptr<Rheology::GrainBoundarySliding<dim>> grain_boundary_sliding_rheology;
430 
437 
441  std::unique_ptr<Rheology::PeierlsCreep<dim>> peierls_creep;
442 
449 
454 
455  /*
456  * Object for computing plastic stresses, viscosities, and additional outputs
457  */
459 
460  };
461  }
462  }
463 }
464 #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