Example #1
0
double
RankinePlasticMaterial :: computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector,
                                              const FloatArray &stressSpaceHardeningVars)
{
    FloatArray princStress(3);
    this->computePrincipalValues(princStress, stressVector, principal_stress);

    return princStress.at(isurf) - this->k;
}
Example #2
0
void
RankinePlasticMaterial :: computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector,
                                                      const FloatArray &stressSpaceHardeningVars)
{
    FloatArray princStress(3);
    FloatMatrix t(3, 3);

    // compute principal stresses and their directions
    this->computePrincipalValDir(princStress, t, stressVector, principal_stress);

    //derivation through stress transformation. The transformation matrix is stored in t.
    answer.resize(6);
    answer.at(1) = t.at(1, isurf) * t.at(1, isurf);//xx = 11
    answer.at(2) = t.at(2, isurf) * t.at(2, isurf);//yy = 22
    answer.at(3) = t.at(3, isurf) * t.at(3, isurf);//zz = 33
    answer.at(4) = t.at(2, isurf) * t.at(3, isurf);//yz = 23
    answer.at(5) = t.at(1, isurf) * t.at(3, isurf);//xz = 13
    answer.at(6) = t.at(1, isurf) * t.at(2, isurf);//xy = 12

    //crossSection->giveReducedCharacteristicVector(answer, gp, fullAnswer);
}
Example #3
0
double
DruckerPragerCutMat :: computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector, const FloatArray &strainSpaceHardeningVariables)
{
    //strainSpaceHardeningVariables = kappa
    if ( isurf <= 3 ) { //Rankine, surfaces 1,2,3
        FloatArray princStress(3);
        this->computePrincipalValues(princStress, stressVector, principal_stress);
        return princStress.at(isurf) - this->sigT;
    } else { //Drucker-Prager, surface 4
        double volumetricStress;
        double DPYieldStressInShear = tau0 + H *strainSpaceHardeningVariables.at(4);
        double JTwo;
        //MaterialMode mmode = gp->giveMaterialMode();
        MaterialMode mmode = _3dMat;
        StressVector stressVector1(stressVector, mmode); //convert from array
        StressVector deviatoricStress(mmode);

        stressVector1.computeDeviatoricVolumetricSplit(deviatoricStress, volumetricStress);
        JTwo = deviatoricStress.computeSecondInvariant();
        return 3. * alpha * volumetricStress + sqrt(JTwo) - DPYieldStressInShear;
    }
}
Example #4
0
//associated and nonassociated flow rule
void
DruckerPragerCutMat :: computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars)
{
    FloatArray princStress(3);
    FloatMatrix t(3, 3);

    // compute principal stresses and their directions
    this->computePrincipalValDir(princStress, t, stressVector, principal_stress);

    // derivation through stress transformation matrix. The transformation matrix is stored in t columnwise
    answer.resize(6);
    if ( isurf <= 3 ) { //Rankine associated
        answer.at(1) = t.at(1, isurf) * t.at(1, isurf); //xx = 11
        answer.at(2) = t.at(2, isurf) * t.at(2, isurf); //yy = 22
        answer.at(3) = t.at(3, isurf) * t.at(3, isurf); //zz = 33
        answer.at(4) = t.at(2, isurf) * t.at(3, isurf); //yz = 23
        answer.at(5) = t.at(1, isurf) * t.at(3, isurf); //xz = 13
        answer.at(6) = t.at(1, isurf) * t.at(2, isurf); //xy = 12
    } else { //DP nonassociated
        //MaterialMode mmode = gp->giveMaterialMode();
        MaterialMode mmode = _3dMat;
        StressVector stressVector1(stressVector, mmode); //convert from array
        StressVector deviatoricStress(mmode);
        double sqrtJTwo, volumetricStress;

        stressVector1.computeDeviatoricVolumetricSplit(deviatoricStress, volumetricStress);
        sqrtJTwo = sqrt( deviatoricStress.computeSecondInvariant() );

        answer.at(1) = alphaPsi + deviatoricStress.at(1) / 2. / sqrtJTwo;
        answer.at(2) = alphaPsi + deviatoricStress.at(2) / 2. / sqrtJTwo;
        answer.at(3) = alphaPsi + deviatoricStress.at(3) / 2. / sqrtJTwo;
        answer.at(4) = stressVector1.at(4) / sqrtJTwo;
        answer.at(5) = stressVector1.at(5) / sqrtJTwo;
        answer.at(6) = stressVector1.at(6) / sqrtJTwo;
    }
}