void RCM2Material :: giveRealStressVector(FloatArray &answer, MatResponseForm form, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *atTime) // // returns real stress vector in 3d stress space of receiver according to // previous level of stress and current // strain increment, the only way, how to correctly update gp records // { FloatArray princStress, reducedStressVector, crackStrain, reducedAnswer; FloatArray reducedTotalStrainVector, principalStrain, strainVector; FloatMatrix tempCrackDirs; RCM2MaterialStatus *status = ( RCM2MaterialStatus * ) this->giveStatus(gp); StructuralCrossSection *crossSection = ( StructuralCrossSection * ) gp->giveElement()->giveCrossSection(); this->initTempStatus(gp); this->initGpForNewStep(gp); // subtract stress independent part // note: eigenStrains (temperature) is not contained in mechanical strain stored in gp // therefore it is necessary to subtract always the total eigen strain value this->giveStressDependentPartOfStrainVector(reducedTotalStrainVector, gp, totalStrain, atTime, VM_Total); // crossSection->giveFullCharacteristicVector(strainVector, gp, reducedTotalStrainVector); status->giveTempCrackDirs(tempCrackDirs); this->computePrincipalValDir(principalStrain, tempCrackDirs, strainVector, principal_strain); this->giveRealPrincipalStressVector3d(princStress, gp, principalStrain, tempCrackDirs, atTime); princStress.resize(6); status->giveTempCrackDirs(tempCrackDirs); this->transformStressVectorTo(answer, tempCrackDirs, princStress, 1); status->letTempStrainVectorBe(totalStrain); crossSection->giveReducedCharacteristicVector(reducedStressVector, gp, answer); status->letTempStressVectorBe(reducedStressVector); status->giveCrackStrainVector(crackStrain); this->updateCrackStatus(gp, crackStrain); if ( form == FullForm ) { return; } crossSection->giveReducedCharacteristicVector(reducedAnswer, gp, answer); answer = reducedAnswer; }
void J2plasticMaterial :: computeTrialStressIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &strainIncrement, TimeStep *atTime) { /* Computes the full trial elastic stress vector */ FloatArray reducedAnswer; FloatMatrix reducedModuli; StructuralCrossSection *crossSection = ( StructuralCrossSection * ) ( gp->giveElement()->giveCrossSection() ); this->giveLinearElasticMaterial()->giveCharacteristicMatrix(reducedModuli, ReducedForm, ElasticStiffness, gp, atTime); reducedAnswer.beProductOf(reducedModuli, strainIncrement); crossSection->giveFullCharacteristicVector(answer, gp, reducedAnswer); }