60DruckerPragerCutMat :: hasMaterialModeCapability(MaterialMode mode)
const
62 return mode == _3dMat || mode == _PlaneStrain;
69 StructuralMaterial :: initializeFrom(ir);
88std::unique_ptr<MaterialStatus>
101 return princStress.
at(isurf) - this->
sigT;
103 double DPYieldStressInShear =
tau0 +
H *strainSpaceHardeningVariables.
at(4);
106 auto deviatoricStress = tmp.first;
107 auto volumetricStress = tmp.second;
109 return 3. *
alpha * volumetricStress + sqrt(JTwo) - DPYieldStressInShear;
126 answer.
at(1) = t.
at(1, isurf) * t.
at(1, isurf);
127 answer.
at(2) = t.
at(2, isurf) * t.
at(2, isurf);
128 answer.
at(3) = t.
at(3, isurf) * t.
at(3, isurf);
129 answer.
at(4) = t.
at(2, isurf) * t.
at(3, isurf);
130 answer.
at(5) = t.
at(1, isurf) * t.
at(3, isurf);
131 answer.
at(6) = t.
at(1, isurf) * t.
at(2, isurf);
137 answer.
at(1) =
alphaPsi + deviatoricStress.at(1) / 2. / sqrtJTwo;
138 answer.
at(2) =
alphaPsi + deviatoricStress.at(2) / 2. / sqrtJTwo;
139 answer.
at(3) =
alphaPsi + deviatoricStress.at(3) / 2. / sqrtJTwo;
140 answer.
at(4) = stressVector.
at(4) / sqrtJTwo;
141 answer.
at(5) = stressVector.
at(5) / sqrtJTwo;
142 answer.
at(6) = stressVector.
at(6) / sqrtJTwo;
153 gradientMatrix.
resize(6, 6);
156 gradientMatrix.
resize(4, 4);
162 gradientMatrix.
zero();
166 double JTwo, sqrtJTwo;
170 sqrtJTwo = sqrt(JTwo);
173 for (
int i = 1; i <= 6; i++ ) {
174 for (
int j = i; j <= 6; j++ ) {
175 if ( ( i == 1 && j == 1 ) || ( i == 2 && j == 2 ) || ( i == 3 && j == 3 ) ) {
177 }
else if ( ( i == 4 && j == 4 ) || ( i == 5 && j == 5 ) || ( i == 6 && j == 6 ) ) {
179 }
else if ( i <= 3 && j <= 3 ) {
184 gradientMatrix.
at(i, j) = 0.5 / JTwo * ( c1 * sqrtJTwo - deviatoricStress.at(i) * deviatoricStress.at(j) / 2. / sqrtJTwo );
189 for (
int i = 1; i <= 4; i++ ) {
190 for (
int j = i; j <= 4; j++ ) {
191 if ( ( i == 1 && j == 1 ) || ( i == 2 && j == 2 ) || ( i == 3 && j == 3 ) ) {
193 }
else if ( ( i == 4 && j == 4 ) ) {
195 }
else if ( i <= 3 && j <= 3 ) {
200 gradientMatrix.
at(i, j) = 0.5 / JTwo * ( c1 * sqrtJTwo - deviatoricStress.at(i) * deviatoricStress.at(j) / 2. / sqrtJTwo );
212DruckerPragerCutMat :: computeReducedElasticModuli(
FloatMatrix &answer,
225 if ( dlambda.
at(4) > 0. ) {
237 answer.
at(1) = this->
H;
245 int size = StructuralMaterial :: giveSizeOfVoigtSymVector( gp->
giveMaterialMode() );
246 gradientMatrix.
resize(size, 1);
247 gradientMatrix.
zero();
253 int size = StructuralMaterial :: giveSizeOfVoigtSymVector( gp->
giveMaterialMode() );
262 answer.
resize(1, actSurf);
265 if ( ( indx = activeConditionMap.
at(4) ) ) {
266 if ( dlambda.
at(4) > 0. ) {
277 if ( type == IST_DamageScalar ) {
283 }
else if ( type == IST_DamageTensor ) {
289 return MPlasticMaterial2 :: giveIPValue(answer, gp, type, tStep);
#define REGISTER_Material(class)
double omegaCrit
Maximum damage value.
double sigT
Uniaxial tensile strength for cut-off.
double alphaPsi
Dilatancy coefficient (allowing non-associated plasticity).
double G
Elastic shear modulus.
double yieldTol
Tolerance of the error in the yield criterion.
int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const override
double K
Elastic bulk modulus.
double alpha
Friction coefficient.
double a
Parameter for damage computation from cumulative plastic strain.
double tau0
Initial yield stress under pure shear.
int newtonIter
Maximum number of iterations in lambda search.
double H
Hardening modulus.
void zero()
Zeroes all coefficients of receiver.
void resize(Index rows, Index cols)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
enum oofem::MPlasticMaterial2::ReturnMappingAlgoType rmType
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
functType
Type that allows to distinguish between yield function and loading function.
MPlasticMaterial2(int n, Domain *d)
enum oofem::MPlasticMaterial2::plastType plType
int nsurf
Number of yield surfaces.
static void computePrincipalValues(FloatArray &answer, const FloatArray &s, stressStrainPrincMode mode)
Common functions for convenience.
static double computeSecondStressInvariant(const FloatArrayF< 6 > &s)
static FloatArrayF< 6 > computeDeviator(const FloatArrayF< 6 > &s)
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
static std::pair< FloatArrayF< 6 >, double > computeDeviatoricVolumetricSplit(const FloatArrayF< 6 > &s)
#define _IFT_DruckerPragerCutMat_h
Hardening modulus (DP model).
#define _IFT_DruckerPragerCutMat_omegaCrit
Critical damage.
#define _IFT_DruckerPragerCutMat_newtonIter
Maximum number of iterations in lambda search.
#define _IFT_DruckerPragerCutMat_tau0
Initial yield stress under pure shear (DP model).
#define _IFT_DruckerPragerCutMat_sigT
Uniaxial tensile strength for cut-off, (Rankine plasticity model).
#define _IFT_DruckerPragerCutMat_alphapsi
#define _IFT_DruckerPragerCutMat_yieldTol
Tolerance of the error in the yield criterion.
#define _IFT_DruckerPragerCutMat_alpha
Friction coefficient (DP model).
#define _IFT_DruckerPragerCutMat_a
Exponent in damage law.
@ principal_stress
For computing principal stresses.