int M1Material :: giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) { M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) ); if ( type == IST_PlasticStrainTensor ) { // plastic strain is computed as total strain minus elastic strain // (note that integration of microplane plastic strains would give a different result) answer = status->giveStrainVector(); FloatArray sig = status->giveStressVector(); double aux = nu * ( sig.at(1) + sig.at(2) + sig.at(3) ); double G = E / ( 2. * ( 1. + nu ) ); answer.at(1) -= ( ( 1. + nu ) * sig.at(1) - aux ) / E; answer.at(2) -= ( ( 1. + nu ) * sig.at(2) - aux ) / E; answer.at(3) -= ( ( 1. + nu ) * sig.at(3) - aux ) / E; answer.at(4) -= sig.at(4) / G; answer.at(5) -= sig.at(5) / G; answer.at(6) -= sig.at(6) / G; return 1; } else { return StructuralMaterial :: giveIPValue(answer, gp, type, tStep); } }