ASPECT
drucker_prager.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_drucker_prager_h
16 #define _aspect_material_model_rheology_drucker_prager_h
17 
18 #include <aspect/global.h>
20 
23 namespace aspect
24 {
25  namespace MaterialModel
26  {
27  namespace Rheology
28  {
34  {
39 
44 
48  double cohesion;
49 
54 
59 
64  };
65 
66  template <int dim>
68  {
69  public:
70  DruckerPrager();
74  static
75  void
77 
88  void
89  parse_parameters (ParameterHandler &prm,
90  const std::unique_ptr<std::vector<unsigned int>> &expected_n_phases_per_composition = nullptr);
91 
100  compute_drucker_prager_parameters (const unsigned int composition,
101  const std::vector<double> &phase_function_values = {},
102  const std::vector<unsigned int> &n_phase_transitions_per_composition = {}) const;
103 
111  double
112  compute_yield_stress (const double cohesion,
113  const double angle_internal_friction,
114  const double pressure,
115  const double max_yield_stress) const;
116 
127  double
128  compute_yield_stress (const double pressure,
129  const DruckerPragerParameters &p) const;
130 
141  double
142  compute_viscosity (const double cohesion,
143  const double angle_internal_friction,
144  const double pressure,
145  const double effective_strain_rate,
146  const double max_yield_stress,
147  const double non_yielding_viscosity = std::numeric_limits<double>::infinity()) const;
148 
155  double
156  compute_viscosity (const double pressure,
157  const double effective_strain_rate,
158  const DruckerPragerParameters &p,
159  const double non_yielding_viscosity = std::numeric_limits<double>::infinity()) const;
160 
165  std::pair<double, double>
166  compute_strain_rate_and_derivative (const double stress,
167  const double pressure,
168  const DruckerPragerParameters &p) const;
169 
173  double
174  compute_derivative (const double angle_internal_friction,
175  const double effective_strain_rate) const;
176 
186  std::pair<double,double>
187  compute_dilation_terms_for_stokes_system(const DruckerPragerParameters &drucker_prager_parameters,
188  const double non_yielding_viscosity,
189  const double effective_strain_rate) const;
190 
191  private:
192 
204  std::vector<double> angles_internal_friction;
205 
216  std::vector<double> angles_dilation;
217 
222  std::vector<double> cohesions;
223 
228  std::vector<double> yield_stress_prefactors;
229 
234  std::vector<double> max_yield_stresses;
235 
242 
249  };
250  }
251  }
252 }
253 #endif
void declare_parameters(ParameterHandler &prm)
#define DEAL_II_DEPRECATED