https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
21public:
23
25
29 bool requiresIsotropicTensor() override { return true; }
30
31 bool isIsotropic() override { return true; };
32
33protected:
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
125private:
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};
CappedMohrCoulombStressUpdate implements rate-independent nonassociative Mohr-Coulomb plus tensile pl...
const SolidMechanicsHardeningModel & _compressive_strength
Hardening model for compressive strength.
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,...
std::vector< Real > _dga_shear_scratch
derivative of ga_shear w.r.t.
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...
const SolidMechanicsHardeningModel & _psi
Hardening model for dilation angle.
void setEffectiveElasticity(const RankFourTensor &Eijkl) override
Sets _Eij and _En and _Cij.
std::vector< Real > _dshear_correction_scratch
scratch vector used in setIntnlDerivativesV.
std::vector< RankTwoTensor > _dsp_trial_scratch
this is d(stress_param[:])/d(stress) which is calculated by dstressparam_dstress.
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,...
RankTwoTensor _eigvecs
Eigenvectors of the trial stress as a RankTwoTensor, in order to rotate the returned stress back to s...
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.
void dstressparam_dstress(const RankTwoTensor &stress, std::vector< RankTwoTensor > &dsp) const override
d(stress_param[i])/d(stress) at given stress.
const bool _perfect_guess
Whether to provide an estimate of the returned stress, based on perfect plasticity.
std::vector< Real > _eigvals_scratch
eigenvalues of the stress, used in dstressparam_dstress and preReturnMapV.
const SolidMechanicsHardeningModel & _tensile_strength
Hardening model for tensile strength.
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.
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.
const Real _shifter
When equal-eigenvalues are predicted from the stress initialization routine, shift them by this amoun...
bool isIsotropic() override
Is the implmented model isotropic? The safe default is 'false'.
void d2stressparam_dstress(const RankTwoTensor &stress, std::vector< RankFourTensor > &d2sp) const override
d2(stress_param[i])/d(stress)/d(stress) at given stress.
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.
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.
const SolidMechanicsHardeningModel & _cohesion
Hardening model for cohesion.
const SolidMechanicsHardeningModel & _phi
Hardening model for friction angle.
bool requiresIsotropicTensor() override
Does the model require the elasticity tensor to be isotropic?
void computeStressParams(const RankTwoTensor &stress, std::vector< Real > &stress_params) const override
Computes stress_params, given stress.
const InputParameters & parameters() const
MultiParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates ...
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...