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.