OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
oofem::LayeredCrossSection Class Reference

This class implements a layered cross section in a finite element problem. More...

#include <layeredcrosssection.h>

+ Inheritance diagram for oofem::LayeredCrossSection:
+ Collaboration diagram for oofem::LayeredCrossSection:

Public Member Functions

 LayeredCrossSection (int n, Domain *d)
 
virtual ~LayeredCrossSection ()
 
virtual IRResultType initializeFrom (InputRecord *ir)
 Initializes receiver according to object description stored in input record. More...
 
virtual void giveInputRecord (DynamicInputRecord &input)
 Setups the input record string of receiver. More...
 
virtual void createMaterialStatus (GaussPoint &iGP)
 
virtual int setupIntegrationPoints (IntegrationRule &irule, int npoints, Element *element)
 Sets up integration rule for the given element. More...
 
virtual int setupIntegrationPoints (IntegrationRule &irule, int npointsXY, int npointsZ, Element *element)
 Sets up integration rule for the given element. More...
 
virtual void giveRealStress_3d (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
 
virtual void giveRealStress_3dDegeneratedShell (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
 
virtual void giveRealStress_PlaneStrain (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
 
virtual void giveRealStress_PlaneStress (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
 
virtual void giveRealStress_1d (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
 
virtual void giveRealStress_Warping (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
 
virtual void giveStiffnessMatrix_3d (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Method for computing the stiffness matrix. More...
 
virtual void giveStiffnessMatrix_PlaneStress (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 
virtual void giveStiffnessMatrix_PlaneStrain (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 
virtual void giveStiffnessMatrix_1d (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 
virtual void giveGeneralizedStress_Beam2d (FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
 Computes the generalized stress vector for given strain and integration point. More...
 
virtual void giveGeneralizedStress_Beam3d (FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
 
virtual void giveGeneralizedStress_Plate (FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
 
virtual void giveGeneralizedStress_Shell (FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
 
virtual void giveGeneralizedStress_MembraneRot (FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
 
virtual void giveGeneralizedStress_PlateSubSoil (FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
 
virtual void giveCharMaterialStiffnessMatrix (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Computes the stiffness matrix of receiver in given integration point, respecting its history. More...
 
virtual bool isCharacteristicMtrxSymmetric (MatResponseMode mode)
 Check for symmetry of stiffness matrix. More...
 
virtual void give2dBeamStiffMtrx (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Computes the stiffness matrix for 2d beams. More...
 
virtual void give3dBeamStiffMtrx (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Computes the stiffness matrix for 2d beams. More...
 
virtual void give2dPlateStiffMtrx (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Method for computing 2d plate stiffness matrix. More...
 
virtual void give3dShellStiffMtrx (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Method for computing 3d shell stiffness matrix. More...
 
virtual void give3dDegeneratedShellStiffMtrx (FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
 Method for computing 3d shell stiffness matrix on degenerated shell elements. More...
 
virtual void giveMembraneRotStiffMtrx (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Method for computing membrane stiffness matrix with added drilling stiffness. More...
 
virtual void give2dPlateSubSoilStiffMtrx (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Method for computing subsoil stiffness matrix for plates. More...
 
virtual FloatArrayimposeStressConstrainsOnGradient (GaussPoint *gp, FloatArray *)
 Returns modified gradient of stress vector, which is used to bring stresses back to yield surface. More...
 
virtual FloatArrayimposeStrainConstrainsOnGradient (GaussPoint *gp, FloatArray *)
 Returns modified gradient of strain vector, which is used to compute plastic strain increment. More...
 
virtual double give (CrossSectionProperty a, GaussPoint *gp)
 Returns the value of cross section property at given point. More...
 
virtual double give (CrossSectionProperty a, const FloatArray &coords, Element *elem, bool local)
 Returns the value of cross section property at given point (belonging to given element). More...
 
int giveNumberOfLayers ()
 
int giveLayer (GaussPoint *gp)
 
double computeIntegralThick ()
 Returns the total thickness of all layers. More...
 
void setupLayerMidPlanes ()
 
int giveLayerMaterial (int layer)
 
virtual MaterialgiveMaterial (IntegrationPoint *ip)
 Returns the material associated with the GP. More...
 
int giveInterfaceMaterialNum (int interface)
 
MaterialgiveInterfaceMaterial (int interface)
 
virtual int checkConsistency ()
 Allows programmer to test some internal data, before computation begins. More...
 
double giveLayerMidZ (int layer)
 
double giveLayerThickness (int layer)
 
int giveNumIntegrationPointsInLayer ()
 
double giveMidSurfaceZcoordFromBottom ()
 
double giveMidSurfaceXiCoordFromBottom ()
 
void giveInterfaceXiCoords (FloatArray &answer)
 
virtual const char * giveInputRecordName () const
 
virtual const char * giveClassName () const
 
virtual void printYourself ()
 Prints receiver state on stdout. Useful for debugging. More...
 
MaterialMode giveCorrespondingSlaveMaterialMode (MaterialMode mode)
 
GaussPointgiveSlaveGaussPoint (GaussPoint *gp, int slaveIndex)
 
virtual contextIOResultType saveIPContext (DataStream &stream, ContextMode mode, GaussPoint *gp)
 Stores integration point state to output stream. More...
 
virtual contextIOResultType restoreIPContext (DataStream &stream, ContextMode mode, GaussPoint *gp)
 Reads integration point state to output stream. More...
 
void mapLayerGpCoordsToShellCoords (std::vector< std::unique_ptr< IntegrationRule > > &layerIntegrationRulesArray)
 
void setupLayeredIntegrationRule (std::vector< std::unique_ptr< IntegrationRule > > &layerIntegrationRulesArray, Element *el, int numInPlanePoints)
 
virtual int giveIPValue (FloatArray &answer, GaussPoint *ip, InternalStateType type, TimeStep *tStep)
 Returns the integration point corresponding value in Reduced form. More...
 
virtual double give (int aProperty, GaussPoint *gp)
 Returns the value of cross section property. More...
 
virtual int packUnknowns (DataStream &buff, TimeStep *tStep, GaussPoint *ip)
 Pack all necessary data of integration point (according to element parallel_mode) into given communication buffer. More...
 
virtual int unpackAndUpdateUnknowns (DataStream &buff, TimeStep *tStep, GaussPoint *ip)
 Unpack and updates all necessary data of given integration point (according to element parallel_mode) into given communication buffer. More...
 
virtual int estimatePackSize (DataStream &buff, GaussPoint *ip)
 Estimates the necessary pack size to hold all packed data of receiver. More...
 
virtual void giveFirstPKStresses (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedFIncrement, TimeStep *tStep)
 Computes the First Piola-Kirchoff stress vector for a given deformation gradient and integration point. More...
 
virtual void giveCauchyStresses (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedFIncrement, TimeStep *tStep)
 Computes the Cauchy stress vector for a given increment of deformation gradient and given integration point. More...
 
virtual void giveStiffnessMatrix_dPdF (FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
 Computes the material stiffness matrix dPdF of receiver in a given integration point, respecting its history. More...
 
virtual void giveStiffnessMatrix_dCde (FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
 Computes the material stiffness matrix dCde of receiver in a given integration point, respecting its history. More...
 
- Public Member Functions inherited from oofem::StructuralCrossSection
 StructuralCrossSection (int n, Domain *d)
 Constructor. More...
 
virtual ~StructuralCrossSection ()
 Destructor. More...
 
virtual void giveEshelbyStresses (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedvF, TimeStep *tStep)
 Computes the Eshelby stress vector. More...
 
virtual void give3dBeamSubSoilStiffMtrx (FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
 Method for computing subsoil stiffness matrix for 2d beams. More...
 
virtual int testCrossSectionExtension (CrossSectExtension ext)
 Returns nonzero, if receiver implements required extension. More...
 
virtual InterfacegiveMaterialInterface (InterfaceType t, IntegrationPoint *ip)
 
void giveRealStresses (FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
 Computes the real stress vector for given strain and integration point. More...
 
virtual void giveGeneralizedStress_3dBeamSubSoil (FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
 
- Public Member Functions inherited from oofem::CrossSection
 CrossSection (int n, Domain *d)
 Constructor. More...
 
virtual ~CrossSection ()
 Destructor. More...
 
int giveSetNumber () const
 
virtual bool hasProperty (CrossSectionProperty a)
 Returns true if the dictionary contains the requested property. More...
 
virtual double predictRelativeComputationalCost (GaussPoint *ip)
 Returns the weight representing relative computational cost of receiver The reference cross section is integral model in plane stress. More...
 
virtual double giveRelativeSelfComputationalCost ()
 Returns the weight representing relative computational cost of receiver The reference element is integral model in plane stress. More...
 
virtual double predictRelativeRedistributionCost (GaussPoint *gp)
 
- Public Member Functions inherited from oofem::FEMComponent
 FEMComponent (int n, Domain *d)
 Regular constructor, creates component with given number and belonging to given domain. More...
 
virtual ~FEMComponent ()
 Virtual destructor. More...
 
DomaingiveDomain () const
 
virtual void setDomain (Domain *d)
 Sets associated Domain. More...
 
int giveNumber () const
 
void setNumber (int num)
 Sets number of receiver. More...
 
virtual void updateLocalNumbering (EntityRenumberingFunctor &f)
 Local renumbering support. More...
 
virtual contextIOResultType saveContext (DataStream &stream, ContextMode mode, void *obj=NULL)
 Stores receiver state to output stream. More...
 
virtual contextIOResultType restoreContext (DataStream &stream, ContextMode mode, void *obj=NULL)
 Restores the receiver state previously written in stream. More...
 
virtual void printOutputAt (FILE *file, TimeStep *tStep)
 Prints output of receiver to stream, for given time step. More...
 
virtual InterfacegiveInterface (InterfaceType t)
 Interface requesting service. More...
 
std::string errorInfo (const char *func) const
 Returns string for prepending output (used by error reporting macros). More...
 

Protected Member Functions

double giveArea ()
 

Protected Attributes

IntArray layerMaterials
 Material of each layer. More...
 
IntArray interfacerMaterials
 Interface (cohesive zone) material for each interface. More...
 
FloatArray layerThicks
 Thickness for each layer. More...
 
FloatArray layerWidths
 Width for each layer. More...
 
FloatArray layerMidZ
 z-coord of the mid plane for each layer More...
 
FloatArray layerRots
 Rotation of the material in each layer. More...
 
int numberOfLayers
 
int numberOfIntegrationPoints
 num integration points per layer More...
 
double midSurfaceZcoordFromBottom
 
double midSurfaceXiCoordFromBottom
 
double totalThick
 
double area
 
- Protected Attributes inherited from oofem::CrossSection
Dictionary propertyDictionary
 Dictionary for storing cross section parameters (like dimensions). More...
 
int setNumber
 
- Protected Attributes inherited from oofem::FEMComponent
int number
 Component number. More...
 
Domaindomain
 Link to domain object, useful for communicating with other FEM components. More...
 

Detailed Description

This class implements a layered cross section in a finite element problem.

A cross section is an attribute of a domain. It is usually also attribute of many elements.

The attribute 'propertyDictionary' contains all the properties of a layered cross section, like thickness and width of each layer. The attribute 'layerMaterials' contains an array of Materials corresponding to each layer.

It uses master - slave GaussPoint approach, where master gp has more slaves gp. slave gp represent for each layer material point. It's coordinate sections contains z-coordinate (-1,1) from mid-section. The slaves are manage completely ( created, saved their context.,,,) from this class. Master gp only deletes slaves in destructor.

Tasks:

  • Returning standard material stiffness matrices (like 3d stress-strain, 2d plane , plate, 3d beam, 2d beam ..) according to current state determined by parameter StressMode by calling material and by possible modifying returned matrix (for example in layered mode approach each layer is asked for 3dMaterialStiffness and this is integrated for example over thickness for plate bending problems).
  • Returning RealStress state in Gauss point and for given Stress mode.
  • Returning a properties of cross section like thickness or area.

Definition at line 91 of file layeredcrosssection.h.

Constructor & Destructor Documentation

oofem::LayeredCrossSection::LayeredCrossSection ( int  n,
Domain d 
)
inline

Definition at line 108 of file layeredcrosssection.h.

Member Function Documentation

int oofem::LayeredCrossSection::checkConsistency ( )
virtual

Allows programmer to test some internal data, before computation begins.

For example, one may use this function, to ensure that element has material with required capabilities is assigned to element. This must be done after all mesh components are instanciated.

Returns
Nonzero if receiver is consistent.

Implements oofem::StructuralCrossSection.

Definition at line 1415 of file layeredcrosssection.C.

References oofem::FEMComponent::giveClassName(), and OOFEM_WARNING.

Referenced by giveInterfaceMaterial().

virtual int oofem::LayeredCrossSection::estimatePackSize ( DataStream buff,
GaussPoint ip 
)
inlinevirtual

Estimates the necessary pack size to hold all packed data of receiver.

The corresponding material model service is invoked. The nature of packed data is typically material model dependent.

Parameters
buffCommunication buffer.
ipIntegration point.
Returns
Estimate of pack size.

Implements oofem::CrossSection.

Definition at line 249 of file layeredcrosssection.h.

References OOFEM_ERROR.

double oofem::LayeredCrossSection::give ( CrossSectionProperty  a,
GaussPoint gp 
)
virtual
double oofem::LayeredCrossSection::give ( CrossSectionProperty  a,
const FloatArray coords,
Element elem,
bool  local 
)
virtual

Returns the value of cross section property at given point (belonging to given element).

the point coordinates can be specified using its local element coordinates or global coordinates (one of these two can be set to NULL) The default implementation assumes constant properties stored in propertyDictionary.

Parameters
aId of requested property.
coordslocal or global coordinates (determined by local parameter) of point of interest
elemreference to underlying element containing given point
gpIntegration point
Returns
Property value.

Reimplemented from oofem::CrossSection.

Definition at line 1244 of file layeredcrosssection.C.

References computeIntegralThick(), oofem::CS_Area, oofem::CS_BottomZCoord, oofem::CS_NumLayers, oofem::CS_Thickness, oofem::CS_TopZCoord, oofem::CrossSection::give(), giveArea(), midSurfaceZcoordFromBottom, numberOfLayers, and totalThick.

double oofem::LayeredCrossSection::give ( int  aProperty,
GaussPoint gp 
)
virtual

Returns the value of cross section property.

Parameters
aPropertyId of requested property.
gpIntegration point.
Returns
Property value.

Reimplemented from oofem::CrossSection.

Definition at line 1500 of file layeredcrosssection.C.

References oofem::Material::give().

void oofem::LayeredCrossSection::give2dBeamStiffMtrx ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Computes the stiffness matrix for 2d beams.

Parameters
answerThe requested matrix.
modeMaterial response mode.
gpIntegration point.
tStepTime step.
Todo:
The logic in this whole class is pretty messy to support both slave-gp's and normal gps. Rethinking the approach is necessary. Just using the gp number doesn't nicely support more than 1 gp per layer. Must rethink.

Implements oofem::StructuralCrossSection.

Definition at line 694 of file layeredcrosssection.C.

References oofem::FloatArray::at(), oofem::FloatMatrix::at(), oofem::CS_BottomZCoord, oofem::CS_TopZCoord, oofem::FEMComponent::domain, give(), oofem::StructuralMaterial::give2dBeamLayerStiffMtrx(), giveLayerMaterial(), oofem::Domain::giveMaterial(), oofem::GaussPoint::giveNaturalCoordinate(), giveSlaveGaussPoint(), layerRots, layerThicks, layerWidths, numberOfLayers, OOFEM_ERROR, oofem::FloatMatrix::resize(), and oofem::FloatMatrix::zero().

Referenced by giveCharMaterialStiffnessMatrix(), and ~LayeredCrossSection().

void oofem::LayeredCrossSection::give2dPlateStiffMtrx ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Method for computing 2d plate stiffness matrix.

Parameters
answerStiffness matrix.
modeMaterial response mode.
gpIntegration point, which load history is used.
tStepTime step (most models are able to respond only when tStep is current time step).
Todo:
Just using the gp number doesn't nicely support more than 1 gp per layer. Must rethink.

Implements oofem::StructuralCrossSection.

Definition at line 509 of file layeredcrosssection.C.

References oofem::FloatArray::at(), oofem::FloatMatrix::at(), oofem::CS_BottomZCoord, oofem::CS_TopZCoord, oofem::FEMComponent::domain, give(), giveLayerMaterial(), oofem::Domain::giveMaterial(), oofem::GaussPoint::giveNaturalCoordinate(), oofem::StructuralMaterial::givePlateLayerStiffMtrx(), giveSlaveGaussPoint(), layerRots, layerThicks, layerWidths, M_PI, numberOfLayers, oofem::FloatMatrix::resize(), oofem::FloatMatrix::rotatedWith(), and oofem::FloatMatrix::zero().

Referenced by giveCharMaterialStiffnessMatrix(), and ~LayeredCrossSection().

void oofem::LayeredCrossSection::give2dPlateSubSoilStiffMtrx ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Method for computing subsoil stiffness matrix for plates.

Parameters
answerStiffness matrix.
modeMaterial response mode.
gpIntegration point, which load history is used.
tStepTime step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 768 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::give3dBeamStiffMtrx ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Computes the stiffness matrix for 2d beams.

Parameters
answerThe requested matrix.
modeMaterial response mode.
gpIntegration point.
tStepTime step.

Implements oofem::StructuralCrossSection.

Definition at line 755 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by giveCharMaterialStiffnessMatrix(), and ~LayeredCrossSection().

void oofem::LayeredCrossSection::give3dDegeneratedShellStiffMtrx ( FloatMatrix answer,
MatResponseMode  rMode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Method for computing 3d shell stiffness matrix on degenerated shell elements.

Parameters
answerStiffness matrix.
modeMaterial response mode.
gpIntegration point, which load history is used.
tStepTime step (most models are able to respond only when tStep is current time step).
Todo:
  • check-V

Reimplemented from oofem::StructuralCrossSection.

Definition at line 683 of file layeredcrosssection.C.

References oofem::FloatMatrix::resize(), and oofem::FloatMatrix::zero().

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::give3dShellStiffMtrx ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Method for computing 3d shell stiffness matrix.

Parameters
answerStiffness matrix.
modeMaterial response mode.
gpIntegration point, which load history is used.
tStepTime step (most models are able to respond only when tStep is current time step).
Todo:
The logic in this whole class is pretty messy to support both slave-gp's and normal gps. Rethinking the approach is necessary. Just using the gp number doesn't nicely support more than 1 gp per layer. Must rethink.

Implements oofem::StructuralCrossSection.

Definition at line 590 of file layeredcrosssection.C.

References oofem::FloatArray::at(), oofem::FloatMatrix::at(), oofem::CS_BottomZCoord, oofem::CS_TopZCoord, oofem::FEMComponent::domain, give(), giveLayerMaterial(), oofem::Domain::giveMaterial(), oofem::GaussPoint::giveNaturalCoordinate(), oofem::StructuralMaterial::givePlateLayerStiffMtrx(), giveSlaveGaussPoint(), layerRots, layerThicks, layerWidths, numberOfLayers, oofem::FloatMatrix::resize(), oofem::FloatMatrix::rotatedWith(), and oofem::FloatMatrix::zero().

Referenced by giveCharMaterialStiffnessMatrix(), and ~LayeredCrossSection().

double oofem::LayeredCrossSection::giveArea ( )
protected

Definition at line 1270 of file layeredcrosssection.C.

References area, oofem::FloatArray::dotProduct(), layerThicks, and layerWidths.

Referenced by give(), and giveStiffnessMatrix_dCde().

virtual void oofem::LayeredCrossSection::giveCauchyStresses ( FloatArray answer,
GaussPoint gp,
const FloatArray reducedFIncrement,
TimeStep tStep 
)
inlinevirtual

Computes the Cauchy stress vector for a given increment of deformation gradient and given integration point.

The service should use previously reached equilibrium history variables. Also it should update temporary history variables in status according to newly reached state. The temporary history variables are moved into equilibrium ones after global structure equilibrium has been reached by iteration process. Elements should always pass their requests to their cross section model, which performs necessary integration over its volume and invokes necessary material services for corresponding material model defined for given integration point.

Parameters
answerContains the Cauchy stress.
gpIntegration point.
reducedFIncrementIncrement of the deformation gradient vector in reduced form.
Todo:
should this then be in a multiplicative way? /JB
Parameters
tStepCurrent time step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 258 of file layeredcrosssection.h.

References OOFEM_ERROR.

void oofem::LayeredCrossSection::giveCharMaterialStiffnessMatrix ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Computes the stiffness matrix of receiver in given integration point, respecting its history.

The algorithm should use temporary or equilibrium history variables stored in integration point status to compute and return required result. Elements should always pass their requests to their cross section model, which performs necessary integration over its volume and invokes necessary material services for corresponding material model defined for given integration point.

Parameters
answerContains result.
modeMaterial response mode.
gpIntegration point.
tStepTime step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 476 of file layeredcrosssection.C.

References oofem::FEMComponent::domain, give2dBeamStiffMtrx(), give2dPlateStiffMtrx(), give3dBeamStiffMtrx(), give3dShellStiffMtrx(), oofem::GaussPoint::giveIntegrationRule(), giveLayerMaterial(), oofem::Domain::giveMaterial(), oofem::GaussPoint::giveMaterialMode(), oofem::GaussPoint::giveNumber(), oofem::IntegrationRule::giveNumberOfIntegrationPoints(), oofem::StructuralMaterial::giveStiffnessMatrix(), oofem::StructuralMaterial::hasMaterialModeCapability(), numberOfLayers, and OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

virtual const char* oofem::LayeredCrossSection::giveClassName ( ) const
inlinevirtual
MaterialMode oofem::LayeredCrossSection::giveCorrespondingSlaveMaterialMode ( MaterialMode  mode)

Definition at line 1177 of file layeredcrosssection.C.

References oofem::__MaterialModeToString(), and OOFEM_ERROR.

Referenced by giveClassName(), and giveSlaveGaussPoint().

virtual void oofem::LayeredCrossSection::giveFirstPKStresses ( FloatArray answer,
GaussPoint gp,
const FloatArray reducedFIncrement,
TimeStep tStep 
)
inlinevirtual

Computes the First Piola-Kirchoff stress vector for a given deformation gradient and integration point.

The service should use previously reached equilibrium history variables. Also it should update temporary history variables in status according to newly reached state. The temporary history variables are moved into equilibrium ones after global structure equilibrium has been reached by iteration process. Elements should always pass their requests to their cross section model, which performs necessary integration over its volume and invokes necessary material services for corresponding material model defined for given integration point.

Parameters
answerContains the First Piola-Kirchoff stresses.
gpIntegration point.
reducedFIncrementIncrement of the deformation gradient vector in reduced form.
Todo:
should this then be in a multiplicative way? /JB
Parameters
tStepCurrent time step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 256 of file layeredcrosssection.h.

References OOFEM_ERROR.

void oofem::LayeredCrossSection::giveGeneralizedStress_Beam2d ( FloatArray answer,
GaussPoint gp,
const FloatArray generalizedStrain,
TimeStep tStep 
)
virtual

Computes the generalized stress vector for given strain and integration point.

Parameters
answerContains result.
gpIntegration point.
generalizedStrainStrain vector in reduced generalized form.
tStepCurrent time step (most models are able to respond only when tStep is current time step).
Todo:
This should be replaced with a general "CrossSectionStatus"

Implements oofem::StructuralCrossSection.

Definition at line 241 of file layeredcrosssection.C.

References oofem::IntArray::at(), oofem::FloatArray::at(), oofem::CS_BottomZCoord, oofem::CS_TopZCoord, oofem::FEMComponent::domain, give(), oofem::GaussPoint::giveElement(), oofem::FEMComponent::giveInterface(), oofem::Domain::giveMaterial(), oofem::GaussPoint::giveNaturalCoordinate(), oofem::StructuralMaterial::giveRealStressVector_2dBeamLayer(), giveSlaveGaussPoint(), oofem::LayeredCrossSectionInterfaceType, layerMaterials, layerRots, layerThicks, layerWidths, oofem::StructuralMaterialStatus::letTempStrainVectorBe(), oofem::StructuralMaterialStatus::letTempStressVectorBe(), numberOfLayers, OOFEM_ERROR, oofem::FloatArray::resize(), and oofem::FloatArray::zero().

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveGeneralizedStress_Beam3d ( FloatArray answer,
GaussPoint gp,
const FloatArray generalizedStrain,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 295 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveGeneralizedStress_MembraneRot ( FloatArray answer,
GaussPoint gp,
const FloatArray generalizedStrain,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 464 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveGeneralizedStress_PlateSubSoil ( FloatArray answer,
GaussPoint gp,
const FloatArray generalizedStrain,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 470 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

virtual const char* oofem::LayeredCrossSection::giveInputRecordName ( ) const
inlinevirtual
Returns
Input record name of the receiver.

Implements oofem::FEMComponent.

Definition at line 219 of file layeredcrosssection.h.

References _IFT_LayeredCrossSection_Name.

int oofem::LayeredCrossSection::giveInterfaceMaterialNum ( int  interface)
inline
int oofem::LayeredCrossSection::giveIPValue ( FloatArray answer,
GaussPoint ip,
InternalStateType  type,
TimeStep tStep 
)
virtual

Returns the integration point corresponding value in Reduced form.

Parameters
answercontain corresponding ip value, zero sized if not available
ipIntegration point.
typeDetermines the type of internal variable.
tStepTime step.
Returns
Nonzero if o.k, zero otherwise.
Todo:
so far this only works for elements where each layer has its own integration rule

Reimplemented from oofem::CrossSection.

Definition at line 1436 of file layeredcrosssection.C.

References oofem::_Cube, oofem::_Wedge, oofem::FloatArray::at(), oofem::IntegrationRule::giveIntegrationDomain(), oofem::GaussPoint::giveIntegrationRule(), oofem::giveInternalStateValueType(), oofem::Material::giveIPValue(), oofem::GaussPoint::giveNumber(), oofem::IntegrationRule::giveNumber(), oofem::IntegrationRule::giveNumberOfIntegrationPoints(), oofem::ISVT_SCALAR, oofem::ISVT_TENSOR_S3, oofem::ISVT_TENSOR_S3E, oofem::ISVT_VECTOR, and M_PI.

Referenced by giveClassName().

int oofem::LayeredCrossSection::giveLayer ( GaussPoint gp)
Material * oofem::LayeredCrossSection::giveMaterial ( IntegrationPoint ip)
virtual

Returns the material associated with the GP.

Default implementation uses gp->giveMaterial() for backwards compatibility, but it should be overloaded in each specialized cross-section.

Todo:
We should keep track in integration point (integration rule) what material from layer is assigned. Otherwise difficulties due to different elements and IP numbering.

Reimplemented from oofem::StructuralCrossSection.

Definition at line 960 of file layeredcrosssection.C.

References oofem::_Cube, oofem::_Wedge, oofem::IntArray::at(), oofem::FEMComponent::domain, oofem::IntegrationRule::giveIntegrationDomain(), oofem::GaussPoint::giveIntegrationRule(), oofem::Domain::giveMaterial(), oofem::GaussPoint::hasSlaveGaussPoint(), and layerMaterials.

Referenced by giveLayerMaterial().

void oofem::LayeredCrossSection::giveMembraneRotStiffMtrx ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Method for computing membrane stiffness matrix with added drilling stiffness.

Parameters
answerStiffness matrix.
modeMaterial response mode.
gpIntegration point, which load history is used.
tStepTime step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 762 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

double oofem::LayeredCrossSection::giveMidSurfaceXiCoordFromBottom ( )
inline

Definition at line 213 of file layeredcrosssection.h.

References giveInterfaceXiCoords(), and midSurfaceXiCoordFromBottom.

void oofem::LayeredCrossSection::giveRealStress_1d ( FloatArray answer,
GaussPoint gp,
const FloatArray reducedStrain,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 158 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveRealStress_3dDegeneratedShell ( FloatArray answer,
GaussPoint gp,
const FloatArray reducedStrain,
TimeStep tStep 
)
virtual
Todo:
  • check-V

Reimplemented from oofem::StructuralCrossSection.

Definition at line 97 of file layeredcrosssection.C.

References oofem::FloatArray::resize(), and oofem::FloatArray::zero().

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveRealStress_PlaneStrain ( FloatArray answer,
GaussPoint gp,
const FloatArray reducedStrain,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 107 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveRealStress_Warping ( FloatArray answer,
GaussPoint gp,
const FloatArray reducedStrain,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 165 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveStiffnessMatrix_1d ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 234 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::giveStiffnessMatrix_3d ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Method for computing the stiffness matrix.

Parameters
answerStiffness matrix.
modeMaterial response mode.
gpIntegration point, which load history is used.
tStepTime step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 172 of file layeredcrosssection.C.

References oofem::_Cube, oofem::_Wedge, oofem::FloatArray::at(), oofem::FEMComponent::domain, oofem::IntegrationRule::giveIntegrationDomain(), oofem::GaussPoint::giveIntegrationRule(), giveLayerMaterial(), oofem::Domain::giveMaterial(), oofem::GaussPoint::giveNumber(), oofem::IntegrationRule::giveNumberOfIntegrationPoints(), layerRots, M_PI, numberOfLayers, OOFEM_ERROR, and oofem::FloatMatrix::rotatedWith().

Referenced by ~LayeredCrossSection().

virtual void oofem::LayeredCrossSection::giveStiffnessMatrix_dCde ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
inlinevirtual

Computes the material stiffness matrix dCde of receiver in a given integration point, respecting its history.

The algorithm should use temporary or equilibrium history variables stored in integration point status to compute and return required result. Elements should always pass their requests to their cross section model, which performs necessary integration over its volume and invokes necessary material services for corresponding material model defined for given integration point.

Parameters
answerContains result.
modeMaterial response mode.
gpIntegration point.
tStepTime step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 262 of file layeredcrosssection.h.

References giveArea(), and OOFEM_ERROR.

virtual void oofem::LayeredCrossSection::giveStiffnessMatrix_dPdF ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
inlinevirtual

Computes the material stiffness matrix dPdF of receiver in a given integration point, respecting its history.

The algorithm should use temporary or equilibrium history variables stored in integration point status to compute and return required result. Elements should always pass their requests to their cross section model, which performs necessary integration over its volume and invokes necessary material services for corresponding material model defined for given integration point.

Parameters
answerContains result.
modeMaterial response mode.
gpIntegration point.
tStepTime step (most models are able to respond only when tStep is current time step).

Implements oofem::StructuralCrossSection.

Definition at line 260 of file layeredcrosssection.h.

References OOFEM_ERROR.

void oofem::LayeredCrossSection::giveStiffnessMatrix_PlaneStrain ( FloatMatrix answer,
MatResponseMode  mode,
GaussPoint gp,
TimeStep tStep 
)
virtual

Implements oofem::StructuralCrossSection.

Definition at line 227 of file layeredcrosssection.C.

References OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

FloatArray * oofem::LayeredCrossSection::imposeStrainConstrainsOnGradient ( GaussPoint gp,
FloatArray gradientStressVector3d 
)
virtual

Returns modified gradient of strain vector, which is used to compute plastic strain increment.

Imposes zeros on places, where zero strain occurs or energetically connected stress is prescribed to be zero.

See also
imposeStressConstrainsOnGradient
Parameters
gpIntegration point.
gradientStressVector3dGeneral 3d stress gradient.

Reimplemented from oofem::StructuralCrossSection.

Definition at line 816 of file layeredcrosssection.C.

References oofem::FloatArray::at(), oofem::GaussPoint::giveMaterialMode(), oofem::FloatArray::giveSize(), oofem::StructuralCrossSection::imposeStrainConstrainsOnGradient(), and OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

FloatArray * oofem::LayeredCrossSection::imposeStressConstrainsOnGradient ( GaussPoint gp,
FloatArray gradientStressVector3d 
)
virtual

Returns modified gradient of stress vector, which is used to bring stresses back to yield surface.

Method imposes zeros on places, where zero stress occurs. if energetically connected strain is zero, we do not impose zero there, because stress exist and must be taken into account when computing yield function. In such case a problem is assumed to be full 3d with some explicit strain equal to 0. On the other hand, if some stress is imposed to be zero, we understand such case as subspace of 3d case (like a classical plane stress problem, with no tracing of e_z, sigma_z)

Parameters
gpIntegration point.
gradientStressVector3dGeneral 3d stress gradient.

Reimplemented from oofem::StructuralCrossSection.

Definition at line 776 of file layeredcrosssection.C.

References oofem::FloatArray::at(), oofem::GaussPoint::giveMaterialMode(), oofem::FloatArray::giveSize(), oofem::StructuralCrossSection::imposeStressConstrainsOnGradient(), and OOFEM_ERROR.

Referenced by ~LayeredCrossSection().

IRResultType oofem::LayeredCrossSection::initializeFrom ( InputRecord ir)
virtual

Initializes receiver according to object description stored in input record.

This function is called immediately after creating object using constructor. Input record can be imagined as data record in component database belonging to receiver. Receiver may use value-name extracting functions to extract particular field from record.

See also
IR_GIVE_FIELD
IR_GIVE_OPTIONAL_FIELD
Parameters
irInput record to initialize from.
Returns
IRResultType

Reimplemented from oofem::CrossSection.

Definition at line 849 of file layeredcrosssection.C.

References _IFT_LayeredCrossSection_interfacematerials, _IFT_LayeredCrossSection_layermaterials, _IFT_LayeredCrossSection_layerRotations, _IFT_LayeredCrossSection_midsurf, _IFT_LayeredCrossSection_nintegrationpoints, _IFT_LayeredCrossSection_nlayers, _IFT_LayeredCrossSection_thicks, _IFT_LayeredCrossSection_widths, oofem::FloatArray::add(), oofem::IntArray::add(), oofem::IntArray::at(), oofem::FloatArray::at(), computeIntegralThick(), oofem::IntArray::giveSize(), oofem::FloatArray::giveSize(), oofem::CrossSection::initializeFrom(), interfacerMaterials, IR_GIVE_FIELD, IR_GIVE_OPTIONAL_FIELD, oofem::IRRT_BAD_FORMAT, oofem::IRRT_OK, layerMaterials, layerRots, layerThicks, layerWidths, midSurfaceXiCoordFromBottom, midSurfaceZcoordFromBottom, numberOfIntegrationPoints, numberOfLayers, OOFEM_WARNING, oofem::IntArray::resize(), oofem::FloatArray::resize(), setupLayerMidPlanes(), oofem::FloatArray::zero(), and oofem::IntArray::zero().

Referenced by ~LayeredCrossSection().

bool oofem::LayeredCrossSection::isCharacteristicMtrxSymmetric ( MatResponseMode  rMode)
virtual

Check for symmetry of stiffness matrix.

Default implementation returns true. It can be moved to base Cross section class in the future.

Parameters
rModeResponse mode of material.
Returns
True if stiffness matrix of receiver is symmetric.

Implements oofem::StructuralCrossSection.

Definition at line 1280 of file layeredcrosssection.C.

References oofem::FEMComponent::domain, oofem::Domain::giveMaterial(), and numberOfLayers.

Referenced by ~LayeredCrossSection().

void oofem::LayeredCrossSection::mapLayerGpCoordsToShellCoords ( std::vector< std::unique_ptr< IntegrationRule > > &  layerIntegrationRulesArray)
virtual int oofem::LayeredCrossSection::packUnknowns ( DataStream buff,
TimeStep tStep,
GaussPoint ip 
)
inlinevirtual

Pack all necessary data of integration point (according to element parallel_mode) into given communication buffer.

The corresponding material model service for particular integration point is invoked. The nature of packed data is material model dependent. Typically, for material of "local" response (response depends only on integration point local state) no data are exchanged. For "nonlocal" constitutive models the send/receive of local values which undergo averaging is performed between local and corresponding remote elements.

Parameters
buffCommunication buffer.
tStepSolution step.
ipIntegration point.
Returns
Nonzero if successful.

Implements oofem::CrossSection.

Definition at line 237 of file layeredcrosssection.h.

References OOFEM_ERROR.

void oofem::LayeredCrossSection::printYourself ( )
virtual
contextIOResultType oofem::LayeredCrossSection::restoreIPContext ( DataStream stream,
ContextMode  mode,
GaussPoint gp 
)
virtual

Reads integration point state to output stream.

Parameters
streamOutput stream.
modeDetermines amount of info required in stream (state, definition, ...).
gpintegration point.
Returns
contextIOResultType.
Exceptions
throwsan ContextIOERR exception if error encountered.

Reimplemented from oofem::CrossSection.

Definition at line 1148 of file layeredcrosssection.C.

References oofem::IntArray::at(), oofem::CIO_OK, oofem::FEMComponent::domain, oofem::Domain::giveMaterial(), giveSlaveGaussPoint(), layerMaterials, numberOfLayers, oofem::Material::restoreIPContext(), oofem::CrossSection::restoreIPContext(), and THROW_CIOERR.

Referenced by giveClassName().

contextIOResultType oofem::LayeredCrossSection::saveIPContext ( DataStream stream,
ContextMode  mode,
GaussPoint gp 
)
virtual

Stores integration point state to output stream.

Parameters
streamOutput stream.
modeDetermines amount of info required in stream (state, definition, ...).
gpintegration point.
Returns
contextIOResultType.
Exceptions
throwsan ContextIOERR exception if error encountered.

Reimplemented from oofem::CrossSection.

Definition at line 1119 of file layeredcrosssection.C.

References oofem::IntArray::at(), oofem::CIO_OK, oofem::FEMComponent::domain, oofem::Domain::giveMaterial(), giveSlaveGaussPoint(), layerMaterials, numberOfLayers, oofem::Material::saveIPContext(), oofem::CrossSection::saveIPContext(), and THROW_CIOERR.

Referenced by giveClassName().

int oofem::LayeredCrossSection::setupIntegrationPoints ( IntegrationRule irule,
int  npoints,
Element element 
)
virtual

Sets up integration rule for the given element.

Default behavior is just to call the Gauss integration rule, but for example the layered and fibered crosssections need to do their own thing.

Parameters
iruleIntegration rule to set up.
npointsNumber of integration points.
elementElement which the integration rule belongs to.
Returns
Number of integration points.
Todo:
We must send arrays for integration points instead of just a single scalar.

Reimplemented from oofem::CrossSection.

Definition at line 981 of file layeredcrosssection.C.

References oofem::_Cube, oofem::_Wedge, oofem::cbrt(), oofem::Element::giveIntegrationDomain(), oofem::Element::giveMaterialMode(), layerThicks, numberOfIntegrationPoints, oofem::IntegrationRule::setUpIntegrationPoints(), oofem::IntegrationRule::SetUpPointsOnCubeLayers(), and oofem::IntegrationRule::SetUpPointsOnWedgeLayers().

Referenced by ~LayeredCrossSection().

int oofem::LayeredCrossSection::setupIntegrationPoints ( IntegrationRule irule,
int  npointsXY,
int  npointsZ,
Element element 
)
virtual

Sets up integration rule for the given element.

Default behavior is just to call the Gauss integration rule, but for example the layered and fibered crosssections need to do their own thing.

Parameters
iruleIntegration rule to set up.
npointsXYNumber of integration points in xi-eta.
npointsZNumber of integration points in zeta.
elementElement which the integration rule belongs to.
Returns
Number of integration points.

Reimplemented from oofem::CrossSection.

Definition at line 1018 of file layeredcrosssection.C.

References oofem::_3dDegShell, oofem::Element::giveIntegrationDomain(), oofem::Element::giveMaterialMode(), layerThicks, OOFEM_ERROR, and oofem::IntegrationRule::SetUpPointsOn3dDegShellLayers().

void oofem::LayeredCrossSection::setupLayeredIntegrationRule ( std::vector< std::unique_ptr< IntegrationRule > > &  layerIntegrationRulesArray,
Element el,
int  numInPlanePoints 
)
void oofem::LayeredCrossSection::setupLayerMidPlanes ( )
virtual int oofem::LayeredCrossSection::unpackAndUpdateUnknowns ( DataStream buff,
TimeStep tStep,
GaussPoint ip 
)
inlinevirtual

Unpack and updates all necessary data of given integration point (according to element parallel_mode) into given communication buffer.

See also
packUnknowns service.
Parameters
buffCommunication buffer.
tStepSolution step.
ipIntegration point.
Returns
Nonzero if successful.

Implements oofem::CrossSection.

Definition at line 243 of file layeredcrosssection.h.

References OOFEM_ERROR.

Member Data Documentation

double oofem::LayeredCrossSection::area
protected

Definition at line 105 of file layeredcrosssection.h.

Referenced by giveArea().

IntArray oofem::LayeredCrossSection::interfacerMaterials
protected

Interface (cohesive zone) material for each interface.

Definition at line 95 of file layeredcrosssection.h.

Referenced by giveInputRecord(), and initializeFrom().

FloatArray oofem::LayeredCrossSection::layerMidZ
protected

z-coord of the mid plane for each layer

Definition at line 98 of file layeredcrosssection.h.

Referenced by setupLayerMidPlanes().

double oofem::LayeredCrossSection::midSurfaceXiCoordFromBottom
protected

Definition at line 103 of file layeredcrosssection.h.

Referenced by giveMidSurfaceXiCoordFromBottom(), and initializeFrom().

double oofem::LayeredCrossSection::midSurfaceZcoordFromBottom
protected
int oofem::LayeredCrossSection::numberOfIntegrationPoints
protected

num integration points per layer

Definition at line 101 of file layeredcrosssection.h.

Referenced by giveInputRecord(), giveNumIntegrationPointsInLayer(), initializeFrom(), printYourself(), and setupIntegrationPoints().

double oofem::LayeredCrossSection::totalThick
protected

Definition at line 104 of file layeredcrosssection.h.

Referenced by computeIntegralThick(), and give().


The documentation for this class was generated from the following files:

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:37 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011