35#ifndef layeredcrosssection_h
36#define layeredcrosssection_h
50#define _IFT_LayeredCrossSection_Name "layeredcs"
51#define _IFT_LayeredCrossSection_nlayers "nlayers"
52#define _IFT_LayeredCrossSection_layermaterials "layermaterials"
53#define _IFT_LayeredCrossSection_interfacematerials "interfacematerials"
54#define _IFT_LayeredCrossSection_layerRotations "rotations"
55#define _IFT_LayeredCrossSection_thicks "thicks"
56#define _IFT_LayeredCrossSection_widths "widths"
57#define _IFT_LayeredCrossSection_midsurf "midsurf"
58#define _IFT_LayeredCrossSection_nintegrationpoints "nintegrationpoints"
59#define _IFT_LayeredCrossSection_nlayerintegrationpoints "layerintegrationpoints"
60#define _IFT_LayeredCrossSection_initiationlimits "initiationlimits"
61#define _IFT_LayeredCrossSection_shearcoeff_xz "beamshearcoeffxz"
65class StructuralMaterial;
179 return this->layerMaterials.
at(layer);
185 return this->interfacerMaterials.
at(interface);
201 return this->layerMidZ.
at(layer);
204 return this->layerThicks.
at(layer);
207 return this->numberOfIntegrationPoints;
210 return this->midSurfaceZcoordFromBottom;
213 return this->midSurfaceXiCoordFromBottom;
219 const char *
giveClassName()
const override {
return "LayeredCrossSection"; }
301 const char *
giveClassName()
const override {
return "LayeredIntegrationRule"; }
Material * giveMaterial(int n)
Domain * giveDomain() const
IntegrationRule(int n, Element *e, int startIndx, int endIndx, bool dynamic)
virtual void computeStrainVectorInLayer(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *masterGp, GaussPoint *slaveGp, TimeStep *tStep)=0
LayeredCrossSectionInterface()
void printYourself() override
Prints receiver state on stdout. Useful for debugging.
int giveInterfaceMaterialNum(int interface)
FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *) override
FloatArrayF< 2 > giveRealStress_Warping(const FloatArrayF< 2 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 3, 3 > give2dBeamStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void giveInputRecord(DynamicInputRecord &input) override
void createMaterialStatus(GaussPoint &iGP) override
double giveMidSurfaceXiCoordFromBottom() const
FloatArrayF< 9 > giveGeneralizedStress_ShellRot(const FloatArrayF< 9 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArray layerRots
Rotation of the material in each layer.
FloatMatrixF< 5, 5 > giveStiffnessMatrix_dPdF_PlaneStrain(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Material * giveInterfaceMaterial(int interface)
FloatMatrixF< 6, 6 > give3dDegeneratedShellStiffMtrx(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const override
void setupLayeredIntegrationRule(std::vector< std::unique_ptr< IntegrationRule > > &layerIntegrationRulesArray, Element *el, int numInPlanePoints)
FloatMatrixF< 3, 3 > give2dPlateSubSoilStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArray layerThicks
Thickness for each layer.
int giveLayer(GaussPoint *gp) const
double giveLayerMidZ(int layer) const
FloatMatrixF< 4, 4 > giveStiffnessMatrix_PlaneStrain(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 5 > giveGeneralizedStress_Plate(const FloatArrayF< 5 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 8 > giveGeneralizedStress_Shell(const FloatArrayF< 8 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) override
int giveNumIntegrationPointsInLayer() const
double midSurfaceZcoordFromBottom
FloatArrayF< 3 > giveGeneralizedStress_Beam2d(const FloatArrayF< 3 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
double midSurfaceXiCoordFromBottom
int giveNumberOfLayers() const
double giveLayerThickness(int layer) const
void saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp) override
FloatMatrixF< 4, 4 > giveStiffnessMatrix_dPdF_PlaneStress(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 3, 3 > giveStiffnessMatrix_PlaneStress(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
double giveMidSurfaceZcoordFromBottom() const
IntArray layerMaterials
Material of each layer.
FloatMatrixF< 1, 1 > giveStiffnessMatrix_1d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *) override
FloatArrayF< 3 > giveRealStress_PlaneStress(const FloatArrayF< 3 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 4 > giveRealStress_PlaneStrain(const FloatArrayF< 4 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
IntArray layerIntegrationPoints
int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element) override
const char * giveClassName() const override
int checkConsistency() override
FloatArrayF< 4 > giveGeneralizedStress_MembraneRot(const FloatArrayF< 4 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
int packUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip) override
FloatArrayF< 6 > giveGeneralizedStress_Beam3d(const FloatArrayF< 6 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
IntArray interfacerMaterials
Interface (cohesive zone) material for each interface.
int unpackAndUpdateUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip) override
static MaterialMode giveCorrespondingSlaveMaterialMode(MaterialMode mode)
FloatArrayF< 1 > giveFirstPKStress_1d(const FloatArrayF< 1 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 4, 4 > giveMembraneRotStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void mapLayerGpCoordsToShellCoords(std::vector< std::unique_ptr< IntegrationRule > > &layerIntegrationRulesArray)
double computeIntegralThick() const
Returns the total thickness of all layers.
LayeredCrossSection(int n, Domain *d)
FloatArrayF< 3 > giveGeneralizedStress_PlateSubSoil(const FloatArrayF< 3 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 9, 9 > giveStiffnessMatrix_dPdF_3d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 6, 6 > give3dBeamStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 5, 5 > give2dPlateStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 1 > giveRealStress_1d(const FloatArrayF< 1 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
void initializeFrom(InputRecord &ir) override
double give(CrossSectionProperty a, GaussPoint *gp) const override
int giveSlaveGPIndex(int ilayer, int igp) const
void giveStiffnessMatrix_dCde(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp) override
void giveCharMaterialStiffnessMatrix_dPdF(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void giveCauchyStresses(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedFIncrement, TimeStep *tStep) override
FloatArrayF< 9 > giveFirstPKStress_3d(const FloatArrayF< 9 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
void setupLayerMidPlanes()
bool isCharacteristicMtrxSymmetric(MatResponseMode mode) const override
FloatArrayF< 5 > giveFirstPKStress_PlaneStrain(const FloatArrayF< 5 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
int numberOfIntegrationPoints
number of integration points per layer (for 3D elements)
int giveLayerMaterial(int layer) const
FloatArrayF< 6 > giveRealStress_3d(const FloatArrayF< 6 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
FloatArray layerWidths
Width for each layer.
void giveInterfaceXiCoords(FloatArray &answer) const
int giveIPValue(FloatArray &answer, GaussPoint *ip, InternalStateType type, TimeStep *tStep) override
FloatMatrixF< 6, 6 > giveStiffnessMatrix_3d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 8, 8 > give3dShellStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 9, 9 > give3dShellRotStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 6 > giveRealStress_3dDegeneratedShell(const FloatArrayF< 6 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
Material * giveMaterial(IntegrationPoint *ip) const override
hidden by virtual oofem::Material* TransportCrossSection::giveMaterial() const
GaussPoint * giveSlaveGaussPoint(GaussPoint *gp, int layer, int igp) const
int estimatePackSize(DataStream &buff, GaussPoint *ip) override
FloatMatrixF< 1, 1 > giveStiffnessMatrix_dPdF_1d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 4 > giveFirstPKStress_PlaneStress(const FloatArrayF< 4 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
const char * giveInputRecordName() const override
FloatArray layerMidZ
z-coord of the mid plane for each layer
LayeredIntegrationRule(int n, Element *e, int startIndx, int endIndx, bool dynamic=false)
IntArray upperInterfacePoints
const char * giveClassName() const override
IntArray lowerInterfacePoints
int SetUpPointsOnWedge(int nPointsTri, int nPointsDepth, MaterialMode mode) override
StructuralCrossSection(int n, Domain *d)
#define _IFT_LayeredCrossSection_Name
CrossSectionProperty
List of properties possibly stored in a cross section.
GaussPoint IntegrationPoint