void StructuralCrossSection :: computeStressIndependentStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *stepN, ValueModeType mode) // // returns initial strain vector induced by stress independent effects // like temperatue or shrinkage. // takes into account form of load vector assumed by engngModel (Incremental or Total Load form). // { StructuralMaterial *mat = ( StructuralMaterial * ) gp->giveElement()->giveMaterial(); FloatArray e0, fullAnswer; // // add parts caused by material // mat->computeStressIndependentStrainVector(answer, gp, stepN, mode); }
void SimpleCrossSection :: computeStressIndependentStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *stepN, ValueModeType mode) // // returns initial strain vector induced by stress independent effects // like temperatue or shrinkage. // takes into account form of load vector assumed by engngModel (Incremental or Total Load form). // { StructuralMaterial *mat = ( StructuralMaterial * ) gp->giveElement()->giveMaterial(); ///@todo Deprecated or not? If so, remove it! / Mikael #if 0 MaterialMode matmode = gp-> giveMaterialMode (); FloatArray et, e0, fullAnswer; double thick, width; if ((matmode == _2dBeam) || (matmode == _3dBeam) || (matmode == _3dShell) || (matmode == _2dPlate)) { StructuralElement *elem = (StructuralElement*)gp->giveElement(); elem -> computeResultingIPTemperatureAt (et, stepN, gp, mode); FloatArray redAnswer; if (et.giveSize() == 0) {answer.resize(0); return ;} if (et.giveSize() < 1) { _error ("computeStressIndependentStrainVector - Bad format of TemperatureLoad"); exit (1); } mat->giveThermalDilatationVector (e0, gp,stepN); if (matmode == _2dBeam) { answer.resize (3); answer.zero(); answer.at(1) = e0.at(1) * (et.at(1)- mat->giveReferenceTemperature()); if (et.giveSize() > 1) { thick = this->give(THICKNESS); answer.at(2) = e0.at(1) * et.at(2)/ thick; // kappa_x } } else if (matmode == _3dBeam) { answer.resize (6); answer.zero(); answer.at(1) = e0.at(1) * (et.at(1)- mat->giveReferenceTemperature()); if (et.giveSize() > 1) { thick = this->give(THICKNESS); width = this->give(WIDTH); answer.at(5) = e0.at(1) * et.at(2)/ thick; // kappa_y if (et.giveSize() > 2) answer.at(6) = e0.at(1) * et.at(3)/ width; // kappa_z } } else if (matmode == _2dPlate) { if (et.giveSize() > 1) { answer.resize (5); answer.zero(); thick = this->give(THICKNESS); if (et.giveSize() > 1) { answer.at(1) = e0.at(1) * et.at(2)/ thick; // kappa_x answer.at(2) = e0.at(2) * et.at(2)/ thick; // kappa_y } } } else if (matmode == _3dShell) { answer.resize (8); answer.zero(); answer.at(1) = e0.at(1) * (et.at(1)- mat->giveReferenceTemperature()); answer.at(2) = e0.at(2) * (et.at(1)- mat->giveReferenceTemperature()); if (et.giveSize() > 1) { thick = this->give(THICKNESS); answer.at(4) = e0.at(1) * et.at(2)/ thick; // kappa_x answer.at(5) = e0.at(2) * et.at(2)/ thick; // kappa_y } } else _error ("Unsupported material mode"); } else { mat->computeStressIndependentStrainVector (answer, gp, stepN, mode); } #endif mat->computeStressIndependentStrainVector(answer, gp, stepN, mode); }