https://mooseframework.inl.gov
SolidMechanicsPlasticTensileMulti.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 
20 {
21 public:
23 
25 
26  virtual unsigned int numberSurfaces() const override;
27 
28  virtual void
29  yieldFunctionV(const RankTwoTensor & stress, Real intnl, std::vector<Real> & f) const override;
30 
31  virtual void dyieldFunction_dstressV(const RankTwoTensor & stress,
32  Real intnl,
33  std::vector<RankTwoTensor> & df_dstress) const override;
34 
35  virtual void dyieldFunction_dintnlV(const RankTwoTensor & stress,
36  Real intnl,
37  std::vector<Real> & df_dintnl) const override;
38 
39  virtual void flowPotentialV(const RankTwoTensor & stress,
40  Real intnl,
41  std::vector<RankTwoTensor> & r) const override;
42 
43  virtual void dflowPotential_dstressV(const RankTwoTensor & stress,
44  Real intnl,
45  std::vector<RankFourTensor> & dr_dstress) const override;
46 
47  virtual void dflowPotential_dintnlV(const RankTwoTensor & stress,
48  Real intnl,
49  std::vector<RankTwoTensor> & dr_dintnl) const override;
50 
51  virtual void activeConstraints(const std::vector<Real> & f,
52  const RankTwoTensor & stress,
53  Real intnl,
54  const RankFourTensor & Eijkl,
55  std::vector<bool> & act,
56  RankTwoTensor & returned_stress) const override;
57 
58  virtual std::string modelName() const override;
59 
60  virtual bool useCustomReturnMap() const override;
61 
62  virtual bool useCustomCTO() 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  virtual RankFourTensor
76  consistentTangentOperator(const RankTwoTensor & trial_stress,
77  Real intnl_old,
78  const RankTwoTensor & stress,
79  Real intnl,
80  const RankFourTensor & E_ijkl,
81  const std::vector<Real> & cumulative_pm) const override;
82 
83 protected:
85  virtual Real tensile_strength(const Real internal_param) const;
86 
88  virtual Real dtensile_strength(const Real internal_param) const;
89 
90 private:
92 
94  const unsigned int _max_iters;
95 
97  const Real _shift;
98 
101 
103  const bool _use_custom_cto;
104 
106  Real dot(const std::vector<Real> & a, const std::vector<Real> & b) const;
107 
109  Real triple(const std::vector<Real> & a,
110  const std::vector<Real> & b,
111  const std::vector<Real> & c) const;
112 
129  bool returnTip(const std::vector<Real> & eigvals,
130  const std::vector<RealVectorValue> & n,
131  std::vector<Real> & dpm,
132  RankTwoTensor & returned_stress,
133  Real intnl_old,
134  Real initial_guess) const;
135 
153  bool returnEdge(const std::vector<Real> & eigvals,
154  const std::vector<RealVectorValue> & n,
155  std::vector<Real> & dpm,
156  RankTwoTensor & returned_stress,
157  Real intnl_old,
158  Real initial_guess) const;
159 
177  bool returnPlane(const std::vector<Real> & eigvals,
178  const std::vector<RealVectorValue> & n,
179  std::vector<Real> & dpm,
180  RankTwoTensor & returned_stress,
181  Real intnl_old,
182  Real initial_guess) const;
183 
193  bool KuhnTuckerOK(const RankTwoTensor & returned_diagonal_stress,
194  const std::vector<Real> & dpm,
195  Real str,
196  Real ep_plastic_tolerance) const;
197 
203  virtual bool doReturnMap(const RankTwoTensor & trial_stress,
204  Real intnl_old,
205  const RankFourTensor & E_ijkl,
206  Real ep_plastic_tolerance,
207  RankTwoTensor & returned_stress,
208  Real & returned_intnl,
209  std::vector<Real> & dpm,
210  RankTwoTensor & delta_dp,
211  std::vector<Real> & yf,
212  bool & trial_stress_inadmissible) const;
213 
215  {
216  tip = 0,
217  edge = 1,
218  plane = 2
219  };
220 };
virtual void yieldFunctionV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &f) const override
Calculates the yield functions.
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 void dyieldFunction_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &df_dstress) const override
The derivative of yield functions with respect to stress.
Real dot(const std::vector< Real > &a, const std::vector< Real > &b) const
dot product of two 3-dimensional vectors
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 initial_guess) const
Tries to return-map to the Tensile plane The return value is true if the internal Newton-Raphson proc...
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
virtual std::string modelName() const override
Real f(Real x)
Test function for Brents method.
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.
FiniteStrainTensileMulti implements rate-independent associative tensile failure with hardening/softe...
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 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 SolidMechanicsHardeningModel & _strength
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 void flowPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &r) const override
The flow potentials.
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 dflowPotential_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankFourTensor > &dr_dstress) const override
The derivative of the flow potential with respect to stress.
SolidMechanicsPlasticTensileMulti(const InputParameters &parameters)
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.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const bool _use_custom_cto
Whether to use the custom consistent tangent operator calculation.
const Real _shift
yield function is shifted by this amount to avoid problems with stress-derivatives at equal eigenvalu...
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 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.
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 InputParameters & parameters() const
virtual unsigned int numberSurfaces() const override
The number of yield surfaces for this plasticity model.
virtual Real tensile_strength(const Real internal_param) const
tensile strength 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.
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
virtual bool useCustomCTO() const override
Returns false. You will want to override this in your derived class if you write a custom consistent ...
const unsigned int _max_iters
maximum iterations allowed in the custom return-map algorithm