ASPECT
drucker_prager_power.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_power_h
16 #define _aspect_material_model_rheology_drucker_prager_power_h
17 
18 #include <aspect/global.h>
20 
24 
25 namespace aspect
26 {
27  namespace MaterialModel
28  {
29  namespace Rheology
30  {
31 
32  template <int dim>
34  {
48  public:
50 
54  static
55  void
57 
68  void
70  const std::unique_ptr<std::vector<unsigned int>> &expected_n_phases_per_composition = nullptr);
71 
80  compute_drucker_prager_parameters (const unsigned int composition,
81  const std::vector<double> &phase_function_values = {},
82  const std::vector<unsigned int> &n_phase_transitions_per_composition = {}) const;
83 
87  double
88  compute_yield_stress (const double cohesion,
89  const double angle_internal_friction,
90  const double pressure,
91  const double max_yield_stress) const;
92 
96  double
97  compute_viscosity (const double cohesion,
98  const double angle_internal_friction,
99  const double pressure,
100  const double effective_strain_rate,
101  const double max_yield_stress) const;
102 
107  std::pair<double, double>
108  compute_strain_rate_and_derivative (const double stress,
109  const double pressure,
110  const DruckerPragerParameters &p) const;
111 
116  std::pair<double, double>
117  compute_log_strain_rate_and_derivative (const double log_stress,
118  const double pressure,
119  const DruckerPragerParameters &p) const;
120 
121  private:
128  std::vector<double> angles_internal_friction;
129 
134  std::vector<double> cohesions;
135 
141 
148 
154 
161 
162  };
163  }
164  }
165 }
166 #endif
std::pair< double, double > compute_log_strain_rate_and_derivative(const double log_stress, const double pressure, const DruckerPragerParameters &p) const
const DruckerPragerParameters compute_drucker_prager_parameters(const unsigned int composition, const std::vector< double > &phase_function_values={}, const std::vector< unsigned int > &n_phase_transitions_per_composition={}) const
double compute_viscosity(const double cohesion, const double angle_internal_friction, const double pressure, const double effective_strain_rate, const double max_yield_stress) const
double compute_yield_stress(const double cohesion, const double angle_internal_friction, const double pressure, const double max_yield_stress) const
static void declare_parameters(ParameterHandler &prm)
void parse_parameters(ParameterHandler &prm, const std::unique_ptr< std::vector< unsigned int >> &expected_n_phases_per_composition=nullptr)
std::pair< double, double > compute_strain_rate_and_derivative(const double stress, const double pressure, const DruckerPragerParameters &p) const