www.mooseframework.org
TensorMechanicsPlasticMohrCoulombMulti.h
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
7 #ifndef TENSORMECHANICSPLASTICMOHRCOULOMBMULTI_H
8 #define TENSORMECHANICSPLASTICMOHRCOULOMBMULTI_H
9 
12 
14 
15 template <>
17 
23 {
24 public:
25  TensorMechanicsPlasticMohrCoulombMulti(const InputParameters & parameters);
26 
28  virtual unsigned int numberSurfaces() const override;
29 
30  virtual void
31  yieldFunctionV(const RankTwoTensor & stress, Real intnl, std::vector<Real> & f) const override;
32 
33  virtual void dyieldFunction_dstressV(const RankTwoTensor & stress,
34  Real intnl,
35  std::vector<RankTwoTensor> & df_dstress) const override;
36 
37  virtual void dyieldFunction_dintnlV(const RankTwoTensor & stress,
38  Real intnl,
39  std::vector<Real> & df_dintnl) const override;
40 
41  virtual void flowPotentialV(const RankTwoTensor & stress,
42  Real intnl,
43  std::vector<RankTwoTensor> & r) const override;
44 
45  virtual void dflowPotential_dstressV(const RankTwoTensor & stress,
46  Real intnl,
47  std::vector<RankFourTensor> & dr_dstress) const override;
48 
49  virtual void dflowPotential_dintnlV(const RankTwoTensor & stress,
50  Real intnl,
51  std::vector<RankTwoTensor> & dr_dintnl) const override;
52 
53  virtual void activeConstraints(const std::vector<Real> & f,
54  const RankTwoTensor & stress,
55  Real intnl,
56  const RankFourTensor & Eijkl,
57  std::vector<bool> & act,
58  RankTwoTensor & returned_stress) const override;
59 
60  virtual std::string modelName() const override;
61 
62  virtual bool useCustomReturnMap() const override;
63 
64  virtual bool returnMap(const RankTwoTensor & trial_stress,
65  Real intnl_old,
66  const RankFourTensor & E_ijkl,
67  Real ep_plastic_tolerance,
68  RankTwoTensor & returned_stress,
69  Real & returned_intnl,
70  std::vector<Real> & dpm,
71  RankTwoTensor & delta_dp,
72  std::vector<Real> & yf,
73  bool & trial_stress_inadmissible) const override;
74 
75 protected:
77  virtual Real cohesion(const Real internal_param) const;
78 
80  virtual Real dcohesion(const Real internal_param) const;
81 
83  virtual Real phi(const Real internal_param) const;
84 
86  virtual Real dphi(const Real internal_param) const;
87 
89  virtual Real psi(const Real internal_param) const;
90 
92  virtual Real dpsi(const Real internal_param) const;
93 
94 private:
97 
100 
103 
105  const unsigned int _max_iters;
106 
108  const Real _shift;
109 
112 
123  Real e0, Real e1, Real e2, Real sinphi, Real cohcos, std::vector<Real> & f) const;
124 
130  void df_dsig(const RankTwoTensor & stress, Real sin_angle, std::vector<RankTwoTensor> & df) const;
131 
139  void perturbStress(const RankTwoTensor & stress,
140  std::vector<Real> & eigvals,
141  std::vector<RankTwoTensor> & deigvals) const;
142 
150  bool KuhnTuckerOK(const std::vector<Real> & yf,
151  const std::vector<Real> & dpm,
152  Real ep_plastic_tolerance) const;
153 
159  bool doReturnMap(const RankTwoTensor & trial_stress,
160  Real intnl_old,
161  const RankFourTensor & E_ijkl,
162  Real ep_plastic_tolerance,
163  RankTwoTensor & returned_stress,
164  Real & returned_intnl,
165  std::vector<Real> & dpm,
166  RankTwoTensor & delta_dp,
167  std::vector<Real> & yf,
168  bool & trial_stress_inadmissible) const;
169 
196  bool returnTip(const std::vector<Real> & eigvals,
197  const std::vector<RealVectorValue> & n,
198  std::vector<Real> & dpm,
199  RankTwoTensor & returned_stress,
200  Real intnl_old,
201  Real & sinphi,
202  Real & cohcos,
203  Real initial_guess,
204  bool & nr_converged,
205  Real ep_plastic_tolerance,
206  std::vector<Real> & yf) const;
207 
230  bool returnPlane(const std::vector<Real> & eigvals,
231  const std::vector<RealVectorValue> & n,
232  std::vector<Real> & dpm,
233  RankTwoTensor & returned_stress,
234  Real intnl_old,
235  Real & sinphi,
236  Real & cohcos,
237  Real initial_guess,
238  bool & nr_converged,
239  Real ep_plastic_tolerance,
240  std::vector<Real> & yf) const;
241 
266  bool returnEdge000101(const std::vector<Real> & eigvals,
267  const std::vector<RealVectorValue> & n,
268  std::vector<Real> & dpm,
269  RankTwoTensor & returned_stress,
270  Real intnl_old,
271  Real & sinphi,
272  Real & cohcos,
273  Real initial_guess,
274  Real mag_E,
275  bool & nr_converged,
276  Real ep_plastic_tolerance,
277  std::vector<Real> & yf) const;
278 
303  bool returnEdge010100(const std::vector<Real> & eigvals,
304  const std::vector<RealVectorValue> & n,
305  std::vector<Real> & dpm,
306  RankTwoTensor & returned_stress,
307  Real intnl_old,
308  Real & sinphi,
309  Real & cohcos,
310  Real initial_guess,
311  Real mag_E,
312  bool & nr_converged,
313  Real ep_plastic_tolerance,
314  std::vector<Real> & yf) const;
315 
317  {
323  };
324 };
325 
326 #endif // TENSORMECHANICSPLASTICMOHRCOULOMBMULTI_H
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.
const unsigned int _max_iters
Maximum Newton-Raphison iterations in the custom returnMap algorithm.
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.
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...
virtual bool useCustomReturnMap() const override
Returns false. You will want to override this in your derived class if you write a custom returnMap f...
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...
virtual Real phi(const Real internal_param) const
phi as a function of residual value, rate, and internal_param
InputParameters validParams< TensorMechanicsPlasticMohrCoulombMulti >()
virtual void flowPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &r) const override
The flow potentials.
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.
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.
const TensorMechanicsHardeningModel & _cohesion
Hardening model for cohesion.
const TensorMechanicsHardeningModel & _phi
Hardening model for phi.
virtual Real dphi(const Real internal_param) const
d(phi)/d(internal_param) as a function of residual value, rate, and internal_param ...
const TensorMechanicsHardeningModel & _psi
Hardening model for psi.
virtual void yieldFunctionV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &f) const override
Calculates the yield functions.
virtual Real psi(const Real internal_param) const
psi as a function of residual value, rate, and internal_param
const Real _shift
yield function is shifted by this amount to avoid problems with stress-derivatives at equal eigenvalu...
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.
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.
virtual Real dcohesion(const Real internal_param) const
d(cohesion)/d(internal_param) as a function of residual value, rate, and internal_param ...
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.
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.
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)...
virtual Real dpsi(const Real internal_param) const
d(psi)/d(internal_param) as a function of residual value, rate, and internal_param ...
FiniteStrainMohrCoulombMulti implements rate-independent non-associative mohr-coulomb with hardening/...
TensorMechanicsPlasticMohrCoulombMulti(const InputParameters &parameters)
virtual unsigned int numberSurfaces() const override
The number of yield surfaces for this plasticity model.
virtual Real cohesion(const Real internal_param) const
cohesion as a function of residual value, rate, and internal_param
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
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.
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...
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.
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...