void PerfectlyPlasticMaterial :: giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) // // // for case of perfectly plastic material // computes full elastic constitutive matrix for case of gp stress-strain state. // if strainIncrement == NULL a loading is assumed // // we follow terminology based on paper from R. de Borst: // "Smeared Cracking, plasticity, creep - Unified Aproach" // // if derived material would like to implement failure behaviour // it must redefine basic Give3dMaterialStiffnessMatrix function // in order to take possible failure (tension cracking) into account // { // FloatMatrix *de; // elastic matrix respecting fracture or failure StructuralMaterial *lMat = static_cast< StructuralMaterial * >( this->giveLinearElasticMaterial() ); if ( lMat->hasMaterialModeCapability( gp->giveMaterialMode() ) ) { FloatMatrix stiff; lMat->giveStiffnessMatrix(stiff, mode, gp, tStep); this->giveFullSymMatrixForm( answer, stiff, gp->giveMaterialMode() ); } else { OOFEM_ERROR("giveEffectiveMaterialStiffnessMatrix - unsupported material mode"); } }
void FiberedCrossSection :: giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) { MaterialMode mode = gp->giveMaterialMode(); if ( mode == _2dBeam ) { this->give2dBeamStiffMtrx(answer, rMode, gp, tStep); } else if ( mode == _3dBeam ) { this->give3dBeamStiffMtrx(answer, rMode, gp, tStep); } else if ( mode == _2dPlate ) { this->give2dPlateStiffMtrx(answer, rMode, gp, tStep); } else if ( mode == _3dShell ) { this->give3dShellStiffMtrx(answer, rMode, gp, tStep); } else { OOFEM_ERROR("Not implemented for bulk materials."); ///@todo What about the fibers?! Rather give just an error message if the fibers aren't supported than to just silently ignore them. #if 0 StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( gp->giveElement()->giveMaterial() ); if ( mat->hasMaterialModeCapability( gp->giveMaterialMode() ) ) { mat->giveStiffnessMatrix(answer, rMode, gp, tStep); } else { OOFEM_ERROR("unsupported StressStrainMode"); } #endif } }
void StructuralCrossSection :: giveRealStresses(FloatArray &answer, GaussPoint *gp, const FloatArray &strain, TimeStep *tStep) { MaterialMode mode = gp->giveMaterialMode(); if ( mode == _2dBeam ) { this->giveGeneralizedStress_Beam2d(answer, gp, strain, tStep); } else if ( mode == _3dBeam ) { this->giveGeneralizedStress_Beam3d(answer, gp, strain, tStep); } else if ( mode == _2dPlate ) { this->giveGeneralizedStress_Plate(answer, gp, strain, tStep); } else if ( mode == _3dShell ) { this->giveGeneralizedStress_Shell(answer, gp, strain, tStep); } else if ( mode == _3dMat ) { this->giveRealStress_3d(answer, gp, strain, tStep); } else if ( mode == _PlaneStrain ) { this->giveRealStress_PlaneStrain(answer, gp, strain, tStep); } else if ( mode == _PlaneStress ) { this->giveRealStress_PlaneStress(answer, gp, strain, tStep); } else if ( mode == _1dMat ) { this->giveRealStress_1d(answer, gp, strain, tStep); } else if ( mode == _Warping ) { this->giveRealStress_Warping(answer, gp, strain, tStep); } else { // This should never happen ? ///@todo this part only works for simple cross section and will be removed soon when new interface elements are done /JB StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( this->giveMaterial(gp) ); if ( mat->hasMaterialModeCapability( gp->giveMaterialMode() ) ) { mat->giveRealStressVector(answer, gp, strain, tStep); } else { OOFEM_ERROR("unsupported mode"); } } }
void SimpleCrossSection :: giveRealStresses(FloatArray &answer, MatResponseForm form, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep) // // this function returns a real stresses corresponding to // given totalStrain according to stressStrain mode stored // in each gp. // IMPORTANT: // { MaterialMode mode = gp->giveMaterialMode(); StructuralMaterial *mat = static_cast< StructuralMaterial * >( gp->giveElement()->giveMaterial() ); if ( mat->hasMaterialModeCapability(mode) ) { StructuralCrossSection :: giveRealStresses(answer, form, gp, totalStrain, tStep); return; } else { _error("giveRealStresses : unsupported mode"); } }