Пример #1
0
void
M1Material :: give3dMaterialStiffnessMatrix(FloatMatrix &answer,
                                            MatResponseMode mode,
                                            GaussPoint *gp,
                                            TimeStep *tStep)
{
    answer.resize(6, 6);
    answer.zero();
    // elastic stiffness matrix
    if ( mode == ElasticStiffness ) {
        MicroplaneMaterial :: give3dMaterialStiffnessMatrix(answer, mode, gp, tStep);
        return;
    }

    M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) );
    IntArray plasticState = status->givePlasticStateIndicators();
    if ( plasticState.giveSize() != numberOfMicroplanes ) {
        MicroplaneMaterial :: give3dMaterialStiffnessMatrix(answer, mode, gp, tStep);
        return;
    }
    // tangent stiffness matrix
    double aux, D11 = 0., D12 = 0., D13 = 0., D14 = 0., D15 = 0., D16 = 0., D22 = 0., D23 = 0., D24 = 0., D25 = 0., D26 = 0., D33 = 0., D34 = 0., D35 = 0., D36 = 0.;
    // loop over microplanes
    for ( int im = 0; im < numberOfMicroplanes; im++ ) {
        if ( plasticState.at(im + 1) ) {
            aux = ENtan * microplaneWeights [ im ];
        } else {
            aux = EN * microplaneWeights [ im ];
        }
        D11 += aux * N [ im ] [ 0 ] * N [ im ] [ 0 ];
        D12 += aux * N [ im ] [ 0 ] * N [ im ] [ 1 ];
        D13 += aux * N [ im ] [ 0 ] * N [ im ] [ 2 ];
        D14 += aux * N [ im ] [ 0 ] * N [ im ] [ 3 ];
        D15 += aux * N [ im ] [ 0 ] * N [ im ] [ 4 ];
        D16 += aux * N [ im ] [ 0 ] * N [ im ] [ 5 ];

        D22 += aux * N [ im ] [ 1 ] * N [ im ] [ 1 ];
        D23 += aux * N [ im ] [ 1 ] * N [ im ] [ 2 ];
        D24 += aux * N [ im ] [ 1 ] * N [ im ] [ 3 ];
        D25 += aux * N [ im ] [ 1 ] * N [ im ] [ 4 ];
        D26 += aux * N [ im ] [ 1 ] * N [ im ] [ 5 ];

        D33 += aux * N [ im ] [ 2 ] * N [ im ] [ 2 ];
        D34 += aux * N [ im ] [ 2 ] * N [ im ] [ 3 ];
        D35 += aux * N [ im ] [ 2 ] * N [ im ] [ 4 ];
        D36 += aux * N [ im ] [ 2 ] * N [ im ] [ 5 ];
    }
    answer.at(1, 1) = D11;
    answer.at(1, 2) = answer.at(2, 1) = answer.at(6, 6) = D12;
    answer.at(1, 3) = answer.at(3, 1) = answer.at(5, 5) = D13;
    answer.at(1, 4) = answer.at(4, 1) = answer.at(5, 6) = answer.at(6, 5) = D14;
    answer.at(1, 5) = answer.at(5, 1) = D15;
    answer.at(1, 6) = answer.at(6, 1) = D16;

    answer.at(2, 2) = D22;
    answer.at(2, 3) = answer.at(3, 2) = answer.at(4, 4) = D23;
    answer.at(2, 4) = answer.at(4, 2) = D24;
    answer.at(2, 5) = answer.at(5, 2) = answer.at(4, 6) = answer.at(6, 4) = D25;
    answer.at(2, 6) = answer.at(6, 2) = D26;

    answer.at(3, 3) = answer.at(3, 3) = D33;
    answer.at(3, 4) = answer.at(4, 3) = D34;
    answer.at(3, 5) = answer.at(5, 3) = D35;
    answer.at(3, 6) = answer.at(6, 3) = answer.at(4, 5)  = answer.at(5, 4) = D36;

    answer.times(6.);
}