https://mooseframework.inl.gov
CappedMohrCoulombStressUpdate.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 
29  bool requiresIsotropicTensor() override { return true; }
30 
31  bool isIsotropic() override { return true; };
32 
33 protected:
36 
39 
42 
45 
48 
50  const bool _perfect_guess;
51 
54 
60  const Real _shifter;
61 
64 
65  void computeStressParams(const RankTwoTensor & stress,
66  std::vector<Real> & stress_params) const override;
67 
68  void dstressparam_dstress(const RankTwoTensor & stress,
69  std::vector<RankTwoTensor> & dsp) const override;
70 
71  void d2stressparam_dstress(const RankTwoTensor & stress,
72  std::vector<RankFourTensor> & d2sp) const override;
73 
74  virtual void setStressAfterReturnV(const RankTwoTensor & stress_trial,
75  const std::vector<Real> & stress_params,
76  Real gaE,
77  const std::vector<Real> & intnl,
78  const yieldAndFlow & smoothed_q,
79  const RankFourTensor & Eijkl,
80  RankTwoTensor & stress) const override;
81 
82  virtual void preReturnMapV(const std::vector<Real> & trial_stress_params,
83  const RankTwoTensor & stress_trial,
84  const std::vector<Real> & intnl_old,
85  const std::vector<Real> & yf,
86  const RankFourTensor & Eijkl) override;
87 
88  void setEffectiveElasticity(const RankFourTensor & Eijkl) override;
89 
90  void yieldFunctionValuesV(const std::vector<Real> & stress_params,
91  const std::vector<Real> & intnl,
92  std::vector<Real> & yf) const override;
93 
94  void computeAllQV(const std::vector<Real> & stress_params,
95  const std::vector<Real> & intnl,
96  std::vector<yieldAndFlow> & all_q) const override;
97 
98  void initializeVarsV(const std::vector<Real> & trial_stress_params,
99  const std::vector<Real> & intnl_old,
100  std::vector<Real> & stress_params,
101  Real & gaE,
102  std::vector<Real> & intnl) const override;
103 
104  void setIntnlValuesV(const std::vector<Real> & trial_stress_params,
105  const std::vector<Real> & current_stress_params,
106  const std::vector<Real> & intnl_old,
107  std::vector<Real> & intnl) const override;
108 
109  void setIntnlDerivativesV(const std::vector<Real> & trial_stress_params,
110  const std::vector<Real> & current_stress_params,
111  const std::vector<Real> & intnl,
112  std::vector<std::vector<Real>> & dintnl) const override;
113 
114  virtual void consistentTangentOperatorV(const RankTwoTensor & stress_trial,
115  const std::vector<Real> & trial_stress_params,
116  const RankTwoTensor & stress,
117  const std::vector<Real> & stress_params,
118  Real gaE,
119  const yieldAndFlow & smoothed_q,
120  const RankFourTensor & Eijkl,
121  bool compute_full_tangent_operator,
122  const std::vector<std::vector<Real>> & dvar_dtrial,
123  RankFourTensor & cto) override;
124 
125 private:
130  mutable std::vector<RankTwoTensor> _dsp_trial_scratch;
131 
136  mutable std::vector<Real> _eigvals_scratch;
137 
142  mutable std::vector<Real> _dga_shear_scratch;
143 
148  mutable std::vector<Real> _dshear_correction_scratch;
149 };
const SolidMechanicsHardeningModel & _phi
Hardening model for friction angle.
void d2stressparam_dstress(const RankTwoTensor &stress, std::vector< RankFourTensor > &d2sp) const override
d2(stress_param[i])/d(stress)/d(stress) at given stress.
CappedMohrCoulombStressUpdate implements rate-independent nonassociative Mohr-Coulomb plus tensile pl...
void computeStressParams(const RankTwoTensor &stress, std::vector< Real > &stress_params) const override
Computes stress_params, given stress.
bool isIsotropic() override
Is the implmented model isotropic? The safe default is &#39;false&#39;.
void computeAllQV(const std::vector< Real > &stress_params, const std::vector< Real > &intnl, std::vector< yieldAndFlow > &all_q) const override
Completely fills all_q with correct values.
const InputParameters & parameters() const
const bool _perfect_guess
Whether to provide an estimate of the returned stress, based on perfect plasticity.
virtual void consistentTangentOperatorV(const RankTwoTensor &stress_trial, const std::vector< Real > &trial_stress_params, const RankTwoTensor &stress, const std::vector< Real > &stress_params, Real gaE, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, bool compute_full_tangent_operator, const std::vector< std::vector< Real >> &dvar_dtrial, RankFourTensor &cto) override
Calculates the consistent tangent operator.
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...
const SolidMechanicsHardeningModel & _tensile_strength
Hardening model for tensile strength.
std::vector< Real > _eigvals_scratch
eigenvalues of the stress, used in dstressparam_dstress and preReturnMapV.
std::vector< Real > _dshear_correction_scratch
scratch vector used in setIntnlDerivativesV.
void dstressparam_dstress(const RankTwoTensor &stress, std::vector< RankTwoTensor > &dsp) const override
d(stress_param[i])/d(stress) at given stress.
void setEffectiveElasticity(const RankFourTensor &Eijkl) override
Sets _Eij and _En and _Cij.
std::vector< Real > _dga_shear_scratch
derivative of ga_shear w.r.t.
CappedMohrCoulombStressUpdate(const InputParameters &parameters)
void setIntnlValuesV(const std::vector< Real > &trial_stress_params, const std::vector< Real > &current_stress_params, const std::vector< Real > &intnl_old, std::vector< Real > &intnl) const override
Sets the internal parameters based on the trial values of stress_params, their current values...
const Real _shifter
When equal-eigenvalues are predicted from the stress initialization routine, shift them by this amoun...
virtual void preReturnMapV(const std::vector< Real > &trial_stress_params, 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...
bool requiresIsotropicTensor() override
Does the model require the elasticity tensor to be isotropic?
void yieldFunctionValuesV(const std::vector< Real > &stress_params, const std::vector< Real > &intnl, std::vector< Real > &yf) const override
Computes the values of the yield functions, given stress_params and intnl parameters.
void setIntnlDerivativesV(const std::vector< Real > &trial_stress_params, const std::vector< Real > &current_stress_params, 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 stress_params, their current values, and the current values of the internal parameters.
const SolidMechanicsHardeningModel & _compressive_strength
Hardening model for compressive strength.
const SolidMechanicsHardeningModel & _cohesion
Hardening model for cohesion.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void initializeVarsV(const std::vector< Real > &trial_stress_params, const std::vector< Real > &intnl_old, std::vector< Real > &stress_params, Real &gaE, std::vector< Real > &intnl) const override
Sets (stress_params, intnl) at "good guesses" of the solution to the Return-Map algorithm.
std::vector< RankTwoTensor > _dsp_trial_scratch
this is d(stress_param[:])/d(stress) which is calculated by dstressparam_dstress. ...
MultiParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates ...
const SolidMechanicsHardeningModel & _psi
Hardening model for dilation angle.
RankTwoTensor _eigvecs
Eigenvectors of the trial stress as a RankTwoTensor, in order to rotate the returned stress back to s...
virtual void setStressAfterReturnV(const RankTwoTensor &stress_trial, const std::vector< Real > &stress_params, Real gaE, const std::vector< Real > &intnl, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, RankTwoTensor &stress) const override
Sets stress from the admissible parameters.