Пример #1
0
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);
    }
}