www.mooseframework.org
CappedMohrCoulombStressUpdate.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 CAPPEDMOHRCOULOMBSTRESSUPDATE_H
8 #define CAPPEDMOHRCOULOMBSTRESSUPDATE_H
9 
12 
14 
15 template <>
17 
23 {
24 public:
25  CappedMohrCoulombStressUpdate(const InputParameters & parameters);
26 
30  bool requiresIsotropicTensor() override { return true; }
31 
32 protected:
35 
38 
41 
44 
47 
49  const bool _perfect_guess;
50 
53 
59  const Real _shifter;
60 
62  RankTwoTensor _eigvecs;
63 
64  void computeStressParams(const RankTwoTensor & stress,
65  std::vector<Real> & stress_params) const override;
66 
67  std::vector<RankTwoTensor> dstress_param_dstress(const RankTwoTensor & stress) const override;
68 
69  std::vector<RankFourTensor> d2stress_param_dstress(const RankTwoTensor & stress) const override;
70 
71  virtual void setStressAfterReturnV(const RankTwoTensor & stress_trial,
72  const std::vector<Real> & stress_params,
73  Real gaE,
74  const std::vector<Real> & intnl,
75  const yieldAndFlow & smoothed_q,
76  const RankFourTensor & Eijkl,
77  RankTwoTensor & stress) const override;
78 
79  virtual void preReturnMapV(const std::vector<Real> & trial_stress_params,
80  const RankTwoTensor & stress_trial,
81  const std::vector<Real> & intnl_old,
82  const std::vector<Real> & yf,
83  const RankFourTensor & Eijkl) override;
84 
85  void setEffectiveElasticity(const RankFourTensor & Eijkl) override;
86 
87  void yieldFunctionValuesV(const std::vector<Real> & stress_params,
88  const std::vector<Real> & intnl,
89  std::vector<Real> & yf) const override;
90 
91  void computeAllQV(const std::vector<Real> & stress_params,
92  const std::vector<Real> & intnl,
93  std::vector<yieldAndFlow> & all_q) const override;
94 
95  void initializeVarsV(const std::vector<Real> & trial_stress_params,
96  const std::vector<Real> & intnl_old,
97  std::vector<Real> & stress_params,
98  Real & gaE,
99  std::vector<Real> & intnl) const override;
100 
101  void setIntnlValuesV(const std::vector<Real> & trial_stress_params,
102  const std::vector<Real> & current_stress_params,
103  const std::vector<Real> & intnl_old,
104  std::vector<Real> & intnl) const override;
105 
106  void setIntnlDerivativesV(const std::vector<Real> & trial_stress_params,
107  const std::vector<Real> & current_stress_params,
108  const std::vector<Real> & intnl,
109  std::vector<std::vector<Real>> & dintnl) const override;
110 
111  virtual void consistentTangentOperatorV(const RankTwoTensor & stress_trial,
112  const std::vector<Real> & trial_stress_params,
113  const RankTwoTensor & stress,
114  const std::vector<Real> & stress_params,
115  Real gaE,
116  const yieldAndFlow & smoothed_q,
117  const RankFourTensor & Eijkl,
118  bool compute_full_tangent_operator,
119  const std::vector<std::vector<Real>> & dvar_dtrial,
120  RankFourTensor & cto) override;
121 };
122 
123 #endif // CAPPEDMOHRCOULOMBSTRESSUPDATE_H
InputParameters validParams< CappedMohrCoulombStressUpdate >()
CappedMohrCoulombStressUpdate implements rate-independent nonassociative Mohr-Coulomb plus tensile pl...
const TensorMechanicsHardeningModel & _psi
Hardening model for dilation angle.
const bool _perfect_guess
Whether to provide an estimate of the returned stress, based on perfect plasticity.
const TensorMechanicsHardeningModel & _compressive_strength
Hardening model for compressive strength.
void setIntnlDerivativesV(const std::vector< Real > &trial_stress_params, const std::vector< Real > &current_stress_params, const std::vector< Real > &intnl, std::vector< std::vector< Real >> &dintnl) const override
Sets the derivatives of internal parameters, based on the trial values of stress_params, their current values, and the current values of the internal parameters.
virtual void consistentTangentOperatorV(const RankTwoTensor &stress_trial, const std::vector< Real > &trial_stress_params, const RankTwoTensor &stress, const std::vector< Real > &stress_params, Real gaE, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, bool compute_full_tangent_operator, const std::vector< std::vector< Real >> &dvar_dtrial, RankFourTensor &cto) override
Calculates the consistent tangent operator.
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...
void computeStressParams(const RankTwoTensor &stress, std::vector< Real > &stress_params) const override
Computes stress_params, given stress.
void setIntnlValuesV(const std::vector< Real > &trial_stress_params, const std::vector< Real > &current_stress_params, const std::vector< Real > &intnl_old, std::vector< Real > &intnl) const override
Sets the internal parameters based on the trial values of stress_params, their current values...
const TensorMechanicsHardeningModel & _tensile_strength
Hardening model for tensile strength.
void setEffectiveElasticity(const RankFourTensor &Eijkl) override
Sets _Eij and _En and _Cij.
CappedMohrCoulombStressUpdate(const InputParameters &parameters)
const Real _shifter
When equal-eigenvalues are predicted from the stress initialization routine, shift them by this amoun...
virtual void preReturnMapV(const std::vector< Real > &trial_stress_params, const RankTwoTensor &stress_trial, const std::vector< Real > &intnl_old, const std::vector< Real > &yf, const RankFourTensor &Eijkl) override
Derived classes may employ this function to record stuff or do other computations prior to the return...
bool requiresIsotropicTensor() override
Does the model require the elasticity tensor to be isotropic?
std::vector< RankTwoTensor > dstress_param_dstress(const RankTwoTensor &stress) const override
d(stress_param[i])/d(stress) at given stress
void yieldFunctionValuesV(const std::vector< Real > &stress_params, const std::vector< Real > &intnl, std::vector< Real > &yf) const override
Computes the values of the yield functions, given stress_params and intnl parameters.
const TensorMechanicsHardeningModel & _phi
Hardening model for friction angle.
const TensorMechanicsHardeningModel & _cohesion
Hardening model for cohesion.
std::vector< RankFourTensor > d2stress_param_dstress(const RankTwoTensor &stress) const override
d2(stress_param[i])/d(stress)/d(stress) at given stress
MultiParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates ...
void computeAllQV(const std::vector< Real > &stress_params, const std::vector< Real > &intnl, std::vector< yieldAndFlow > &all_q) const override
Completely fills all_q with correct values.
RankTwoTensor _eigvecs
Eigenvectors of the trial stress as a RankTwoTensor, in order to rotate the returned stress back to s...
void initializeVarsV(const std::vector< Real > &trial_stress_params, const std::vector< Real > &intnl_old, std::vector< Real > &stress_params, Real &gaE, std::vector< Real > &intnl) const override
Sets (stress_params, intnl) at "good guesses" of the solution to the Return-Map algorithm.
virtual void setStressAfterReturnV(const RankTwoTensor &stress_trial, const std::vector< Real > &stress_params, Real gaE, const std::vector< Real > &intnl, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, RankTwoTensor &stress) const override
Sets stress from the admissible parameters.