35 #include "../sm/CrossSections/simplecrosssection.h" 36 #include "../sm/Materials/structuralmaterial.h" 37 #include "../sm/Materials/structuralms.h" 38 #include "../sm/Elements/structuralelement.h" 144 elasticStrain = strain;
151 elasticStrain.
at(2) -= e0.
at(1) * et.
at(2) / thick;
173 elasticStrain = strain;
181 elasticStrain.
at(5) -= e0.
at(1) * et.
at(2) / thick;
183 elasticStrain.
at(6) -= e0.
at(1) * et.
at(3) / width;
207 elasticStrain = strain;
213 elasticStrain.
at(1) -= e0.
at(1) * et.
at(2) / thick;
214 elasticStrain.
at(2) -= e0.
at(2) * et.
at(2) / thick;
237 elasticStrain = strain;
245 elasticStrain.
at(4) -= e0.
at(1) * et.
at(2) / thick;
246 elasticStrain.
at(5) -= e0.
at(2) * et.
at(2) / thick;
285 if ( mode == _2dBeam ) {
287 }
else if ( mode == _3dBeam ) {
289 }
else if ( mode == _2dPlate ) {
291 }
else if ( mode == _3dShell ) {
293 }
else if ( mode == _3dDegeneratedShell ) {
298 if ( mode == _3dMat ) {
300 }
else if ( mode == _PlaneStress ) {
302 }
else if ( mode == _PlaneStrain ) {
304 }
else if ( mode == _1dMat ) {
319 double area, Iy, shearAreaz;
329 answer.
at(1, 1) = mat3d.
at(1, 1) * area;
330 answer.
at(2, 2) = mat3d.
at(1, 1) * Iy;
331 answer.
at(3, 3) = shearAreaz * mat->
give(
'G', gp);
341 double area,
E, G, Iy, Iz, Ik;
342 double shearAreay, shearAreaz;
346 G = mat->
give(
'G', gp);
359 answer.
at(1, 1) = E * area;
361 answer.
at(2, 2) = shearAreay * G;
362 answer.
at(3, 3) = shearAreaz * G;
365 answer.
at(4, 4) = G * Ik;
366 answer.
at(5, 5) = E * Iy;
367 answer.
at(6, 6) = E * Iz;
377 double thickness3, thickness;
381 thickness3 = thickness * thickness * thickness;
386 for (
int i = 1; i <= 2; i++ ) {
387 for (
int j = 1; j <= 2; j++ ) {
388 answer.
at(i, j) = mat3d.
at(i, j) * thickness3 / 12.;
392 answer.
at(3, 3) = mat3d.
at(3, 3) * thickness3 / 12.;
393 answer.
at(4, 4) = mat3d.
at(3, 3) * thickness * ( 5. / 6. );
394 answer.
at(5, 5) = answer.
at(4, 4);
406 double thickness3 = thickness * thickness * thickness;
413 for (
int i = 1; i <= 3; i++ ) {
414 for (
int j = 1; j <= 3; j++ ) {
415 answer.
at(i, j) = mat3d.
at(i, j) * thickness;
418 for (
int i = 1; i <= 3; i++ ) {
419 for (
int j = 1; j <= 3; j++ ) {
420 answer.
at(i + 3, j + 3) = mat3d.
at(i, j) * thickness3 / 12.0;
424 answer.
at(8, 8) = answer.
at(7, 7) = mat3d.
at(3, 3) * thickness * ( 5. / 6. );
434 answer.
at(1, 1) -= answer.
at(1, 3) * answer.
at(3, 1) / answer.
at(3, 3);
435 answer.
at(2, 1) -= answer.
at(2, 3) * answer.
at(3, 1) / answer.
at(3, 3);
436 answer.
at(1, 2) -= answer.
at(1, 3) * answer.
at(3, 2) / answer.
at(3, 3);
437 answer.
at(2, 2) -= answer.
at(2, 3) * answer.
at(3, 2) / answer.
at(3, 3);
439 answer.
at(3, 1) = 0.0;
440 answer.
at(3, 2) = 0.0;
441 answer.
at(3, 3) = 0.0;
442 answer.
at(2, 3) = 0.0;
443 answer.
at(1, 3) = 0.0;
490 area = thick * width;
506 double beamshearcoeff = 0.0;
512 if ( value == 0.0 ) {
513 value = beamshearcoeff * area;
519 if ( value == 0.0 ) {
520 value = beamshearcoeff * area;
654 if ( type == IST_CrossSectionNumber ) {
674 if ( !dynamic_cast< StructuralMaterial * >(mat) ) {
702 if ( mode == _3dMat ) {
704 }
else if ( mode == _PlaneStrain ) {
706 }
else if ( mode == _PlaneStress ) {
708 }
else if ( mode == _1dMat ) {
726 if ( mode == _3dMat ) {
728 }
else if ( mode == _PlaneStrain ) {
730 }
else if ( mode == _PlaneStress ) {
732 }
else if ( mode == _1dMat ) {
743 if ( mode == _3dMat ) {
745 }
else if ( mode == _PlaneStrain ) {
747 }
else if ( mode == _PlaneStress ) {
749 }
else if ( mode == _1dMat ) {
763 if ( mode == _3dMat ) {
765 }
else if ( mode == _PlaneStress ) {
767 }
else if ( mode == _PlaneStrain ) {
769 }
else if ( mode == _1dMat ) {
785 if ( mode == _3dMat ) {
787 }
else if ( mode == _PlaneStress ) {
789 }
else if ( mode == _PlaneStrain ) {
791 }
else if ( mode == _1dMat ) {
812 if ( ( tf = fm->
giveField(FT_Temperature) ) ) {
817 if ( ( err = tf->evaluateAt(et2, gcoords, VM_Total, tStep) ) ) {
824 answer.
at(1) += et2.
at(1);
virtual void giveFirstPKStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveFirstPKStressVector_3d.
virtual int unpackAndUpdateUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *gp)
Unpack and updates all necessary data of given integration point (according to element parallel_mode)...
Relative penalty stiffness for drilling DOFs.
Shear area in z direction.
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
virtual void giveTemperatureVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
virtual void giveEshelbyStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Prototype for computation of Eshelby stress.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void computeResultingIPTemperatureAt(FloatArray &answer, TimeStep *tStep, GaussPoint *gp, ValueModeType mode)
Computes at given time (tStep) the the resulting temperature component array.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual void giveStiffnessMatrix_3d(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing the stiffness matrix.
#define _IFT_SimpleCrossSection_ik
Torsion moment x.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
std::shared_ptr< Field > FieldPtr
virtual void giveFirstPKStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
virtual void giveRealStress_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual void giveRealStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_3d.
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 packUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *gp)
Pack all necessary data of integration point (according to element parallel_mode) into given communic...
IntegrationPointStatus * setMaterialStatus(IntegrationPointStatus *ptr, int n)
Sets Material status managed by receiver.
virtual void give1dStressStiffMtrx_dPdF(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Director vector component in y-axis.
virtual void giveFirstPKStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveFirstPKStressVector_3d.
#define _IFT_SimpleCrossSection_iz
Inertia moment z.
virtual Interface * giveMaterialInterface(InterfaceType t, IntegrationPoint *ip)
virtual void giveCauchyStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
virtual int packUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
Pack all necessary data of integration point (according to element parallel_mode) into given communic...
double & at(int aKey)
Returns the value of the pair which key is aKey.
virtual void giveCauchyStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
#define _IFT_SimpleCrossSection_shearareaz
Shear area z direction.
virtual void giveGeneralizedStress_MembraneRot(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
double & at(int i)
Coefficient access function.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
#define _IFT_SimpleCrossSection_area
#define _IFT_SimpleCrossSection_drillType
Type of artificially added stiffnes for drilling DOFs.
This class implements a structural material status information.
virtual void giveEshelbyStresses(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedvF, TimeStep *tStep)
Computes the Eshelby stress vector.
void clear()
Clears receiver (zero size).
int giveMaterialNumber() const
bool includes(int aKey)
Checks if dictionary includes given key.
virtual void giveRealStress_3dDegeneratedShell(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
#define _IFT_SimpleCrossSection_iy
Inertia moment y.
double giveReferenceTemperature()
Returns the reference temperature of receiver.
virtual void give3dMaterialStiffnessMatrix_dCde(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
#define _IFT_SimpleCrossSection_MaterialNumber
Material number for the bulk material.
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of cross section property.
REGISTER_CrossSection(EmptyCS)
Penalty stiffness for drilling DOFs.
Abstract base class for all finite elements.
Moment of inertia around z-axis.
Element * giveElement()
Returns corresponding element to receiver.
#define _IFT_SimpleCrossSection_width
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver acording to object description stored in input record.
virtual void give2dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for 2d beams.
#define _IFT_SimpleCrossSection_directorz
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
MaterialMode
Type representing material mode of integration point.
FieldManager * giveFieldManager()
Class implementing an array of integers.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
#define _IFT_SimpleCrossSection_directorx
#define _IFT_SimpleCrossSection_shearcoeff
virtual void giveRealStress_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual void givePlaneStressStiffMtrx_dPdF(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
virtual void givePlaneStrainStiffMtrx_dCde(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
const char * __MaterialModeToString(MaterialMode _value)
virtual void giveRealStressVector_2dPlateSubSoil(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation is not provided.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
virtual void giveRealStress_Warping(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual void giveCauchyStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Abstract base class for all "structural" finite elements.
virtual void giveStiffnessMatrix_PlaneStrain(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void giveRealStress_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
Shear coefficient of beam.
#define _IFT_SimpleCrossSection_directory
Dictionary propertyDictionary
Dictionary for storing cross section parameters (like dimensions).
Director vector component in z-axis.
Material * giveMaterial(int n)
Service for accessing particular domain material model.
virtual void givePlaneStressStiffMtrx_dCde(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
EngngModelContext * giveContext()
Context requesting service.
virtual void giveGeneralizedStress_Plate(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
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 poin...
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode)
Returns true if stiffness matrix of receiver is symmetric Default implementation returns true...
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
void resizeWithData(int, int)
Checks size of receiver towards requested bounds.
Moment of inertia around x-axis.
virtual void giveStiffnessMatrix_dPdF(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the material stiffness matrix dPdF of receiver in a given integration point, respecting its history.
virtual void give2dPlateStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d plate stiffness matrix.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode mode)
Check for symmetry of stiffness matrix.
virtual int giveIPValue(FloatArray &answer, GaussPoint *ip, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
bool isEmpty() const
Returns true if receiver is empty.
Abstract base class for all material models.
double at(int i, int j) const
Coefficient access function.
virtual void giveRealStressVector_ShellStressControl(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, const IntArray &strainControl, TimeStep *tStep)
virtual void givePlaneStrainStiffMtrx_dPdF(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
FieldPtr giveField(FieldType key)
Returns the previously registered field under given key; NULL otherwise.
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
Abstract base class representing a material status information.
Pair * add(int aKey, double value)
Adds a new Pair with given keyword and value into receiver.
virtual void giveFirstPKStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveFirstPKStressVector_3d.
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...
Class representing vector of real numbers.
virtual void give2dPlateSubSoilStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing subsoil stiffness matrix for plates.
virtual void giveRealStressVector_Warping(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
Implementation of matrix containing floating point numbers.
Shear area in y direction.
IRResultType
Type defining the return values of InputRecord reading operations.
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
virtual void give3dDegeneratedShellStiffMtrx(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d shell stiffness matrix on degenerated shell elements.
virtual const char * giveClassName() const =0
#define _IFT_SimpleCrossSection_relDrillStiffness
Relative penalty term for drilling stiffness.
virtual void give3dShellStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d shell stiffness matrix.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
virtual void giveGeneralizedStress_Shell(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
virtual Material * giveMaterial(IntegrationPoint *ip)
Returns the material associated with the GP.
virtual void giveGeneralizedStress_Beam3d(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
virtual void give2dPlateSubSoilStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing stiffness matrix of plate subsoil model.
virtual void giveStiffnessMatrix_1d(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void giveRealStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
Abstract base class for all "structural" constitutive models.
virtual void giveStiffnessMatrix_PlaneStress(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual int estimatePackSize(DataStream &buff, GaussPoint *ip)
Estimates the necessary pack size to hold all packed data of receiver.
void zero()
Zeroes all coefficient of receiver.
virtual void giveRealStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
Domain * giveDomain() const
Type of artificially added drilling stiffness for drilling DOFs.
InterfaceType
Enumerative type, used to identify interface type.
virtual void giveRealStress_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual void giveGeneralizedStress_PlateSubSoil(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
#define _IFT_SimpleCrossSection_shearareay
Shear area y direction.
#define _IFT_SimpleCrossSection_thick
virtual void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix of receiver in given integration point, respecting its history...
virtual void give3dMaterialStiffnessMatrix_dPdF(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
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.
bool isNotEmpty() const
Returns true if receiver is not empty.
virtual int unpackAndUpdateUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
Unpack and updates all necessary data of given integration point (according to element parallel_mode)...
virtual void give3dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for 2d beams.
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
Director vector component in x-axis.
Moment of inertia around y-axis.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
virtual void giveMembraneRotStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing membrane stiffness matrix with added drilling stiffness.
Class representing solution step.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element's local coordinates.
virtual int checkConsistency()
Allows programmer to test some internal data, before computation begins.
virtual void createMaterialStatus(GaussPoint &iGP)
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
virtual int estimatePackSize(DataStream &buff, GaussPoint *gp)
Estimates the necessary pack size to hold all packed data of receiver.
virtual Material * giveMaterial()
virtual void give1dStressStiffMtrx_dCde(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
#define _IFT_SimpleCrossSection_drillStiffness
Penalty term for drilling stiffness.
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.
virtual void giveCauchyStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
virtual void giveStiffnessMatrix_dCde(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the material stiffness matrix dCde of receiver in a given integration point, respecting its history.