www.mooseframework.org
TensorMechanicsPlasticTensileMulti.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 TENSORMECHANICSPLASTICTENSILEMULTI_H
8 #define TENSORMECHANICSPLASTICTENSILEMULTI_H
9 
12 
14 
15 template <>
17 
23 {
24 public:
25  TensorMechanicsPlasticTensileMulti(const InputParameters & parameters);
26 
27  virtual unsigned int numberSurfaces() const override;
28 
29  virtual void
30  yieldFunctionV(const RankTwoTensor & stress, Real intnl, std::vector<Real> & f) const override;
31 
32  virtual void dyieldFunction_dstressV(const RankTwoTensor & stress,
33  Real intnl,
34  std::vector<RankTwoTensor> & df_dstress) const override;
35 
36  virtual void dyieldFunction_dintnlV(const RankTwoTensor & stress,
37  Real intnl,
38  std::vector<Real> & df_dintnl) const override;
39 
40  virtual void flowPotentialV(const RankTwoTensor & stress,
41  Real intnl,
42  std::vector<RankTwoTensor> & r) const override;
43 
44  virtual void dflowPotential_dstressV(const RankTwoTensor & stress,
45  Real intnl,
46  std::vector<RankFourTensor> & dr_dstress) const override;
47 
48  virtual void dflowPotential_dintnlV(const RankTwoTensor & stress,
49  Real intnl,
50  std::vector<RankTwoTensor> & dr_dintnl) const override;
51 
52  virtual void activeConstraints(const std::vector<Real> & f,
53  const RankTwoTensor & stress,
54  Real intnl,
55  const RankFourTensor & Eijkl,
56  std::vector<bool> & act,
57  RankTwoTensor & returned_stress) const override;
58 
59  virtual std::string modelName() const override;
60 
61  virtual bool useCustomReturnMap() const override;
62 
63  virtual bool useCustomCTO() const override;
64 
65  virtual bool returnMap(const RankTwoTensor & trial_stress,
66  Real intnl_old,
67  const RankFourTensor & E_ijkl,
68  Real ep_plastic_tolerance,
69  RankTwoTensor & returned_stress,
70  Real & returned_intnl,
71  std::vector<Real> & dpm,
72  RankTwoTensor & delta_dp,
73  std::vector<Real> & yf,
74  bool & trial_stress_inadmissible) const override;
75 
76  virtual RankFourTensor
77  consistentTangentOperator(const RankTwoTensor & trial_stress,
78  Real intnl_old,
79  const RankTwoTensor & stress,
80  Real intnl,
81  const RankFourTensor & E_ijkl,
82  const std::vector<Real> & cumulative_pm) const override;
83 
84 protected:
86  virtual Real tensile_strength(const Real internal_param) const;
87 
89  virtual Real dtensile_strength(const Real internal_param) const;
90 
91 private:
93 
95  const unsigned int _max_iters;
96 
98  const Real _shift;
99 
102 
104  const bool _use_custom_cto;
105 
107  Real dot(const std::vector<Real> & a, const std::vector<Real> & b) const;
108 
110  Real triple(const std::vector<Real> & a,
111  const std::vector<Real> & b,
112  const std::vector<Real> & c) const;
113 
130  bool returnTip(const std::vector<Real> & eigvals,
131  const std::vector<RealVectorValue> & n,
132  std::vector<Real> & dpm,
133  RankTwoTensor & returned_stress,
134  Real intnl_old,
135  Real initial_guess) const;
136 
154  bool returnEdge(const std::vector<Real> & eigvals,
155  const std::vector<RealVectorValue> & n,
156  std::vector<Real> & dpm,
157  RankTwoTensor & returned_stress,
158  Real intnl_old,
159  Real initial_guess) const;
160 
178  bool returnPlane(const std::vector<Real> & eigvals,
179  const std::vector<RealVectorValue> & n,
180  std::vector<Real> & dpm,
181  RankTwoTensor & returned_stress,
182  Real intnl_old,
183  Real initial_guess) const;
184 
194  bool KuhnTuckerOK(const RankTwoTensor & returned_diagonal_stress,
195  const std::vector<Real> & dpm,
196  Real str,
197  Real ep_plastic_tolerance) const;
198 
204  virtual bool doReturnMap(const RankTwoTensor & trial_stress,
205  Real intnl_old,
206  const RankFourTensor & E_ijkl,
207  Real ep_plastic_tolerance,
208  RankTwoTensor & returned_stress,
209  Real & returned_intnl,
210  std::vector<Real> & dpm,
211  RankTwoTensor & delta_dp,
212  std::vector<Real> & yf,
213  bool & trial_stress_inadmissible) const;
214 
216  {
217  tip = 0,
218  edge = 1,
219  plane = 2
220  };
221 };
222 
223 #endif // TENSORMECHANICSPLASTICTENSILEMULTI_H
bool returnPlane(const std::vector< Real > &eigvals, const std::vector< RealVectorValue > &n, std::vector< Real > &dpm, RankTwoTensor &returned_stress, Real intnl_old, Real initial_guess) const
Tries to return-map to the Tensile plane The return value is true if the internal Newton-Raphson proc...
virtual Real tensile_strength(const Real internal_param) const
tensile strength as a function of residual value, rate, and internal_param
virtual void yieldFunctionV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &f) const override
Calculates the yield functions.
bool returnTip(const std::vector< Real > &eigvals, const std::vector< RealVectorValue > &n, std::vector< Real > &dpm, RankTwoTensor &returned_stress, Real intnl_old, Real initial_guess) const
Tries to return-map to the Tensile tip.
virtual bool useCustomCTO() const override
Returns false. You will want to override this in your derived class if you write a custom consistent ...
InputParameters validParams< TensorMechanicsPlasticTensileMulti >()
virtual 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
Just like returnMap, but a protected interface that definitely uses the algorithm, since returnMap itself does not use the algorithm if _use_returnMap=false.
virtual Real dtensile_strength(const Real internal_param) const
d(tensile strength)/d(internal_param) as a function of residual value, rate, and internal_param ...
virtual RankFourTensor consistentTangentOperator(const RankTwoTensor &trial_stress, Real intnl_old, const RankTwoTensor &stress, Real intnl, const RankFourTensor &E_ijkl, const std::vector< Real > &cumulative_pm) const override
Calculates a custom consistent tangent operator.
virtual std::string modelName() const override
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
bool KuhnTuckerOK(const RankTwoTensor &returned_diagonal_stress, const std::vector< Real > &dpm, Real str, Real ep_plastic_tolerance) const
Returns true if the Kuhn-Tucker conditions are satisfied.
const Real _shift
yield function is shifted by this amount to avoid problems with stress-derivatives at equal eigenvalu...
Real dot(const std::vector< Real > &a, const std::vector< Real > &b) const
dot product of two 3-dimensional vectors
Real triple(const std::vector< Real > &a, const std::vector< Real > &b, const std::vector< Real > &c) const
triple product of three 3-dimensional vectors
const unsigned int _max_iters
maximum iterations allowed in the custom return-map algorithm
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 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 void dyieldFunction_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &df_dstress) const override
The derivative of yield functions with respect to stress.
virtual unsigned int numberSurfaces() const override
The number of yield surfaces for this plasticity model.
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.
virtual bool useCustomReturnMap() const override
Returns false. You will want to override this in your derived class if you write a custom returnMap f...
virtual void flowPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &r) const override
The flow potentials.
const bool _use_custom_cto
Whether to use the custom consistent tangent operator calculation.
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.
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
TensorMechanicsPlasticTensileMulti(const InputParameters &parameters)
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.
const TensorMechanicsHardeningModel & _strength
FiniteStrainTensileMulti implements rate-independent associative tensile failure with hardening/softe...
bool returnEdge(const std::vector< Real > &eigvals, const std::vector< RealVectorValue > &n, std::vector< Real > &dpm, RankTwoTensor &returned_stress, Real intnl_old, Real initial_guess) const
Tries to return-map to the Tensile edge.