www.mooseframework.org
TensorMechanicsPlasticMohrCoulombMulti.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
14 
16 
17 template <>
19 
25 {
26 public:
27  static InputParameters validParams();
28 
29  TensorMechanicsPlasticMohrCoulombMulti(const InputParameters & parameters);
30 
32  virtual unsigned int numberSurfaces() const override;
33 
34  virtual void
35  yieldFunctionV(const RankTwoTensor & stress, Real intnl, std::vector<Real> & f) const override;
36 
37  virtual void dyieldFunction_dstressV(const RankTwoTensor & stress,
38  Real intnl,
39  std::vector<RankTwoTensor> & df_dstress) const override;
40 
41  virtual void dyieldFunction_dintnlV(const RankTwoTensor & stress,
42  Real intnl,
43  std::vector<Real> & df_dintnl) const override;
44 
45  virtual void flowPotentialV(const RankTwoTensor & stress,
46  Real intnl,
47  std::vector<RankTwoTensor> & r) const override;
48 
49  virtual void dflowPotential_dstressV(const RankTwoTensor & stress,
50  Real intnl,
51  std::vector<RankFourTensor> & dr_dstress) const override;
52 
53  virtual void dflowPotential_dintnlV(const RankTwoTensor & stress,
54  Real intnl,
55  std::vector<RankTwoTensor> & dr_dintnl) const override;
56 
57  virtual void activeConstraints(const std::vector<Real> & f,
58  const RankTwoTensor & stress,
59  Real intnl,
60  const RankFourTensor & Eijkl,
61  std::vector<bool> & act,
62  RankTwoTensor & returned_stress) const override;
63 
64  virtual std::string modelName() const override;
65 
66  virtual bool useCustomReturnMap() const override;
67 
68  virtual bool returnMap(const RankTwoTensor & trial_stress,
69  Real intnl_old,
70  const RankFourTensor & E_ijkl,
71  Real ep_plastic_tolerance,
72  RankTwoTensor & returned_stress,
73  Real & returned_intnl,
74  std::vector<Real> & dpm,
75  RankTwoTensor & delta_dp,
76  std::vector<Real> & yf,
77  bool & trial_stress_inadmissible) const override;
78 
79 protected:
81  virtual Real cohesion(const Real internal_param) const;
82 
84  virtual Real dcohesion(const Real internal_param) const;
85 
87  virtual Real phi(const Real internal_param) const;
88 
90  virtual Real dphi(const Real internal_param) const;
91 
93  virtual Real psi(const Real internal_param) const;
94 
96  virtual Real dpsi(const Real internal_param) const;
97 
98 private:
101 
104 
107 
109  const unsigned int _max_iters;
110 
112  const Real _shift;
113 
116 
127  Real e0, Real e1, Real e2, Real sinphi, Real cohcos, std::vector<Real> & f) const;
128 
134  void df_dsig(const RankTwoTensor & stress, Real sin_angle, std::vector<RankTwoTensor> & df) const;
135 
143  void perturbStress(const RankTwoTensor & stress,
144  std::vector<Real> & eigvals,
145  std::vector<RankTwoTensor> & deigvals) const;
146 
154  bool KuhnTuckerOK(const std::vector<Real> & yf,
155  const std::vector<Real> & dpm,
156  Real ep_plastic_tolerance) const;
157 
163  bool doReturnMap(const RankTwoTensor & trial_stress,
164  Real intnl_old,
165  const RankFourTensor & E_ijkl,
166  Real ep_plastic_tolerance,
167  RankTwoTensor & returned_stress,
168  Real & returned_intnl,
169  std::vector<Real> & dpm,
170  RankTwoTensor & delta_dp,
171  std::vector<Real> & yf,
172  bool & trial_stress_inadmissible) const;
173 
200  bool returnTip(const std::vector<Real> & eigvals,
201  const std::vector<RealVectorValue> & n,
202  std::vector<Real> & dpm,
203  RankTwoTensor & returned_stress,
204  Real intnl_old,
205  Real & sinphi,
206  Real & cohcos,
207  Real initial_guess,
208  bool & nr_converged,
209  Real ep_plastic_tolerance,
210  std::vector<Real> & yf) const;
211 
234  bool returnPlane(const std::vector<Real> & eigvals,
235  const std::vector<RealVectorValue> & n,
236  std::vector<Real> & dpm,
237  RankTwoTensor & returned_stress,
238  Real intnl_old,
239  Real & sinphi,
240  Real & cohcos,
241  Real initial_guess,
242  bool & nr_converged,
243  Real ep_plastic_tolerance,
244  std::vector<Real> & yf) const;
245 
270  bool returnEdge000101(const std::vector<Real> & eigvals,
271  const std::vector<RealVectorValue> & n,
272  std::vector<Real> & dpm,
273  RankTwoTensor & returned_stress,
274  Real intnl_old,
275  Real & sinphi,
276  Real & cohcos,
277  Real initial_guess,
278  Real mag_E,
279  bool & nr_converged,
280  Real ep_plastic_tolerance,
281  std::vector<Real> & yf) const;
282 
307  bool returnEdge010100(const std::vector<Real> & eigvals,
308  const std::vector<RealVectorValue> & n,
309  std::vector<Real> & dpm,
310  RankTwoTensor & returned_stress,
311  Real intnl_old,
312  Real & sinphi,
313  Real & cohcos,
314  Real initial_guess,
315  Real mag_E,
316  bool & nr_converged,
317  Real ep_plastic_tolerance,
318  std::vector<Real> & yf) const;
319 
321  {
327  };
328 };
TensorMechanicsPlasticMohrCoulombMulti::_max_iters
const unsigned int _max_iters
Maximum Newton-Raphison iterations in the custom returnMap algorithm.
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:109
TensorMechanicsPlasticMohrCoulombMulti
FiniteStrainMohrCoulombMulti implements rate-independent non-associative mohr-coulomb with hardening/...
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:24
TensorMechanicsPlasticMohrCoulombMulti::df_dsig
void df_dsig(const RankTwoTensor &stress, Real sin_angle, std::vector< RankTwoTensor > &df) const
this is exactly dyieldFunction_dstress, or flowPotential, depending on whether sin_angle = sin(phi),...
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:141
TensorMechanicsPlasticMohrCoulombMulti::dpsi
virtual Real dpsi(const Real internal_param) const
d(psi)/d(internal_param) as a function of residual value, rate, and internal_param
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:312
TensorMechanicsPlasticMohrCoulombMulti::modelName
virtual std::string modelName() const override
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:318
TensorMechanicsPlasticMohrCoulombMulti::flowPotentialV
virtual void flowPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &r) const override
The flow potentials.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:192
TensorMechanicsPlasticMohrCoulombMulti::edge000101
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:325
TensorMechanicsPlasticMohrCoulombMulti::tip110100
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:322
TensorMechanicsPlasticMohrCoulombMulti::returnEdge000101
bool returnEdge000101(const std::vector< Real > &eigvals, const std::vector< RealVectorValue > &n, std::vector< Real > &dpm, RankTwoTensor &returned_stress, Real intnl_old, Real &sinphi, Real &cohcos, Real initial_guess, Real mag_E, bool &nr_converged, Real ep_plastic_tolerance, std::vector< Real > &yf) const
Tries to return-map to the MC edge using the n[4] and n[6] directions The return value is true if the...
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:908
TensorMechanicsPlasticMohrCoulombMulti::return_type
return_type
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:320
TensorMechanicsPlasticMohrCoulombMulti::returnPlane
bool returnPlane(const std::vector< Real > &eigvals, const std::vector< RealVectorValue > &n, std::vector< Real > &dpm, RankTwoTensor &returned_stress, Real intnl_old, Real &sinphi, Real &cohcos, Real initial_guess, bool &nr_converged, Real ep_plastic_tolerance, std::vector< Real > &yf) const
Tries to return-map to the MC plane using the n[3] direction The return value is true if the internal...
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:803
TensorMechanicsPlasticMohrCoulombMulti::KuhnTuckerOK
bool KuhnTuckerOK(const std::vector< Real > &yf, const std::vector< Real > &dpm, Real ep_plastic_tolerance) const
Returns true if the Kuhn-Tucker conditions are satisfied.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:1142
TensorMechanicsPlasticMohrCoulombMulti::dflowPotential_dintnlV
virtual void dflowPotential_dintnlV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &dr_dintnl) const override
The derivative of the flow potential with respect to the internal parameter.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:225
TensorMechanicsPlasticMohrCoulombMulti::returnEdge010100
bool returnEdge010100(const std::vector< Real > &eigvals, const std::vector< RealVectorValue > &n, std::vector< Real > &dpm, RankTwoTensor &returned_stress, Real intnl_old, Real &sinphi, Real &cohcos, Real initial_guess, Real mag_E, bool &nr_converged, Real ep_plastic_tolerance, std::vector< Real > &yf) const
Tries to return-map to the MC edge using the n[1] and n[3] directions The return value is true if the...
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:1025
TensorMechanicsPlasticMohrCoulombMulti::dphi
virtual Real dphi(const Real internal_param) const
d(phi)/d(internal_param) as a function of residual value, rate, and internal_param
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:300
TensorMechanicsPlasticMohrCoulombMulti::validParams
static InputParameters validParams()
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:22
validParams< TensorMechanicsPlasticMohrCoulombMulti >
InputParameters validParams< TensorMechanicsPlasticMohrCoulombMulti >()
TensorMechanicsPlasticMohrCoulombMulti::cohesion
virtual Real cohesion(const Real internal_param) const
cohesion as a function of residual value, rate, and internal_param
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:282
TensorMechanicsPlasticMohrCoulombMulti::_cohesion
const TensorMechanicsHardeningModel & _cohesion
Hardening model for cohesion.
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:100
TensorMechanicsPlasticMohrCoulombMulti::_phi
const TensorMechanicsHardeningModel & _phi
Hardening model for phi.
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:103
TensorMechanicsPlasticMohrCoulombMulti::edge010100
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:324
TensorMechanicsPlasticMohrCoulombMulti::_shift
const Real _shift
yield function is shifted by this amount to avoid problems with stress-derivatives at equal eigenvalu...
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:112
TensorMechanicsPlasticMohrCoulombMulti::plane000100
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:326
TensorMechanicsPlasticMohrCoulombMulti::doReturnMap
bool doReturnMap(const RankTwoTensor &trial_stress, Real intnl_old, const RankFourTensor &E_ijkl, Real ep_plastic_tolerance, RankTwoTensor &returned_stress, Real &returned_intnl, std::vector< Real > &dpm, RankTwoTensor &delta_dp, std::vector< Real > &yf, bool &trial_stress_inadmissible) const
See doco for returnMap function.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:360
TensorMechanicsPlasticMohrCoulombMulti::dyieldFunction_dstressV
virtual void dyieldFunction_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &df_dstress) const override
The derivative of yield functions with respect to stress.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:162
TensorMechanicsPlasticMohrCoulombMulti::_psi
const TensorMechanicsHardeningModel & _psi
Hardening model for psi.
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:106
TensorMechanicsPlasticModel.h
TensorMechanicsPlasticMohrCoulombMulti::activeConstraints
virtual void activeConstraints(const std::vector< Real > &f, const RankTwoTensor &stress, Real intnl, const RankFourTensor &Eijkl, std::vector< bool > &act, RankTwoTensor &returned_stress) const override
The active yield surfaces, given a vector of yield functions.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:245
TensorMechanicsPlasticMohrCoulombMulti::dcohesion
virtual Real dcohesion(const Real internal_param) const
d(cohesion)/d(internal_param) as a function of residual value, rate, and internal_param
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:288
TensorMechanicsPlasticMohrCoulombMulti::dflowPotential_dstressV
virtual void dflowPotential_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankFourTensor > &dr_dstress) const override
The derivative of the flow potential with respect to stress.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:201
TensorMechanicsPlasticMohrCoulombMulti::returnMap
virtual bool returnMap(const RankTwoTensor &trial_stress, Real intnl_old, const RankFourTensor &E_ijkl, Real ep_plastic_tolerance, RankTwoTensor &returned_stress, Real &returned_intnl, std::vector< Real > &dpm, RankTwoTensor &delta_dp, std::vector< Real > &yf, bool &trial_stress_inadmissible) const override
Performs a custom return-map.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:324
TensorMechanicsPlasticMohrCoulombMulti::returnTip
bool returnTip(const std::vector< Real > &eigvals, const std::vector< RealVectorValue > &n, std::vector< Real > &dpm, RankTwoTensor &returned_stress, Real intnl_old, Real &sinphi, Real &cohcos, Real initial_guess, bool &nr_converged, Real ep_plastic_tolerance, std::vector< Real > &yf) const
Tries to return-map to the MC tip using the THREE directions given in n, and THREE dpm values are ret...
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:635
TensorMechanicsPlasticMohrCoulombMulti::TensorMechanicsPlasticMohrCoulombMulti
TensorMechanicsPlasticMohrCoulombMulti(const InputParameters &parameters)
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:59
TensorMechanicsPlasticMohrCoulombMulti::tip010101
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:323
RankFourTensorTempl< Real >
TensorMechanicsPlasticModel
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
Definition: TensorMechanicsPlasticModel.h:42
TensorMechanicsPlasticMohrCoulombMulti::psi
virtual Real psi(const Real internal_param) const
psi as a function of residual value, rate, and internal_param
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:306
TensorMechanicsPlasticMohrCoulombMulti::dyieldFunction_dintnlV
virtual void dyieldFunction_dintnlV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &df_dintnl) const override
The derivative of yield functions with respect to the internal parameter.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:170
RankTwoTensorTempl< Real >
TensorMechanicsPlasticMohrCoulombMulti::perturbStress
void perturbStress(const RankTwoTensor &stress, std::vector< Real > &eigvals, std::vector< RankTwoTensor > &deigvals) const
perturbs the stress tensor in the case of almost-equal eigenvalues.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:121
TensorMechanicsPlasticMohrCoulombMulti::numberSurfaces
virtual unsigned int numberSurfaces() const override
The number of yield surfaces for this plasticity model.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:80
TensorMechanicsPlasticMohrCoulombMulti::useCustomReturnMap
virtual bool useCustomReturnMap() const override
Returns false. You will want to override this in your derived class if you write a custom returnMap f...
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:1161
TensorMechanicsPlasticMohrCoulombMulti::yieldFunctionV
virtual void yieldFunctionV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &f) const override
Calculates the yield functions.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:86
TensorMechanicsPlasticMohrCoulombMulti::yieldFunctionEigvals
void yieldFunctionEigvals(Real e0, Real e1, Real e2, Real sinphi, Real cohcos, std::vector< Real > &f) const
Calculates the yield functions given the eigenvalues of stress.
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:103
TensorMechanicsPlasticMohrCoulombMulti::_use_custom_returnMap
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
Definition: TensorMechanicsPlasticMohrCoulombMulti.h:115
TensorMechanicsHardeningModel.h
TensorMechanicsPlasticMohrCoulombMulti::phi
virtual Real phi(const Real internal_param) const
phi as a function of residual value, rate, and internal_param
Definition: TensorMechanicsPlasticMohrCoulombMulti.C:294
TensorMechanicsHardeningModel
Hardening Model base class.
Definition: TensorMechanicsHardeningModel.h:27