35 #include "../sm/CrossSections/fiberedcs.h" 36 #include "../sm/Elements/structuralelement.h" 37 #include "../sm/Materials/structuralmaterial.h" 38 #include "../sm/Materials/structuralms.h" 124 double fiberThick, fiberWidth, fiberZCoord, fiberYCoord;
130 OOFEM_ERROR(
"element with no fiber support encountered");
158 answer.
at(1) += reducedFiberStress.
at(1) * fiberWidth * fiberThick;
159 answer.
at(2) += reducedFiberStress.
at(2) * fiberWidth * fiberThick;
160 answer.
at(3) += reducedFiberStress.
at(3) * fiberWidth * fiberThick;
162 answer.
at(4) += ( reducedFiberStress.
at(2) * fiberWidth * fiberThick * fiberYCoord -
163 reducedFiberStress.
at(3) * fiberWidth * fiberThick * fiberZCoord );
164 answer.
at(5) += reducedFiberStress.
at(1) * fiberWidth * fiberThick * fiberZCoord;
165 answer.
at(6) -= reducedFiberStress.
at(1) * fiberWidth * fiberThick * fiberYCoord;
193 OOFEM_ERROR(
"Not supported in given cross-section (yet).");
199 OOFEM_ERROR(
"Not supported in given cross-section.");
209 if ( mode == _2dBeam ) {
211 }
else if ( mode == _3dBeam ) {
213 }
else if ( mode == _2dPlate ) {
215 }
else if ( mode == _3dShell ) {
218 OOFEM_ERROR(
"Not implemented for bulk materials.");
242 double fiberThick, fiberWidth, fiberZCoord, fiberYCoord;
243 double fiberZCoord2, fiberYCoord2, Ip = 0.0, A = 0.0, Ik, G = 0.0;
261 fiberYCoord2 = fiberYCoord * fiberYCoord;
262 fiberZCoord2 = fiberZCoord * fiberZCoord;
267 answer.
at(1, 1) += fiberMatrix.
at(1, 1) * fiberWidth * fiberThick;
269 answer.
at(2, 2) += fiberMatrix.
at(2, 2) * fiberWidth * fiberThick;
271 answer.
at(3, 3) += fiberMatrix.
at(3, 3) * fiberWidth * fiberThick;
275 Ip += fiberWidth * fiberThick * fiberZCoord2 + fiberWidth * fiberThick * fiberYCoord2;
276 A += fiberWidth * fiberThick;
277 G = fiberMatrix.
at(2, 2) * fiberWidth * fiberThick;
279 answer.
at(5, 5) += fiberMatrix.
at(1, 1) * fiberWidth * fiberThick * fiberZCoord2;
280 answer.
at(6, 6) += fiberMatrix.
at(1, 1) * fiberWidth * fiberThick * fiberYCoord2;
285 Ik = A * A * A * A / ( 40.0 * Ip );
286 answer.
at(4, 4) = G * Ik;
335 int size = gradientStressVector3d->
giveSize();
337 OOFEM_ERROR(
"gradientStressVector3d size mismatch");
342 for (
int i = 2; i <= 4; i++ ) {
343 gradientStressVector3d->
at(i) = 0.;
351 return gradientStressVector3d;
367 int size = gradientStrainVector3d->
giveSize();
369 OOFEM_ERROR(
"gradientStrainVector3d size mismatch");
374 for (
int i = 2; i <= 4; i++ ) {
375 gradientStrainVector3d->
at(i) = 0.;
383 return gradientStrainVector3d;
393 if ( type == IST_BeamForceMomentTensor ) {
396 }
else if ( type == IST_BeamStrainCurvatureTensor ) {
463 if ( slave == NULL ) {
495 printf(
"Cross Section with properties : \n");
497 printf(
"Fiber Materials: \n");
499 printf(
"Fiber Thicks : \n");
501 printf(
"Fiber Widths : \n");
503 printf(
"Fiber y coordinates: \n");
505 printf(
"Fiber y coordinates: \n");
572 if ( masterMode == _3dBeam ) {
587 }
else if ( aProperty ==
CS_Width ) {
589 }
else if ( aProperty ==
CS_Area ) {
599 if ( this->
area <= 0.0 ) {
644 if ( !dynamic_cast< StructuralMaterial * >(mat) ) {
virtual FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
Returns modified gradient of stress vector, which is used to bring stresses back to yield surface...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
void printYourself()
Prints the receiver on screen.
virtual void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix of receiver in given integration point, respecting its history...
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual void giveStiffnessMatrix_1d(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void printYourself() const
Prints receiver on stdout.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
virtual void give3dShellStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d shell stiffness matrix.
virtual void createMaterialStatus(GaussPoint &iGP)
virtual void printYourself()
Prints receiver state on stdout. Useful for debugging.
IntegrationPointStatus * setMaterialStatus(IntegrationPointStatus *ptr, int n)
Sets Material status managed by receiver.
Domain * domain
Link to domain object, useful for communicating with other FEM components.
#define _IFT_FiberedCrossSection_thicks
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
virtual void giveGeneralizedStress_MembraneRot(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
virtual FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
Returns modified gradient of strain vector, which is used to compute plastic strain increment...
double & at(int i)
Coefficient access function.
This class implements a structural material status information.
FloatArray fiberThicks
Thickness for each fiber.
#define _IFT_FiberedCrossSection_fiberzcentrecoords
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode mode)
Check for symmetry of stiffness matrix.
REGISTER_CrossSection(EmptyCS)
double thick
Total thickness.
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
#define _IFT_FiberedCrossSection_width
virtual void giveGeneralizedStress_Beam3d(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Element * giveElement()
Returns corresponding element to receiver.
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
CrossSectionProperty
List of properties possibly stored in a cross section.
virtual void giveRealStress_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
Returns modified gradient of stress vector, which is used to bring stresses back to yield surface...
GaussPoint * giveSlaveGaussPoint(int index)
Returns index-th slave gauss point of receiver.
MaterialMode
Type representing material mode of integration point.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of cross section property.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void giveRealStress_3d(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 FiberedCrossSectionInterface_computeStrainVectorInFiber(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *slaveGp, TimeStep *tStep)=0
Computes full 3d strain vector in element fiber.
Abstract base class for all "structural" finite elements.
virtual void give2dPlateStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d plate stiffness matrix.
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
Dictionary propertyDictionary
Dictionary for storing cross section parameters (like dimensions).
virtual void giveMembraneRotStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing membrane stiffness matrix with added drilling stiffness.
Material * giveMaterial(int n)
Service for accessing particular domain material model.
virtual int checkConsistency()
Allows programmer to test some internal data, before computation begins.
virtual void give2dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for 2d beams.
#define _IFT_FiberedCrossSection_nfibers
int giveNumber()
Returns number of receiver.
MaterialMode giveCorrespondingSlaveMaterialMode(MaterialMode)
Abstract base class for all material models.
double at(int i, int j) const
Coefficient access function.
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
#define _IFT_FiberedCrossSection_widths
IntegrationRule * giveIntegrationRule()
Returns corresponding integration rule to receiver.
Abstract base class representing a material status information.
virtual void giveGeneralizedStress_PlateSubSoil(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
virtual void giveStiffnessMatrix_3d(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing the stiffness matrix.
Initializes the variable VERBOSE, in order to get a few intermediate messages on screen: beginning an...
Class representing vector of real numbers.
virtual void giveGeneralizedStress_Shell(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
virtual void giveGeneralizedStress_Plate(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
void giveFiberMaterialStiffnessMatrix(FloatMatrix &fiberMatrix, MatResponseMode mode, GaussPoint *layerGp, TimeStep *tStep)
Method for computing 1d fiber stiffness matrix of receiver.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
virtual double give(CrossSectionProperty a, GaussPoint *gp)
Returns the value of cross section property at given point.
virtual void giveGeneralizedStress_Beam2d(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Computes the generalized stress vector for given strain and integration point.
virtual int giveIPValue(FloatArray &answer, GaussPoint *ip, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStrainVector3d)
Returns modified gradient of strain vector, which is used to compute plastic strain increment...
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
virtual const char * giveClassName() const =0
virtual void giveRealStressVector_Fiber(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
std::vector< GaussPoint * > gaussPoints
List of slave integration points.
virtual void printYourself() const
Print receiver on stdout.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
int numberOfFibers
Number of fibers.
void zero()
Zeroes all coefficients of receiver.
GaussPoint * giveSlaveGaussPoint(GaussPoint *gp, int)
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
#define _IFT_FiberedCrossSection_fiberycentrecoords
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
The element interface required by FiberedCrossSection.
void zero()
Zeroes all coefficient of receiver.
Domain * giveDomain() const
virtual void giveStiffnessMatrix_PlaneStrain(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
#define _IFT_FiberedCrossSection_thick
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
IntArray fiberMaterials
Material of each fiber.
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
virtual void give2dPlateSubSoilStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing subsoil stiffness matrix for plates.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
Class representing solution step.
#define _IFT_FiberedCrossSection_fibermaterials
FloatArray fiberWidths
Width for each fiber.
virtual void giveRealStress_Warping(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual void give3dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for 2d beams.
virtual void giveStiffnessMatrix_PlaneStress(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void resize(int s)
Resizes receiver towards requested size.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.