www.mooseframework.org
CappedDruckerPragerStressUpdate.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 
15 
17 
18 template <>
20 
61 {
62 public:
63  static InputParameters validParams();
64 
65  CappedDruckerPragerStressUpdate(const InputParameters & parameters);
66 
70  bool requiresIsotropicTensor() override { return true; }
71 
72  bool isIsotropic() override { return true; };
73 
74 protected:
77 
80 
83 
85  const Real _small_smoother2;
86 
88  const bool _perfect_guess;
89 
103  enum class StressReturnType
104  {
107  no_tension
109 
115  const bool _small_dilation;
116 
119 
120  virtual void yieldFunctionValues(Real p,
121  Real q,
122  const std::vector<Real> & intnl,
123  std::vector<Real> & yf) const override;
124 
125  virtual void computeAllQ(Real p,
126  Real q,
127  const std::vector<Real> & intnl,
128  std::vector<yieldAndFlow> & all_q) const override;
129 
130  virtual void preReturnMap(Real p_trial,
131  Real q_trial,
132  const RankTwoTensor & stress_trial,
133  const std::vector<Real> & intnl_old,
134  const std::vector<Real> & yf,
135  const RankFourTensor & Eijkl) override;
136 
137  virtual void initializeVars(Real p_trial,
138  Real q_trial,
139  const std::vector<Real> & intnl_old,
140  Real & p,
141  Real & q,
142  Real & gaE,
143  std::vector<Real> & intnl) const override;
144 
145  virtual void setIntnlValues(Real p_trial,
146  Real q_trial,
147  Real p,
148  Real q,
149  const std::vector<Real> & intnl_old,
150  std::vector<Real> & intnl) const override;
151 
152  virtual void setIntnlDerivatives(Real p_trial,
153  Real q_trial,
154  Real p,
155  Real q,
156  const std::vector<Real> & intnl,
157  std::vector<std::vector<Real>> & dintnl) const override;
158 
159  virtual void computePQ(const RankTwoTensor & stress, Real & p, Real & q) const override;
160 
161  virtual void initializeReturnProcess() override;
162 
163  virtual void finalizeReturnProcess(const RankTwoTensor & rotation_increment) override;
164 
165  virtual void setEppEqq(const RankFourTensor & Eijkl, Real & Epp, Real & Eqq) const override;
166 
167  virtual void setStressAfterReturn(const RankTwoTensor & stress_trial,
168  Real p_ok,
169  Real q_ok,
170  Real gaE,
171  const std::vector<Real> & intnl,
172  const yieldAndFlow & smoothed_q,
173  const RankFourTensor & Eijkl,
174  RankTwoTensor & stress) const override;
175 
176  virtual void consistentTangentOperator(const RankTwoTensor & stress_trial,
177  Real p_trial,
178  Real q_trial,
179  const RankTwoTensor & stress,
180  Real p,
181  Real q,
182  Real gaE,
183  const yieldAndFlow & smoothed_q,
184  const RankFourTensor & Eijkl,
185  bool compute_full_tangent_operator,
186  RankFourTensor & cto) const override;
187 
188  virtual RankTwoTensor dpdstress(const RankTwoTensor & stress) const override;
189 
190  virtual RankFourTensor d2pdstress2(const RankTwoTensor & stress) const override;
191 
192  virtual RankTwoTensor dqdstress(const RankTwoTensor & stress) const override;
193 
194  virtual RankFourTensor d2qdstress2(const RankTwoTensor & stress) const override;
195 };
CappedDruckerPragerStressUpdate::consistentTangentOperator
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.
Definition: CappedDruckerPragerStressUpdate.C:427
CappedDruckerPragerStressUpdate::_cstrength
const TensorMechanicsHardeningModel & _cstrength
Hardening model for compressive strength.
Definition: CappedDruckerPragerStressUpdate.h:82
CappedDruckerPragerStressUpdate::preReturnMap
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...
Definition: CappedDruckerPragerStressUpdate.C:87
CappedDruckerPragerStressUpdate::StressReturnType::no_compression
CappedDruckerPragerStressUpdate::setStressAfterReturn
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.
Definition: CappedDruckerPragerStressUpdate.C:375
CappedDruckerPragerStressUpdate::finalizeReturnProcess
virtual void finalizeReturnProcess(const RankTwoTensor &rotation_increment) override
Derived classes may use this to perform calculations after the return-map process has completed succe...
Definition: CappedDruckerPragerStressUpdate.C:81
CappedDruckerPragerStressUpdate::validParams
static InputParameters validParams()
Definition: CappedDruckerPragerStressUpdate.C:19
TensorMechanicsPlasticDruckerPrager.h
CappedDruckerPragerStressUpdate::StressReturnType
StressReturnType
This allows some simplification in the return-map process.
Definition: CappedDruckerPragerStressUpdate.h:103
MultiParameterPlasticityStressUpdate::yieldAndFlow
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...
Definition: MultiParameterPlasticityStressUpdate.h:214
CappedDruckerPragerStressUpdate::d2qdstress2
virtual RankFourTensor d2qdstress2(const RankTwoTensor &stress) const override
d2(q)/d(stress)/d(stress) Derived classes must override this
Definition: CappedDruckerPragerStressUpdate.C:415
TensorMechanicsPlasticDruckerPrager
Rate-independent non-associative Drucker Prager with hardening/softening.
Definition: TensorMechanicsPlasticDruckerPrager.h:27
CappedDruckerPragerStressUpdate::d2pdstress2
virtual RankFourTensor d2pdstress2(const RankTwoTensor &stress) const override
d2(p)/d(stress)/d(stress) Derived classes must override this
Definition: CappedDruckerPragerStressUpdate.C:400
CappedDruckerPragerStressUpdate
CappedDruckerPragerStressUpdate performs the return-map algorithm and associated stress updates for p...
Definition: CappedDruckerPragerStressUpdate.h:60
CappedDruckerPragerStressUpdate::initializeReturnProcess
virtual void initializeReturnProcess() override
Derived classes may use this to perform calculations before any return-map process is performed,...
Definition: CappedDruckerPragerStressUpdate.C:75
CappedDruckerPragerStressUpdate::_small_dilation
const bool _small_dilation
If true, and if the trial stress exceeds the tensile strength, then the user gaurantees that the retu...
Definition: CappedDruckerPragerStressUpdate.h:115
TwoParameterPlasticityStressUpdate
TwoParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates fo...
Definition: TwoParameterPlasticityStressUpdate.h:29
CappedDruckerPragerStressUpdate::computeAllQ
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.
Definition: CappedDruckerPragerStressUpdate.C:160
CappedDruckerPragerStressUpdate::_stress_return_type
enum CappedDruckerPragerStressUpdate::StressReturnType _stress_return_type
CappedDruckerPragerStressUpdate::setEppEqq
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.
Definition: CappedDruckerPragerStressUpdate.C:111
CappedDruckerPragerStressUpdate::_dp
const TensorMechanicsPlasticDruckerPrager & _dp
Hardening model for cohesion, friction and dilation angles.
Definition: CappedDruckerPragerStressUpdate.h:72
CappedDruckerPragerStressUpdate::requiresIsotropicTensor
bool requiresIsotropicTensor() override
Does the model require the elasticity tensor to be isotropic?
Definition: CappedDruckerPragerStressUpdate.h:70
CappedDruckerPragerStressUpdate::initializeVars
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.
Definition: CappedDruckerPragerStressUpdate.C:265
validParams< CappedDruckerPragerStressUpdate >
InputParameters validParams< CappedDruckerPragerStressUpdate >()
CappedDruckerPragerStressUpdate::dqdstress
virtual RankTwoTensor dqdstress(const RankTwoTensor &stress) const override
d(q)/d(stress) Derived classes must override this
Definition: CappedDruckerPragerStressUpdate.C:406
CappedDruckerPragerStressUpdate::setIntnlValues
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,...
Definition: CappedDruckerPragerStressUpdate.C:361
CappedDruckerPragerStressUpdate::yieldFunctionValues
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.
Definition: CappedDruckerPragerStressUpdate.C:138
CappedDruckerPragerStressUpdate::_in_q_trial
Real _in_q_trial
trial value of q
Definition: CappedDruckerPragerStressUpdate.h:118
CappedDruckerPragerStressUpdate::computePQ
virtual void computePQ(const RankTwoTensor &stress, Real &p, Real &q) const override
Computes p and q, given stress.
Definition: CappedDruckerPragerStressUpdate.C:104
CappedDruckerPragerStressUpdate::dpdstress
virtual RankTwoTensor dpdstress(const RankTwoTensor &stress) const override
d(p)/d(stress) Derived classes must override this
Definition: CappedDruckerPragerStressUpdate.C:394
CappedDruckerPragerStressUpdate::setIntnlDerivatives
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,...
Definition: CappedDruckerPragerStressUpdate.C:120
CappedDruckerPragerStressUpdate::_small_smoother2
const Real _small_smoother2
The cone vertex is smoothed by this amount.
Definition: CappedDruckerPragerStressUpdate.h:85
CappedDruckerPragerStressUpdate::StressReturnType::nothing_special
CappedDruckerPragerStressUpdate::_perfect_guess
const bool _perfect_guess
Initialize the NR proceedure from a guess coming from perfect plasticity.
Definition: CappedDruckerPragerStressUpdate.h:88
RankFourTensorTempl< Real >
CappedDruckerPragerStressUpdate::_tstrength
const TensorMechanicsHardeningModel & _tstrength
Hardening model for tensile strength.
Definition: CappedDruckerPragerStressUpdate.h:79
CappedDruckerPragerStressUpdate::isIsotropic
bool isIsotropic() override
Is the implmented model isotropic? The safe default is 'false'.
Definition: CappedDruckerPragerStressUpdate.h:72
RankTwoTensorTempl< Real >
CappedDruckerPragerStressUpdate::CappedDruckerPragerStressUpdate
CappedDruckerPragerStressUpdate(const InputParameters &parameters)
Definition: CappedDruckerPragerStressUpdate.C:56
CappedDruckerPragerStressUpdate::StressReturnType::no_tension
TensorMechanicsHardeningModel.h
TwoParameterPlasticityStressUpdate.h
TensorMechanicsHardeningModel
Hardening Model base class.
Definition: TensorMechanicsHardeningModel.h:27