www.mooseframework.org
TensorMechanicsPlasticTensileMulti.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  TensorMechanicsPlasticTensileMulti(const InputParameters & parameters);
30 
31  virtual unsigned int numberSurfaces() const override;
32 
33  virtual void
34  yieldFunctionV(const RankTwoTensor & stress, Real intnl, std::vector<Real> & f) const override;
35 
36  virtual void dyieldFunction_dstressV(const RankTwoTensor & stress,
37  Real intnl,
38  std::vector<RankTwoTensor> & df_dstress) const override;
39 
40  virtual void dyieldFunction_dintnlV(const RankTwoTensor & stress,
41  Real intnl,
42  std::vector<Real> & df_dintnl) const override;
43 
44  virtual void flowPotentialV(const RankTwoTensor & stress,
45  Real intnl,
46  std::vector<RankTwoTensor> & r) const override;
47 
48  virtual void dflowPotential_dstressV(const RankTwoTensor & stress,
49  Real intnl,
50  std::vector<RankFourTensor> & dr_dstress) const override;
51 
52  virtual void dflowPotential_dintnlV(const RankTwoTensor & stress,
53  Real intnl,
54  std::vector<RankTwoTensor> & dr_dintnl) const override;
55 
56  virtual void activeConstraints(const std::vector<Real> & f,
57  const RankTwoTensor & stress,
58  Real intnl,
59  const RankFourTensor & Eijkl,
60  std::vector<bool> & act,
61  RankTwoTensor & returned_stress) const override;
62 
63  virtual std::string modelName() const override;
64 
65  virtual bool useCustomReturnMap() const override;
66 
67  virtual bool useCustomCTO() const override;
68 
69  virtual bool returnMap(const RankTwoTensor & trial_stress,
70  Real intnl_old,
71  const RankFourTensor & E_ijkl,
72  Real ep_plastic_tolerance,
73  RankTwoTensor & returned_stress,
74  Real & returned_intnl,
75  std::vector<Real> & dpm,
76  RankTwoTensor & delta_dp,
77  std::vector<Real> & yf,
78  bool & trial_stress_inadmissible) const override;
79 
80  virtual RankFourTensor
81  consistentTangentOperator(const RankTwoTensor & trial_stress,
82  Real intnl_old,
83  const RankTwoTensor & stress,
84  Real intnl,
85  const RankFourTensor & E_ijkl,
86  const std::vector<Real> & cumulative_pm) const override;
87 
88 protected:
90  virtual Real tensile_strength(const Real internal_param) const;
91 
93  virtual Real dtensile_strength(const Real internal_param) const;
94 
95 private:
97 
99  const unsigned int _max_iters;
100 
102  const Real _shift;
103 
106 
108  const bool _use_custom_cto;
109 
111  Real dot(const std::vector<Real> & a, const std::vector<Real> & b) const;
112 
114  Real triple(const std::vector<Real> & a,
115  const std::vector<Real> & b,
116  const std::vector<Real> & c) const;
117 
134  bool returnTip(const std::vector<Real> & eigvals,
135  const std::vector<RealVectorValue> & n,
136  std::vector<Real> & dpm,
137  RankTwoTensor & returned_stress,
138  Real intnl_old,
139  Real initial_guess) const;
140 
158  bool returnEdge(const std::vector<Real> & eigvals,
159  const std::vector<RealVectorValue> & n,
160  std::vector<Real> & dpm,
161  RankTwoTensor & returned_stress,
162  Real intnl_old,
163  Real initial_guess) const;
164 
182  bool returnPlane(const std::vector<Real> & eigvals,
183  const std::vector<RealVectorValue> & n,
184  std::vector<Real> & dpm,
185  RankTwoTensor & returned_stress,
186  Real intnl_old,
187  Real initial_guess) const;
188 
198  bool KuhnTuckerOK(const RankTwoTensor & returned_diagonal_stress,
199  const std::vector<Real> & dpm,
200  Real str,
201  Real ep_plastic_tolerance) const;
202 
208  virtual bool doReturnMap(const RankTwoTensor & trial_stress,
209  Real intnl_old,
210  const RankFourTensor & E_ijkl,
211  Real ep_plastic_tolerance,
212  RankTwoTensor & returned_stress,
213  Real & returned_intnl,
214  std::vector<Real> & dpm,
215  RankTwoTensor & delta_dp,
216  std::vector<Real> & yf,
217  bool & trial_stress_inadmissible) const;
218 
220  {
221  tip = 0,
222  edge = 1,
223  plane = 2
224  };
225 };
TensorMechanicsPlasticTensileMulti::tensile_strength
virtual Real tensile_strength(const Real internal_param) const
tensile strength as a function of residual value, rate, and internal_param
Definition: TensorMechanicsPlasticTensileMulti.C:148
TensorMechanicsPlasticTensileMulti::_shift
const Real _shift
yield function is shifted by this amount to avoid problems with stress-derivatives at equal eigenvalu...
Definition: TensorMechanicsPlasticTensileMulti.h:102
TensorMechanicsPlasticTensileMulti::edge
Definition: TensorMechanicsPlasticTensileMulti.h:222
TensorMechanicsPlasticTensileMulti::returnTip
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.
Definition: TensorMechanicsPlasticTensileMulti.C:410
validParams< TensorMechanicsPlasticTensileMulti >
InputParameters validParams< TensorMechanicsPlasticTensileMulti >()
TensorMechanicsPlasticTensileMulti::_strength
const TensorMechanicsHardeningModel & _strength
Definition: TensorMechanicsPlasticTensileMulti.h:96
TensorMechanicsPlasticTensileMulti::_use_custom_returnMap
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
Definition: TensorMechanicsPlasticTensileMulti.h:105
TensorMechanicsPlasticTensileMulti::plane
Definition: TensorMechanicsPlasticTensileMulti.h:223
TensorMechanicsPlasticTensileMulti::KuhnTuckerOK
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.
Definition: TensorMechanicsPlasticTensileMulti.C:602
TensorMechanicsPlasticTensileMulti::triple
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
Definition: TensorMechanicsPlasticTensileMulti.C:203
TensorMechanicsPlasticTensileMulti::yieldFunctionV
virtual void yieldFunctionV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &f) const override
Calculates the yield functions.
Definition: TensorMechanicsPlasticTensileMulti.C:77
TensorMechanicsPlasticTensileMulti::flowPotentialV
virtual void flowPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &r) const override
The flow potentials.
Definition: TensorMechanicsPlasticTensileMulti.C:125
TensorMechanicsPlasticModel.h
TensorMechanicsPlasticTensileMulti::_use_custom_cto
const bool _use_custom_cto
Whether to use the custom consistent tangent operator calculation.
Definition: TensorMechanicsPlasticTensileMulti.h:108
TensorMechanicsPlasticTensileMulti::consistentTangentOperator
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.
Definition: TensorMechanicsPlasticTensileMulti.C:615
TensorMechanicsPlasticTensileMulti::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: TensorMechanicsPlasticTensileMulti.C:218
TensorMechanicsPlasticTensileMulti::TensorMechanicsPlasticTensileMulti
TensorMechanicsPlasticTensileMulti(const InputParameters &parameters)
Definition: TensorMechanicsPlasticTensileMulti.C:51
TensorMechanicsPlasticTensileMulti::returnPlane
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...
Definition: TensorMechanicsPlasticTensileMulti.C:556
TensorMechanicsPlasticTensileMulti::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: TensorMechanicsPlasticTensileMulti.C:134
TensorMechanicsPlasticTensileMulti::numberSurfaces
virtual unsigned int numberSurfaces() const override
The number of yield surfaces for this plasticity model.
Definition: TensorMechanicsPlasticTensileMulti.C:71
TensorMechanicsPlasticTensileMulti::validParams
static InputParameters validParams()
Definition: TensorMechanicsPlasticTensileMulti.C:21
TensorMechanicsPlasticTensileMulti::_max_iters
const unsigned int _max_iters
maximum iterations allowed in the custom return-map algorithm
Definition: TensorMechanicsPlasticTensileMulti.h:99
TensorMechanicsPlasticTensileMulti::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: TensorMechanicsPlasticTensileMulti.C:160
TensorMechanicsPlasticTensileMulti
FiniteStrainTensileMulti implements rate-independent associative tensile failure with hardening/softe...
Definition: TensorMechanicsPlasticTensileMulti.h:24
TensorMechanicsPlasticTensileMulti::dot
Real dot(const std::vector< Real > &a, const std::vector< Real > &b) const
dot product of two 3-dimensional vectors
Definition: TensorMechanicsPlasticTensileMulti.C:196
TensorMechanicsPlasticTensileMulti::returnEdge
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.
Definition: TensorMechanicsPlasticTensileMulti.C:487
TensorMechanicsPlasticTensileMulti::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: TensorMechanicsPlasticTensileMulti.C:117
TensorMechanicsPlasticTensileMulti::return_type
return_type
Definition: TensorMechanicsPlasticTensileMulti.h:219
RankFourTensorTempl< Real >
TensorMechanicsPlasticTensileMulti::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: TensorMechanicsPlasticTensileMulti.C:141
TensorMechanicsPlasticTensileMulti::doReturnMap
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,...
Definition: TensorMechanicsPlasticTensileMulti.C:254
TensorMechanicsPlasticModel
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
Definition: TensorMechanicsPlasticModel.h:42
TensorMechanicsPlasticTensileMulti::modelName
virtual std::string modelName() const override
Definition: TensorMechanicsPlasticTensileMulti.C:212
TensorMechanicsPlasticTensileMulti::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: TensorMechanicsPlasticTensileMulti.C:780
RankTwoTensorTempl< Real >
TensorMechanicsPlasticTensileMulti::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: TensorMechanicsPlasticTensileMulti.C:92
TensorMechanicsPlasticTensileMulti::useCustomCTO
virtual bool useCustomCTO() const override
Returns false. You will want to override this in your derived class if you write a custom consistent ...
Definition: TensorMechanicsPlasticTensileMulti.C:786
TensorMechanicsPlasticTensileMulti::tip
Definition: TensorMechanicsPlasticTensileMulti.h:221
TensorMechanicsHardeningModel.h
TensorMechanicsHardeningModel
Hardening Model base class.
Definition: TensorMechanicsHardeningModel.h:27
TensorMechanicsPlasticTensileMulti::dtensile_strength
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
Definition: TensorMechanicsPlasticTensileMulti.C:154