Go to the documentation of this file.
11 #include "libmesh/utility.h"
21 params.addClassDescription(
"Capped Mohr-Coulomb plasticity stress calculator for the Cosserat "
22 "situation where the host medium (ie, the limit where all Cosserat "
23 "effects are zero) is isotropic. Note that the return-map flow rule "
24 "uses an isotropic elasticity tensor built with the 'host' properties "
25 "defined by the user.");
26 params.addRequiredRangeCheckedParam<Real>(
"host_youngs_modulus",
27 "host_youngs_modulus>0",
28 "Young's modulus for the isotropic host medium");
29 params.addRequiredRangeCheckedParam<Real>(
"host_poissons_ratio",
30 "host_poissons_ratio>=0 & host_poissons_ratio<0.5",
31 "Poisson's ratio for the isotropic host medium");
36 const InputParameters & parameters)
38 _host_young(getParam<Real>(
"host_youngs_modulus")),
39 _host_poisson(getParam<Real>(
"host_poissons_ratio")),
40 _host_E0011(_host_young * _host_poisson / (1.0 + _host_poisson) / (1.0 - 2.0 * _host_poisson)),
41 _host_E0000(_host_E0011 + _host_young / (1.0 + _host_poisson))
47 const std::vector<Real> & ,
49 const std::vector<Real> & ,
50 const std::vector<Real> & ,
53 std::vector<Real> eigvals;
54 stress_trial.symmetricEigenvaluesEigenvectors(eigvals,
_eigvecs);
64 const Real denom =
_Eij[0][0] * (
_Eij[0][0] +
_Eij[0][1]) - 2 * Utility::pow<2>(
_Eij[0][1]);
65 for (
unsigned a = 0; a <
_num_sp; ++a)
68 for (
unsigned b = 0; b < a; ++b)
76 const std::vector<Real> & stress_params,
78 const std::vector<Real> & ,
84 stress =
RankTwoTensor(stress_params[0], stress_params[1], stress_params[2], 0.0, 0.0, 0.0);
88 stress += 0.5 * (stress_trial - stress_trial.transpose());
94 const std::vector<Real> & trial_stress_params,
96 const std::vector<Real> & stress_params,
100 bool compute_full_tangent_operator,
101 const std::vector<std::vector<Real>> & dvar_dtrial,
111 compute_full_tangent_operator,
115 if (!compute_full_tangent_operator)
139 anti(i, j, k, l) = 0.5 * (elasticity_tensor(i, j, k, l) - elasticity_tensor(j, i, k, l));
static InputParameters validParams()
RankTwoTensor _eigvecs
Eigenvectors of the trial stress as a RankTwoTensor, in order to rotate the returned stress back to s...
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 Real _host_poisson
Poisson's of the host material.
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...
std::vector< std::vector< Real > > _Cij
_Cij[i, j] * _Eij[j, k] = 1 iff j == k
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...
void setEffectiveElasticity(const RankFourTensor &Eijkl) override
Sets _Eij and _En and _Cij.
std::vector< std::vector< Real > > _Eij
E[i, j] in the system of equations to be solved.
const Real _host_E0000
E0000 = Lame lambda + 2 * shear modulus of the host material.
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.
Real _poissons_ratio
Poisson's ratio.
const unsigned _num_sp
Number of stress parameters.
CappedMohrCoulombStressUpdate implements rate-independent nonassociative Mohr-Coulomb plus tensile pl...
static InputParameters validParams()
const Real _host_E0011
E0011 = Lame lambda modulus of the host material.
RankTwoTensorTempl< Real > RankTwoTensor
CappedMohrCoulombCosseratStressUpdate implements rate-independent nonassociative Mohr-Coulomb plus te...
registerMooseObject("TensorMechanicsApp", CappedMohrCoulombCosseratStressUpdate)
Real _En
normalising factor
CappedMohrCoulombCosseratStressUpdate(const InputParameters ¶meters)
defineLegacyParams(CappedMohrCoulombCosseratStressUpdate)
constexpr static unsigned _tensor_dimensionality
Internal dimensionality of tensors (currently this is 3 throughout tensor_mechanics)
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.