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.); }