148 MatResponseMode rMode,
199 if ( interface ==
nullptr ) {
200 OOFEM_ERROR(
"element with no fiber support encountered");
218 double fiberYCoord = fiberGp->giveNaturalCoordinate(1);
219 double fiberZCoord = fiberGp->giveNaturalCoordinate(2);
221 interface->FiberedCrossSectionInterface_computeStrainVectorInFiber(fiberStrain, strain, fiberGp, tStep);
223 auto reducedFiberStress = fiberMat->giveRealStressVector_Fiber(fiberStrain, fiberGp, tStep);
227 answer.
at(1) += reducedFiberStress.at(1) * fiberWidth * fiberThick;
228 answer.
at(2) += reducedFiberStress.at(2) * fiberWidth * fiberThick;
229 answer.
at(3) += reducedFiberStress.at(3) * fiberWidth * fiberThick;
231 answer.
at(4) += ( reducedFiberStress.at(2) * fiberWidth * fiberThick * fiberYCoord -
232 reducedFiberStress.at(3) * fiberWidth * fiberThick * fiberZCoord );
233 answer.
at(5) += reducedFiberStress.at(1) * fiberWidth * fiberThick * fiberZCoord;
234 answer.
at(6) -= reducedFiberStress.at(1) * fiberWidth * fiberThick * fiberYCoord;
240 status->letTempStressVectorBe(answer);
269 OOFEM_ERROR(
"Not supported in given cross-section (yet).");
275 OOFEM_ERROR(
"Not supported in given cross-section.");
280 MatResponseMode rMode,
285 if ( mode == _2dBeam ) {
287 }
else if ( mode == _3dBeam ) {
289 }
else if ( mode == _2dPlate ) {
291 }
else if ( mode == _3dShell ) {
294 OOFEM_ERROR(
"Not implemented for bulk materials.");
330 double fiberYCoord2 = fiberYCoord * fiberYCoord;
331 double fiberZCoord2 = fiberZCoord * fiberZCoord;
336 beamStiffness.
at(1, 1) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick;
338 beamStiffness.
at(2, 2) += fiberMatrix.at(2, 2) * fiberWidth * fiberThick;
340 beamStiffness.
at(3, 3) += fiberMatrix.at(3, 3) * fiberWidth * fiberThick;
344 beamStiffness.
at(4, 4) += fiberMatrix.at(2, 2) * ( fiberWidth * fiberThick * fiberZCoord2 + fiberWidth * fiberThick * fiberYCoord2 );
346 beamStiffness.
at(5, 5) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick * fiberZCoord2;
347 beamStiffness.
at(6, 6) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick * fiberYCoord2;
350 return beamStiffness;
405 int size = gradientStressVector3d->
giveSize();
407 OOFEM_ERROR(
"gradientStressVector3d size mismatch");
412 for (
int i = 2; i <= 4; i++ ) {
413 gradientStressVector3d->
at(i) = 0.;
421 return gradientStressVector3d;
437 int size = gradientStrainVector3d->
giveSize();
439 OOFEM_ERROR(
"gradientStrainVector3d size mismatch");
444 for (
int i = 2; i <= 4; i++ ) {
445 gradientStrainVector3d->
at(i) = 0.;
453 return gradientStrainVector3d;
463 if ( type == IST_BeamForceMomentTensor ) {
466 }
else if ( type == IST_BeamStrainCurvatureTensor ) {
529 auto slave = masterGp->giveSlaveGaussPoint(i);
540 auto masterMode = masterGp->giveMaterialMode();
547 masterGp->gaussPoints [ j ] =
new GaussPoint(masterGp->giveIntegrationRule(), j + 1,
551 slave = masterGp->gaussPoints [ i ];
562 printf(
"Cross Section with properties : \n");
564 printf(
"Fiber Materials: \n");
566 printf(
"Fiber Thicks : \n");
568 printf(
"Fiber Widths : \n");
570 printf(
"Fiber y coordinates: \n");
572 printf(
"Fiber y coordinates: \n");
609 if ( masterMode == _3dBeam ) {
612 throw std::runtime_error(
"Unsupported mode");
622 }
else if ( aProperty ==
CS_Width ) {
624 }
else if ( aProperty ==
CS_Area ) {
638 if ( !this->
domain->giveMaterial(imat)->isCharacteristicMtrxSymmetric(rMode) ) {
#define REGISTER_CrossSection(class)
Dictionary propertyDictionary
virtual double give(CrossSectionProperty a, GaussPoint *gp) const
virtual void saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
void initializeFrom(InputRecord &ir) override
virtual void restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Material * giveMaterial(int n)
Domain * giveDomain() const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
virtual const char * giveClassName() const =0
FloatMatrixF< 9, 9 > give3dShellRotStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
static MaterialMode giveCorrespondingSlaveMaterialMode(MaterialMode)
FloatMatrixF< 3, 3 > give2dBeamStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 4, 4 > giveStiffnessMatrix_dPdF_PlaneStress(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
FloatArray fiberWidths
Width for each fiber.
FloatArrayF< 2 > giveRealStress_Warping(const FloatArrayF< 2 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 3 > giveRealStress_PlaneStress(const FloatArrayF< 3 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
bool isCharacteristicMtrxSymmetric(MatResponseMode mode) const override
void restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp) override
FloatArray fiberThicks
Thickness for each fiber.
FloatArrayF< 9 > giveFirstPKStress_3d(const FloatArrayF< 9 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 3 > giveGeneralizedStress_PlateSubSoil(const FloatArrayF< 3 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStrainVector3d) override
FloatMatrixF< 5, 5 > give2dPlateStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
double give(int aProperty, GaussPoint *gp) const override
FloatMatrixF< 3, 3 > giveStiffnessMatrix_PlaneStress(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 6 > giveGeneralizedStress_Beam3d(const FloatArrayF< 6 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 9, 9 > giveStiffnessMatrix_dPdF_3d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
double thick
Total thickness.
FloatMatrixF< 1, 1 > giveStiffnessMatrix_1d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 4 > giveFirstPKStress_PlaneStress(const FloatArrayF< 4 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
void printYourself() override
Prints receiver state on stdout. Useful for debugging.
FloatArrayF< 5 > giveGeneralizedStress_Plate(const FloatArrayF< 5 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 4, 4 > giveMembraneRotStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 1 > giveFirstPKStress_1d(const FloatArrayF< 1 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 3, 3 > give2dPlateSubSoilStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 1 > giveRealStress_1d(const FloatArrayF< 1 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 6, 6 > giveStiffnessMatrix_3d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 6, 6 > give3dBeamStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 9 > giveGeneralizedStress_ShellRot(const FloatArrayF< 9 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 8, 8 > give3dShellStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 5 > giveFirstPKStress_PlaneStrain(const FloatArrayF< 5 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 5, 5 > giveStiffnessMatrix_dPdF_PlaneStrain(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
GaussPoint * giveSlaveGaussPoint(GaussPoint *gp, int) const
IntArray fiberMaterials
Material of each fiber.
FloatArrayF< 8 > giveGeneralizedStress_Shell(const FloatArrayF< 8 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
int checkConsistency() override
FloatArrayF< 4 > giveRealStress_PlaneStrain(const FloatArrayF< 4 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 6 > giveRealStress_3d(const FloatArrayF< 6 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
void createMaterialStatus(GaussPoint &iGP) override
Material * giveMaterial(IntegrationPoint *ip) const override
hidden by virtual oofem::Material* TransportCrossSection::giveMaterial() const
FloatMatrixF< 1, 1 > giveStiffnessMatrix_dPdF_1d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void giveCharMaterialStiffnessMatrix_dPdF(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp) override
void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) override
FloatArrayF< 4 > giveGeneralizedStress_MembraneRot(const FloatArrayF< 4 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 3 > giveGeneralizedStress_Beam2d(const FloatArrayF< 3 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d) override
void initializeFrom(InputRecord &ir) override
FloatMatrixF< 4, 4 > giveStiffnessMatrix_PlaneStrain(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
double & at(std::size_t i)
Index giveSize() const
Returns the size of receiver.
double at(std::size_t i, std::size_t j) const
bool hasSlaveGaussPoint()
IntegrationPointStatus * setMaterialStatus(std::unique_ptr< IntegrationPointStatus > ptr, IntegrationPointStatusIDType key=IPSID_Default)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
IntegrationRule * giveIntegrationRule()
Returns corresponding integration rule to receiver.
Element * giveElement()
Returns corresponding element to receiver.
integrationDomain giveIntegrationDomain() const
virtual std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const
virtual void restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
virtual FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
virtual FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual FloatMatrixF< 3, 3 > giveFiberStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const
#define OOFEM_WARNING(...)
#define _IFT_FiberedCrossSection_width
#define _IFT_FiberedCrossSection_fiberzcentrecoords
#define _IFT_FiberedCrossSection_thick
#define _IFT_FiberedCrossSection_widths
#define _IFT_FiberedCrossSection_fiberycentrecoords
#define _IFT_FiberedCrossSection_fibermaterials
#define _IFT_FiberedCrossSection_thicks
static FloatArray Vec2(const double &a, const double &b)
CrossSectionProperty
List of properties possibly stored in a cross section.
GaussPoint IntegrationPoint
@ FiberedCrossSectionInterfaceType