https://mooseframework.inl.gov
Loading...
Searching...
No Matches
CappedDruckerPragerStressUpdate.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
15
56{
57public:
59
61
65 bool requiresIsotropicTensor() override { return true; }
66
67 bool isIsotropic() override { return true; };
68
69protected:
72
75
78
80 const Real _small_smoother2;
81
83 const bool _perfect_guess;
84
104
110 const bool _small_dilation;
111
114
115 virtual void yieldFunctionValues(Real p,
116 Real q,
117 const std::vector<Real> & intnl,
118 std::vector<Real> & yf) const override;
119
120 virtual void computeAllQ(Real p,
121 Real q,
122 const std::vector<Real> & intnl,
123 std::vector<yieldAndFlow> & all_q) const override;
124
125 virtual void preReturnMap(Real p_trial,
126 Real q_trial,
127 const RankTwoTensor & stress_trial,
128 const std::vector<Real> & intnl_old,
129 const std::vector<Real> & yf,
130 const RankFourTensor & Eijkl) override;
131
132 virtual void initializeVars(Real p_trial,
133 Real q_trial,
134 const std::vector<Real> & intnl_old,
135 Real & p,
136 Real & q,
137 Real & gaE,
138 std::vector<Real> & intnl) const override;
139
140 virtual void setIntnlValues(Real p_trial,
141 Real q_trial,
142 Real p,
143 Real q,
144 const std::vector<Real> & intnl_old,
145 std::vector<Real> & intnl) const override;
146
147 virtual void setIntnlDerivatives(Real p_trial,
148 Real q_trial,
149 Real p,
150 Real q,
151 const std::vector<Real> & intnl,
152 std::vector<std::vector<Real>> & dintnl) const override;
153
154 virtual void computePQ(const RankTwoTensor & stress, Real & p, Real & q) const override;
155
156 virtual void initializeReturnProcess() override;
157
158 virtual void finalizeReturnProcess(const RankTwoTensor & rotation_increment) override;
159
160 virtual void setEppEqq(const RankFourTensor & Eijkl, Real & Epp, Real & Eqq) const override;
161
162 virtual void setStressAfterReturn(const RankTwoTensor & stress_trial,
163 Real p_ok,
164 Real q_ok,
165 Real gaE,
166 const std::vector<Real> & intnl,
167 const yieldAndFlow & smoothed_q,
168 const RankFourTensor & Eijkl,
169 RankTwoTensor & stress) const override;
170
171 virtual void consistentTangentOperator(const RankTwoTensor & stress_trial,
172 Real p_trial,
173 Real q_trial,
174 const RankTwoTensor & stress,
175 Real p,
176 Real q,
177 Real gaE,
178 const yieldAndFlow & smoothed_q,
179 const RankFourTensor & Eijkl,
180 bool compute_full_tangent_operator,
181 RankFourTensor & cto) const override;
182
183 virtual RankTwoTensor dpdstress(const RankTwoTensor & stress) const override;
184
185 virtual RankFourTensor d2pdstress2(const RankTwoTensor & stress) const override;
186
187 virtual RankTwoTensor dqdstress(const RankTwoTensor & stress) const override;
188
189 virtual RankFourTensor d2qdstress2(const RankTwoTensor & stress) const override;
190};
const Real p
CappedDruckerPragerStressUpdate performs the return-map algorithm and associated stress updates for p...
virtual void setStressAfterReturn(const RankTwoTensor &stress_trial, Real p_ok, Real q_ok, Real gaE, const std::vector< Real > &intnl, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, RankTwoTensor &stress) const override
Sets stress from the admissible parameters.
bool isIsotropic() override
Is the implmented model isotropic? The safe default is 'false'.
virtual void setIntnlValues(Real p_trial, Real q_trial, Real p, Real q, const std::vector< Real > &intnl_old, std::vector< Real > &intnl) const override
Sets the internal parameters based on the trial values of p and q, their current values,...
virtual void computePQ(const RankTwoTensor &stress, Real &p, Real &q) const override
Computes p and q, given stress.
virtual RankFourTensor d2pdstress2(const RankTwoTensor &stress) const override
d2(p)/d(stress)/d(stress) Derived classes must override this
virtual void consistentTangentOperator(const RankTwoTensor &stress_trial, Real p_trial, Real q_trial, const RankTwoTensor &stress, Real p, Real q, Real gaE, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, bool compute_full_tangent_operator, RankFourTensor &cto) const override
Calculates the consistent tangent operator.
bool requiresIsotropicTensor() override
Does the model require the elasticity tensor to be isotropic?
virtual RankTwoTensor dqdstress(const RankTwoTensor &stress) const override
d(q)/d(stress) Derived classes must override this
virtual void initializeVars(Real p_trial, Real q_trial, const std::vector< Real > &intnl_old, Real &p, Real &q, Real &gaE, std::vector< Real > &intnl) const override
Sets (p, q, gaE, intnl) at "good guesses" of the solution to the Return-Map algorithm.
virtual RankFourTensor d2qdstress2(const RankTwoTensor &stress) const override
d2(q)/d(stress)/d(stress) Derived classes must override this
virtual void finalizeReturnProcess(const RankTwoTensor &rotation_increment) override
Derived classes may use this to perform calculations after the return-map process has completed succe...
const SolidMechanicsHardeningModel & _cstrength
Hardening model for compressive strength.
virtual void computeAllQ(Real p, Real q, const std::vector< Real > &intnl, std::vector< yieldAndFlow > &all_q) const override
Completely fills all_q with correct values.
const Real _small_smoother2
The cone vertex is smoothed by this amount.
virtual void preReturnMap(Real p_trial, Real q_trial, 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...
const bool _small_dilation
If true, and if the trial stress exceeds the tensile strength, then the user gaurantees that the retu...
const SolidMechanicsHardeningModel & _tstrength
Hardening model for tensile strength.
const bool _perfect_guess
Initialize the NR proceedure from a guess coming from perfect plasticity.
virtual void yieldFunctionValues(Real p, Real q, const std::vector< Real > &intnl, std::vector< Real > &yf) const override
Computes the values of the yield functions, given p, q and intnl parameters.
virtual void setIntnlDerivatives(Real p_trial, Real q_trial, Real p, Real q, 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 p and q,...
virtual void setEppEqq(const RankFourTensor &Eijkl, Real &Epp, Real &Eqq) const override
Set Epp and Eqq based on the elasticity tensor Derived classes must override this.
virtual void initializeReturnProcess() override
Derived classes may use this to perform calculations before any return-map process is performed,...
virtual RankTwoTensor dpdstress(const RankTwoTensor &stress) const override
d(p)/d(stress) Derived classes must override this
const SolidMechanicsPlasticDruckerPrager & _dp
Hardening model for cohesion, friction and dilation angles.
StressReturnType
This allows some simplification in the return-map process.
enum CappedDruckerPragerStressUpdate::StressReturnType _stress_return_type
const InputParameters & parameters() const
Rate-independent non-associative Drucker Prager with hardening/softening.
TwoParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates fo...
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...