void MisesMat :: giveRealStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep) { /// @note: One should obtain the same answer using the iterations in the default implementation (this is verified for this model). #if 1 MisesMatStatus *status = static_cast< MisesMatStatus * >( this->giveStatus(gp) ); this->performPlasticityReturn(gp, totalStrain); double omega = computeDamage(gp, tStep); answer = status->giveTempEffectiveStress(); answer.times(1 - omega); // Compute the other components of the strain: LinearElasticMaterial *lmat = this->giveLinearElasticMaterial(); double E = lmat->give('E', gp), nu = lmat->give('n', gp); FloatArray strain = status->getTempPlasticStrain(); strain[0] = totalStrain[0]; strain[1] -= nu / E * status->giveTempEffectiveStress()[0]; strain[2] -= nu / E * status->giveTempEffectiveStress()[0]; status->letTempStrainVectorBe(strain); status->setTempDamage(omega); status->letTempStressVectorBe(answer); #else StructuralMaterial :: giveRealStressVector_1d(answer, gp, totalStrain, tStep); #endif }
void MisesMat :: giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep) { MisesMatStatus *status = static_cast< MisesMatStatus * >( this->giveStatus(gp) ); this->performPlasticityReturn(gp, totalStrain); double omega = computeDamage(gp, tStep); answer = status->giveTempEffectiveStress(); answer.times(1 - omega); status->setTempDamage(omega); status->letTempStrainVectorBe(totalStrain); status->letTempStressVectorBe(answer); }
// returns the stress vector in 3d stress space void MisesMat :: giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *atTime) { MisesMatStatus *status = static_cast< MisesMatStatus * >( this->giveStatus(gp) ); this->initTempStatus(gp); this->initGpForNewStep(gp); this->performPlasticityReturn(gp, totalStrain); double omega = computeDamage(gp, atTime); StressVector effStress(_3dMat), totalStress(_3dMat); status->giveTempEffectiveStress(effStress); totalStress = effStress; totalStress.times(1 - omega); answer = totalStress; status->setTempDamage(omega); status->letTempStrainVectorBe(totalStrain); status->letTempStressVectorBe(answer); }