www.mooseframework.org
CappedMohrCoulombStressUpdate.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 
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  std::vector<RankTwoTensor> dstress_param_dstress(const RankTwoTensor & stress) const override;
69 
70  std::vector<RankFourTensor> d2stress_param_dstress(const RankTwoTensor & stress) const override;
71 
72  virtual void setStressAfterReturnV(const RankTwoTensor & stress_trial,
73  const std::vector<Real> & stress_params,
74  Real gaE,
75  const std::vector<Real> & intnl,
76  const yieldAndFlow & smoothed_q,
77  const RankFourTensor & Eijkl,
78  RankTwoTensor & stress) const override;
79 
80  virtual void preReturnMapV(const std::vector<Real> & trial_stress_params,
81  const RankTwoTensor & stress_trial,
82  const std::vector<Real> & intnl_old,
83  const std::vector<Real> & yf,
84  const RankFourTensor & Eijkl) override;
85 
86  void setEffectiveElasticity(const RankFourTensor & Eijkl) override;
87 
88  void yieldFunctionValuesV(const std::vector<Real> & stress_params,
89  const std::vector<Real> & intnl,
90  std::vector<Real> & yf) const override;
91 
92  void computeAllQV(const std::vector<Real> & stress_params,
93  const std::vector<Real> & intnl,
94  std::vector<yieldAndFlow> & all_q) const override;
95 
96  void initializeVarsV(const std::vector<Real> & trial_stress_params,
97  const std::vector<Real> & intnl_old,
98  std::vector<Real> & stress_params,
99  Real & gaE,
100  std::vector<Real> & intnl) const override;
101 
102  void setIntnlValuesV(const std::vector<Real> & trial_stress_params,
103  const std::vector<Real> & current_stress_params,
104  const std::vector<Real> & intnl_old,
105  std::vector<Real> & intnl) const override;
106 
107  void setIntnlDerivativesV(const std::vector<Real> & trial_stress_params,
108  const std::vector<Real> & current_stress_params,
109  const std::vector<Real> & intnl,
110  std::vector<std::vector<Real>> & dintnl) const override;
111 
112  virtual void consistentTangentOperatorV(const RankTwoTensor & stress_trial,
113  const std::vector<Real> & trial_stress_params,
114  const RankTwoTensor & stress,
115  const std::vector<Real> & stress_params,
116  Real gaE,
117  const yieldAndFlow & smoothed_q,
118  const RankFourTensor & Eijkl,
119  bool compute_full_tangent_operator,
120  const std::vector<std::vector<Real>> & dvar_dtrial,
121  RankFourTensor & cto) override;
122 };
const SolidMechanicsHardeningModel & _phi
Hardening model for friction angle.
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 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.
void setEffectiveElasticity(const RankFourTensor &Eijkl) override
Sets _Eij and _En and _Cij.
CappedMohrCoulombStressUpdate(const InputParameters &parameters)
std::vector< RankTwoTensor > dstress_param_dstress(const RankTwoTensor &stress) const override
d(stress_param[i])/d(stress) at given stress
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.
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...
const InputParameters & parameters() const
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.
std::vector< RankFourTensor > d2stress_param_dstress(const RankTwoTensor &stress) const override
d2(stress_param[i])/d(stress)/d(stress) at given stress