https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
21public:
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
83protected:
85 virtual Real tensile_strength(const Real internal_param) const;
86
88 virtual Real dtensile_strength(const Real internal_param) const;
89
90private:
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};
Real f(Real x)
Test function for Brents method.
const InputParameters & parameters() const
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
FiniteStrainTensileMulti implements rate-independent associative tensile failure with hardening/softe...
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 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 bool useCustomCTO() const override
Returns false. You will want to override this in your derived class if you write a custom consistent ...
Real dot(const std::vector< Real > &a, const std::vector< Real > &b) const
dot product of two 3-dimensional vectors
const SolidMechanicsHardeningModel & _strength
const unsigned int _max_iters
maximum iterations allowed in the custom return-map algorithm
virtual void flowPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &r) const override
The flow potentials.
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 Real tensile_strength(const Real internal_param) const
tensile strength as a function of residual value, rate, and internal_param
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.
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,...
const bool _use_custom_cto
Whether to use the custom consistent tangent operator calculation.
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.
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
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.
virtual void yieldFunctionV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &f) const override
Calculates the yield functions.
const Real _shift
yield function is shifted by this amount to avoid problems with stress-derivatives at equal eigenvalu...
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 bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
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 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 std::string modelName() const override
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 bool useCustomReturnMap() const override
Returns false. You will want to override this in your derived class if you write a custom returnMap f...
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