35 #include "../sm/Elements/Beams/libeam3dnl.h" 36 #include "../sm/CrossSections/structuralcrosssection.h" 37 #include "../sm/Materials/structuralms.h" 76 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = 0.;
77 answer.
at(1, 2) = -vec.
at(3);
78 answer.
at(1, 3) = vec.
at(2);
79 answer.
at(2, 1) = vec.
at(3);
80 answer.
at(2, 3) = -vec.
at(1);
81 answer.
at(3, 1) = -vec.
at(2);
82 answer.
at(3, 2) = vec.
at(1);
100 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = 1.;
102 if ( psiSize <= 1.e-40 ) {
108 S.times(sin(psiSize) / psiSize);
109 SS.
times( ( 1. - cos(psiSize) ) / ( psiSize * psiSize ) );
131 centreSpin.
at(1) = 0.5 * ( u.
at(4) + u.
at(10) );
132 centreSpin.
at(2) = 0.5 * ( u.
at(5) + u.
at(11) );
133 centreSpin.
at(3) = 0.5 * ( u.
at(6) + u.
at(12) );
156 eps.beTProductOf(
tempTc, xd);
157 eps.times(1. / this->
l0);
164 answer.
at(1) = eps.at(1);
165 answer.
at(2) = eps.at(2);
166 answer.
at(3) = eps.at(3);
167 answer.
at(4) = curv.
at(1);
168 answer.
at(5) = curv.
at(2);
169 answer.
at(6) = curv.
at(3);
185 for (
int i = 1; i < 4; i++ ) {
186 answer.
at(i, i) = -1.0;
187 answer.
at(i + 6, i) = 1.0;
188 answer.
at(i + 3, i + 3) = -1.0;
189 answer.
at(i + 9, i + 3) = 1.0;
191 for (
int j = 1; j < 4; j++ ) {
192 answer.
at(i + 3, j) = answer.
at(i + 9, j) = 0.5 * s.
at(j, i);
209 if ( useUpdatedGpRecord == 1 ) {
216 for (
int i = 1; i <= 3; i++ ) {
218 for (
int j = 1; j <= 3; j++ ) {
265 for (
int i = 1; i <= 12; i++ ) {
266 for (
int j = 1; j <= 3; j++ ) {
267 for (
int k = 1; k <= 3; k++ ) {
270 xt.at(i, j + 3) += x.
at(i, k + 3) *
tempTc.
at(k, j);
285 for (
int i = 1; i <= 3; i++ ) {
287 for (
int j = 1; j <= 3; j++ ) {
299 for (
int i = 1; i <= 3; i++ ) {
300 for (
int j = 1; j <= 3; j++ ) {
301 answer.
at(i, j + 3) += sn.
at(i, j);
302 answer.
at(i, j + 9) += sn.
at(i, j);
303 answer.
at(i + 3, j + 3) += sm.
at(i, j);
304 answer.
at(i + 3, j + 9) += sm.
at(i, j);
306 answer.
at(i + 6, j + 3) -= sn.
at(i, j);
307 answer.
at(i + 6, j + 9) -= sn.
at(i, j);
308 answer.
at(i + 9, j + 3) -= sm.
at(i, j);
309 answer.
at(i + 9, j + 9) -= sm.
at(i, j);
320 for (
int i = 1; i <= 3; i++ ) {
321 for (
int j = 1; j <= 3; j++ ) {
322 answer.
at(i + 3, j) -= sn.
at(i, j);
323 answer.
at(i + 3, j + 3) += y.
at(i, j);
324 answer.
at(i + 3, j + 6) += sn.
at(i, j);
325 answer.
at(i + 3, j + 9) += y.
at(i, j);
327 answer.
at(i + 9, j) -= sn.
at(i, j);
328 answer.
at(i + 9, j + 3) += y.
at(i, j);
329 answer.
at(i + 9, j + 6) += sn.
at(i, j);
330 answer.
at(i + 9, j + 9) += y.
at(i, j);
397 l0 = sqrt(dx * dx + dy * dy + dz * dz);
414 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = halfMass;
415 answer.
at(7, 7) = answer.
at(8, 8) = answer.
at(9, 9) = halfMass;
422 answer.
at(4, 4) = answer.
at(10, 10) = Ik * halfMass;
423 answer.
at(5, 5) = answer.
at(11, 11) = Iy * halfMass;
424 answer.
at(6, 6) = answer.
at(12, 12) = Iz * halfMass;
435 ksi = iLocCoord.
at(1);
436 n1 = ( 1. - ksi ) * 0.5;
437 n2 = ( 1. + ksi ) * 0.5;
443 answer.
at(1, 1) = n1;
444 answer.
at(1, 7) = n2;
446 answer.
at(2, 2) = n1;
447 answer.
at(2, 8) = n2;
449 answer.
at(3, 3) = n1;
450 answer.
at(3, 9) = n2;
452 answer.
at(4, 4) = n1;
453 answer.
at(4, 10) = n2;
455 answer.
at(5, 5) = n1;
456 answer.
at(5, 11) = n2;
458 answer.
at(6, 6) = n1;
459 answer.
at(6, 12) = n2;
478 if ( type == IST_BeamForceMomentTensor ) {
481 }
else if ( type == IST_BeamStrainCurvatureTensor ) {
493 answer = {D_u, D_v, D_w, R_u, R_v, R_w};
503 n1 = ( 1. - ksi ) * 0.5;
504 n2 = ( 1. + ksi ) * 0.5;
541 for (
int i = 1; i <= 12; i++ ) {
568 Node *nodeA, *nodeB, *refNode;
576 for (
int i = 1; i <= 3; i++ ) {
581 lz.beVectorProductOf(lx, help);
583 ly.beVectorProductOf(lz, lx);
586 for (
int i = 1; i <= 3; i++ ) {
587 answer.
at(1, i) = lx.at(i);
588 answer.
at(2, i) = ly.at(i);
589 answer.
at(3, i) = lz.at(i);
640 for (
int i = 1; i <= 3; i++ ) {
641 for (
int j = 1; j <= 3; j++ ) {
642 answer.
at(i, j) = lcs.
at(i, j);
643 answer.
at(3 + i, 3 + j) = lcs.
at(i, j);
715 ac.at(1) = 0.5 * ( ui.at(10) - ui.at(4) );
716 ac.at(2) = 0.5 * ( ui.at(11) - ui.at(5) );
717 ac.at(3) = 0.5 * ( ui.at(12) - ui.at(6) );
727 ac.at(1) = ( ui.at(10) - ui.at(4) );
728 ac.at(2) = ( ui.at(11) - ui.at(5) );
729 ac.at(3) = ( ui.at(12) - ui.at(6) );
740 answer.
at(1) += PrevEpsilon.
at(4);
741 answer.
at(2) += PrevEpsilon.
at(5);
742 answer.
at(3) += PrevEpsilon.
at(6);
767 go = CreateLine3D(p);
768 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
769 EGAttachObject(go, ( EObjectP )
this);
770 EMAddGraphicsToModel(ESIModel(), go);
795 go = CreateLine3D(p);
796 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
797 EMAddGraphicsToModel(ESIModel(), go);
CrossSection * giveCrossSection()
int testElementGraphicActivity(Element *)
Test if particular element passed fulfills various filtering criteria for its graphics output...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp)
Returns transformation matrix from local edge c.s to element local coordinate system of load vector c...
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
Returns local vector of unknowns.
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Evaluates nodal representation of real internal forces.
FloatMatrix tc
Last equilibrium triad at the centre.
virtual int computeLoadGToLRotationMtrx(FloatMatrix &answer)
Returns transformation matrix from global coordinate system to local element coordinate system for el...
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
Abstract base class for "structural" finite elements with geometrical nonlinearities.
virtual void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep)
Computes lumped mass matrix of receiver.
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
virtual void initForNewStep()
Initializes receivers state to new time step.
#define OOFEG_RAW_GEOMETRY_LAYER
This class implements a structural material status information.
void computeRotMtrx(FloatMatrix &answer, FloatArray &psi)
Evaluates the rotation matrix for large rotations according to Rodrigues formula for given pseudovect...
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual int giveLocalCoordinateSystem(FloatMatrix &answer)
Returns local coordinate system of receiver Required by material models with ortho- and anisotrophy...
FloatMatrix tempTc
Temporary triad at the centre.
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
virtual void initForNewStep()
Initializes receivers state to new time step.
virtual void giveGeneralizedStress_Beam3d(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)=0
Moment of inertia around z-axis.
virtual double giveCoordinate(int i)
virtual void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType)
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
#define OOFEG_DEFORMED_GEOMETRY_LAYER
virtual void giveEdgeDofMapping(IntArray &answer, int iEdge) const
Assembles edge dof mapping mask, which provides mapping between edge local DOFs and "global" element ...
Abstract base class representing integration rule.
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element's local coordinates.
EPixel getDeformedElementColor()
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
#define _IFT_LIBeam3dNL_refnode
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode)
Computes the load vector due to body load acting on receiver, at given time step. ...
void updateTempTriad(TimeStep *tStep)
Updates the temporary triad at the centre to the state identified by given solution step...
StateCounterType giveSolutionStateCounter()
Returns current solution state counter.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual double computeLength()
Computes the length (zero for all but 1D geometries)
#define OOFEG_RAW_GEOMETRY_WIDTH
virtual double giveWeight()
Returns integration weight of receiver.
UnknownType
Type representing particular unknown (its physical meaning).
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
void times(double f)
Multiplies receiver by factor f.
Moment of inertia around x-axis.
void computeTempCurv(FloatArray &answer, TimeStep *tStep)
Compute the temporary curvature at the centre to the state identified by given solution step...
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual double giveUpdatedCoordinate(int ic, TimeStep *tStep, double scale=1.)
Returns updated ic-th coordinate of receiver.
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
virtual void give3dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Computes the stiffness matrix for 2d beams.
void computeSMtrx(FloatMatrix &answer, FloatArray &vec)
Evaluates the S matrix from given vector vec.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
Sets up integration rule for the given element.
Class representing vector of real numbers.
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.
GaussPoint * getIntegrationPoint(int n)
Access particular integration point of receiver.
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
LIBeam3dNL(int n, Domain *d)
double computeNorm() const
Computes the norm (or length) of the vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void add(const FloatMatrix &a)
Adds matrix to the receiver.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the stress vector of receiver at given integration point, at time step tStep.
virtual void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Compute strain vector of receiver evaluated at given integration point at given time step from elemen...
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
void times(double s)
Multiplies receiver with scalar.
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode)
Computes the load vector due to body load acting on receiver, at given time step. ...
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void computeXdVector(FloatArray &answer, TimeStep *tStep)
Computes x_21' vector for given solution state.
void beProductTOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
void zero()
Zeroes all coefficient of receiver.
Domain * giveDomain() const
Load is base abstract class for all loads.
int referenceNode
Reference node.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
int giveSize() const
Returns the size of receiver.
Node * giveNode(int n)
Service for accessing particular domain node.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual double computeEdgeVolumeAround(GaussPoint *gp, int iEdge)
Computes volume related to integration point on local edge.
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
Class implementing node in finite element mesh.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
Moment of inertia around y-axis.
Class representing integration point in finite element program.
StateCounterType tempTcCounter
Time stamp of temporary centre triad.
Class representing solution step.
int numberOfDofMans
Number of dofmanagers.
Class representing Gaussian-quadrature integration rule.
void computeXMtrx(FloatMatrix &answer, TimeStep *tStep)
Computes X mtrx at given solution state.
void resize(int s)
Resizes receiver towards requested size.