void RCM2Material :: giveCrackedStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *atTime) // // // Returns material incremental stiffness matrix for cracked concrete. // This matrix is composed from submatrix, each of them corresponds to // one active crack in material point. // when constructing submatrix, following assumptions are made: // // A salient characteriastic of crack formation concerns the fact that in most general case // of tree-dimensional solid only 3 out of 6 components of the crack strain rate vector // are possibly non-zero.(the normal and two shear strain rates). // We therefore assume that the stress-strain law for the crack has a structure // such that the other strains rate components vanish. Moreover we assume that // the novanishing strain rate components are only related to corresponding // stress rate components (submatrix has dimensions 3x3). // // if strainIncrement is defined (not null) then we take care about possible unlo&reloading // we don't teke care about possible cracking (or non-linear softening) during strain increment // this correction is made in this -> updateCrackStatus (gp); { RCM2MaterialStatus *status = ( RCM2MaterialStatus * ) this->giveStatus(gp); int i; int numberOfActiveCracks = status->giveNumberOfTempActiveCracks(); IntArray crackMap; status->giveCrackMap(crackMap); if ( numberOfActiveCracks == 0 ) { answer.resize(0, 0); return; } answer.resize(3, 3); answer.zero(); // loop over each active crack plane for ( i = 1; i <= 3; i++ ) { if ( crackMap.at(i) ) { // obtain incremental law for one crack answer.at(i, i) = this->giveCrackingModulus(rMode, gp, status->giveCrackStrain(i), i); } } }