void SimpleCrossSection :: 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 { StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( this->giveMaterial(gp) ); if ( mode == _3dMat ) { mat->give3dMaterialStiffnessMatrix(answer, rMode, gp, tStep); } else if ( mode == _PlaneStress ) { mat->givePlaneStressStiffMtrx(answer, rMode, gp, tStep); } else if ( mode == _PlaneStrain ) { mat->givePlaneStrainStiffMtrx(answer, rMode, gp, tStep); } else if ( mode == _1dMat ) { mat->give1dStressStiffMtrx(answer, rMode, gp, tStep); } else { mat->giveStiffnessMatrix(answer, rMode, gp, tStep); } } }
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 FiberedCrossSection :: giveFiberMaterialStiffnessMatrix(FloatMatrix &fiberMatrix, MatResponseMode rMode, GaussPoint *layerGp, TimeStep *tStep) { StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( domain->giveMaterial( fiberMaterials.at( layerGp->giveNumber() ) ) ); mat->giveStiffnessMatrix(fiberMatrix, rMode, layerGp, tStep); }