www.mooseframework.org
TensorMechanicsPlasticModel.h
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
7 #ifndef TENSORMECHANICSPLASTICMODEL_H
8 #define TENSORMECHANICSPLASTICMODEL_H
9 
10 #include "GeneralUserObject.h"
11 #include "RankTwoTensor.h"
12 
14 
15 template <>
17 
40 class TensorMechanicsPlasticModel : public GeneralUserObject
41 {
42 public:
43  TensorMechanicsPlasticModel(const InputParameters & parameters);
44 
45  void initialize();
46  void execute();
47  void finalize();
48 
50  virtual unsigned int numberSurfaces() const;
51 
59  virtual void
60  yieldFunctionV(const RankTwoTensor & stress, Real intnl, std::vector<Real> & f) const;
61 
68  virtual void dyieldFunction_dstressV(const RankTwoTensor & stress,
69  Real intnl,
70  std::vector<RankTwoTensor> & df_dstress) const;
71 
78  virtual void dyieldFunction_dintnlV(const RankTwoTensor & stress,
79  Real intnl,
80  std::vector<Real> & df_dintnl) const;
81 
88  virtual void
89  flowPotentialV(const RankTwoTensor & stress, Real intnl, std::vector<RankTwoTensor> & r) const;
90 
97  virtual void dflowPotential_dstressV(const RankTwoTensor & stress,
98  Real intnl,
99  std::vector<RankFourTensor> & dr_dstress) const;
100 
107  virtual void dflowPotential_dintnlV(const RankTwoTensor & stress,
108  Real intnl,
109  std::vector<RankTwoTensor> & dr_dintnl) const;
110 
117  virtual void
118  hardPotentialV(const RankTwoTensor & stress, Real intnl, std::vector<Real> & h) const;
119 
126  virtual void dhardPotential_dstressV(const RankTwoTensor & stress,
127  Real intnl,
128  std::vector<RankTwoTensor> & dh_dstress) const;
129 
136  virtual void dhardPotential_dintnlV(const RankTwoTensor & stress,
137  Real intnl,
138  std::vector<Real> & dh_dintnl) const;
139 
155  virtual void activeConstraints(const std::vector<Real> & f,
156  const RankTwoTensor & stress,
157  Real intnl,
158  const RankFourTensor & Eijkl,
159  std::vector<bool> & act,
160  RankTwoTensor & returned_stress) const;
161 
162  virtual std::string modelName() const = 0;
163 
165  virtual bool useCustomReturnMap() const;
166 
168  virtual bool useCustomCTO() const;
169 
171  const Real _f_tol;
172 
174  const Real _ic_tol;
175 
252  virtual bool returnMap(const RankTwoTensor & trial_stress,
253  Real intnl_old,
254  const RankFourTensor & E_ijkl,
255  Real ep_plastic_tolerance,
256  RankTwoTensor & returned_stress,
257  Real & returned_intnl,
258  std::vector<Real> & dpm,
259  RankTwoTensor & delta_dp,
260  std::vector<Real> & yf,
261  bool & trial_stress_inadmissible) const;
262 
280  virtual RankFourTensor consistentTangentOperator(const RankTwoTensor & trial_stress,
281  Real intnl_old,
282  const RankTwoTensor & stress,
283  Real intnl,
284  const RankFourTensor & E_ijkl,
285  const std::vector<Real> & cumulative_pm) const;
286 
294  bool KuhnTuckerSingleSurface(Real yf, Real dpm, Real dpm_tol) const;
295 
296 protected:
298 
304  virtual Real yieldFunction(const RankTwoTensor & stress, Real intnl) const;
305 
312  virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor & stress, Real intnl) const;
313 
320  virtual Real dyieldFunction_dintnl(const RankTwoTensor & stress, Real intnl) const;
321 
328  virtual RankTwoTensor flowPotential(const RankTwoTensor & stress, Real intnl) const;
329 
336  virtual RankFourTensor dflowPotential_dstress(const RankTwoTensor & stress, Real intnl) const;
337 
344  virtual RankTwoTensor dflowPotential_dintnl(const RankTwoTensor & stress, Real intnl) const;
345 
352  virtual Real hardPotential(const RankTwoTensor & stress, Real intnl) const;
353 
360  virtual RankTwoTensor dhardPotential_dstress(const RankTwoTensor & stress, Real intnl) const;
361 
368  virtual Real dhardPotential_dintnl(const RankTwoTensor & stress, Real intnl) const;
369 };
370 
371 #endif // TENSORMECHANICSPLASTICMODEL_H
virtual Real hardPotential(const RankTwoTensor &stress, Real intnl) const
The hardening potential.
virtual bool useCustomReturnMap() const
Returns false. You will want to override this in your derived class if you write a custom returnMap f...
virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const
The derivative of yield function with respect to stress.
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
Calculates a custom consistent tangent operator.
virtual void flowPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &r) const
The flow potentials.
TensorMechanicsPlasticModel(const InputParameters &parameters)
virtual unsigned int numberSurfaces() const
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
Performs a custom return-map.
virtual RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const
The derivative of the flow potential with respect to stress.
virtual Real dyieldFunction_dintnl(const RankTwoTensor &stress, Real intnl) const
The derivative of yield function with respect to the internal parameter.
virtual Real dhardPotential_dintnl(const RankTwoTensor &stress, Real intnl) const
The derivative of the hardening potential with respect to the internal parameter. ...
bool KuhnTuckerSingleSurface(Real yf, Real dpm, Real dpm_tol) const
Returns true if the Kuhn-Tucker conditions for the single surface are satisfied.
virtual RankTwoTensor dflowPotential_dintnl(const RankTwoTensor &stress, Real intnl) const
The derivative of the flow potential with respect to the internal parameter.
virtual void hardPotentialV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &h) const
The hardening potential.
virtual std::string modelName() const =0
virtual void dhardPotential_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &dh_dstress) const
The derivative of the hardening potential with respect to stress.
InputParameters validParams< TensorMechanicsPlasticModel >()
virtual Real yieldFunction(const RankTwoTensor &stress, Real intnl) const
The following functions are what you should override when building single-plasticity models...
virtual void dflowPotential_dintnlV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &dr_dintnl) const
The derivative of the flow potential with respect to the internal parameter.
virtual void dflowPotential_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankFourTensor > &dr_dstress) const
The derivative of the flow potential with respect to stress.
virtual void activeConstraints(const std::vector< Real > &f, const RankTwoTensor &stress, Real intnl, const RankFourTensor &Eijkl, std::vector< bool > &act, RankTwoTensor &returned_stress) const
The active yield surfaces, given a vector of yield functions.
const Real _f_tol
Tolerance on yield function.
virtual void yieldFunctionV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &f) const
Calculates the yield functions.
virtual bool useCustomCTO() const
Returns false. You will want to override this in your derived class if you write a custom consistent ...
virtual void dyieldFunction_dintnlV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &df_dintnl) const
The derivative of yield functions with respect to the internal parameter.
virtual void dhardPotential_dintnlV(const RankTwoTensor &stress, Real intnl, std::vector< Real > &dh_dintnl) const
The derivative of the hardening potential with respect to the internal parameter. ...
virtual RankTwoTensor dhardPotential_dstress(const RankTwoTensor &stress, Real intnl) const
The derivative of the hardening potential with respect to stress.
const Real _ic_tol
Tolerance on internal constraint.
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
virtual RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const
The flow potential.
virtual void dyieldFunction_dstressV(const RankTwoTensor &stress, Real intnl, std::vector< RankTwoTensor > &df_dstress) const
The derivative of yield functions with respect to stress.