double RCSDEMaterial :: giveNormalCrackingStress(GaussPoint *gp, double crackStrain, int i) // // returns receivers Normal Stress in crack i for given cracking strain // { double Gf, Ft, Le, answer, ef; RCM2MaterialStatus *status = static_cast< RCM2MaterialStatus * >( this->giveStatus(gp) ); Le = status->giveCharLength(i); Ft = this->computeStrength(gp, Le); Gf = this->give(pscm_Gf, gp); ef = Gf / ( Le * Ft ); if ( this->checkSizeLimit(gp, Le) ) { if ( crackStrain >= status->giveTempMaxCrackStrain(i) ) { // further softening answer = Ft * exp(-crackStrain / ef); } else { // crack closing // or unloading or reloading regime answer = Ft * crackStrain / status->giveTempMaxCrackStrain(i) * exp(-status->giveTempMaxCrackStrain(i) / ef); } } else { answer = 0.; } return answer; }
double Concrete3 :: giveNormalCrackingStress(GaussPoint *gp, double crackStrain, int i) // // returns receivers Normal Stress in crack i for given cracking strain // { double Cf, Ft, Gf, Le, answer, ef, minEffStrainForFullyOpenCrack; RCM2MaterialStatus *status = static_cast< RCM2MaterialStatus * >( this->giveStatus(gp) ); minEffStrainForFullyOpenCrack = this->giveMinCrackStrainsForFullyOpenCrack(gp, i); Cf = this->giveCrackingModulus(TangentStiffness, gp, crackStrain, i); // < 0 Le = status->giveCharLength(i); Ft = this->computeStrength(gp, Le); Gf = this->give(pscm_Gf, gp); if ( this->checkSizeLimit(gp, Le) ) { if ( softeningMode == linearSoftening ) { if ( ( crackStrain >= minEffStrainForFullyOpenCrack ) || ( status->giveTempMaxCrackStrain(i) >= minEffStrainForFullyOpenCrack ) ) { // fully open crack - no stiffness answer = 0.; } else if ( crackStrain >= status->giveTempMaxCrackStrain(i) ) { // further softening answer = Ft + Cf * crackStrain; } else if ( crackStrain <= 0. ) { // crack closing // no stress due to cracking answer = 0.; } else { // unloading or reloading regime answer = crackStrain * Ft * ( minEffStrainForFullyOpenCrack - status->giveTempMaxCrackStrain(i) ) / ( status->giveTempMaxCrackStrain(i) * minEffStrainForFullyOpenCrack ); } } else { // Exponential softening ef = Gf / ( Le * Ft ); if ( crackStrain >= status->giveTempMaxCrackStrain(i) ) { // further softening answer = Ft * exp(-crackStrain / ef); } else { // crack closing // or unloading or reloading regime answer = Ft * crackStrain / status->giveTempMaxCrackStrain(i) * exp(-status->giveTempMaxCrackStrain(i) / ef); } } } else { answer = 0.; } return answer; }
double RCSDEMaterial :: giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, double crackStrain, int i) // // returns current cracking modulus according to crackStrain for i-th // crackplane // now linear softening is implemented // see also CreateStatus () function. // softening modulus represents a relation between the normal crack strain // rate and the normal stress rate. // { // double Ee, Gf; double Gf, Cf, Ft, Le, ef; RCM2MaterialStatus *status = static_cast< RCM2MaterialStatus * >( this->giveStatus(gp) ); // // now we have to set proper reduced strength and softening modulus Et // in order to obtain energetically correct solution using the concept // of fracture energy Gf, which is a material constant. // //Ee = this->give(pscm_Ee); Gf = this->give(pscm_Gf, gp); Le = status->giveCharLength(i); Ft = this->computeStrength(gp, Le); //minEffStrainForFullyOpenCrack = this->giveMinCrackStrainsForFullyOpenCrack(gp,i); ef = Gf / ( Le * Ft ); if ( rMode == TangentStiffness ) { if ( this->checkSizeLimit(gp, Le) ) { if ( crackStrain >= status->giveTempMaxCrackStrain(i) ) { // further softening Cf = -Ft / ef *exp(-crackStrain / ef); } else { // unloading or reloading regime Cf = Ft / status->giveTempMaxCrackStrain(i) * exp(-status->giveTempMaxCrackStrain(i) / ef); } } else { Cf = 0.; } } else { if ( this->checkSizeLimit(gp, Le) ) { Cf = Ft / status->giveTempMaxCrackStrain(i) * exp(-status->giveTempMaxCrackStrain(i) / ef); } else { Cf = 0.; } } return Cf; }
double RCSDMaterial :: giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i) // // computes MinCrackStrainsForFullyOpenCrack for given gp and i-th crack // { RCM2MaterialStatus *status = static_cast< RCM2MaterialStatus * >( this->giveStatus(gp) ); double Le, Gf, Ft; Le = status->giveCharLength(i); Gf = this->give(pscm_Gf, gp); Ft = this->computeStrength(gp, Le); return 2.0 * Gf / ( Le * Ft ); }
double Concrete3 :: giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i) // // computes MinCrackStrainsForFullyOpenCrack for given gp and i-th crack // { if ( softeningMode == linearSoftening ) { RCM2MaterialStatus *status = static_cast< RCM2MaterialStatus * >( this->giveStatus(gp) ); double Le, Gf, Ft; Le = status->giveCharLength(i); Gf = this->give(pscm_Gf, gp); Ft = this->computeStrength(gp, Le); return 2.0 * Gf / ( Le * Ft ); } else { //return Gf/(Le*Ft); // Exponential softening return 1.e6; // Exponential softening } }