void SimpleCrossSection :: give3dShellStiffMtrx(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) { StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( this->giveMaterial(gp) ); FloatMatrix mat3d; double thickness = this->give(CS_Thickness, gp); double thickness3 = thickness * thickness * thickness; mat->givePlaneStressStiffMtrx(mat3d, rMode, gp, tStep); answer.resize(8, 8); answer.zero(); for ( int i = 1; i <= 3; i++ ) { for ( int j = 1; j <= 3; j++ ) { answer.at(i, j) = mat3d.at(i, j) * thickness; } } for ( int i = 1; i <= 3; i++ ) { for ( int j = 1; j <= 3; j++ ) { answer.at(i + 3, j + 3) = mat3d.at(i, j) * thickness3 / 12.0; } } answer.at(8, 8) = answer.at(7, 7) = mat3d.at(3, 3) * thickness * ( 5. / 6. ); }
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 SimpleCrossSection :: giveMembraneRotStiffMtrx(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) { StructuralMaterial *mat; mat = dynamic_cast< StructuralMaterial * >( this->giveMaterial(gp) ); mat->givePlaneStressStiffMtrx(answer, ElasticStiffness, gp, tStep); answer.resizeWithData(4, 4); answer.at(4, 4) = this->give(CS_DrillingStiffness, gp); }
void SimpleCrossSection :: giveStiffnessMatrix_PlaneStress(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) { StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( this->giveMaterial(gp) ); mat->givePlaneStressStiffMtrx(answer, rMode, gp, tStep); }