35 #include "../sm/Elements/Plates/cct.h" 36 #include "../sm/Materials/structuralms.h" 37 #include "../sm/CrossSections/structuralcrosssection.h" 129 double load = force.
at(1) * dens * dV / 3.0;
150 double x1, x2, x3, y1, y2, y3, z1, z2, z3;
154 double area, b1, b2, b3, c1, c2, c3, l1, l2, l3;
173 answer.
at(1, 3) = b1;
174 answer.
at(1, 6) = b2;
175 answer.
at(1, 9) = b3;
177 answer.
at(2, 2) = -c1;
178 answer.
at(2, 5) = -c2;
179 answer.
at(2, 8) = -c3;
181 answer.
at(3, 2) = -b1;
182 answer.
at(3, 3) = c1;
183 answer.
at(3, 5) = -b2;
184 answer.
at(3, 6) = c2;
185 answer.
at(3, 8) = -b3;
186 answer.
at(3, 9) = c3;
188 answer.
at(4, 1) = b1;
189 answer.
at(4, 2) = ( -b1 * b3 * l2 + b1 * b2 * l3 ) * 0.5;
190 answer.
at(4, 3) = ( -b1 * c3 * l2 - b2 * c3 * l1 + b3 * c2 * l1 + b1 * c2 * l3 ) * 0.5 + l1 * 2. * area;
191 answer.
at(4, 4) = b2;
192 answer.
at(4, 5) = ( -b2 * b1 * l3 + b2 * b3 * l1 ) * 0.5;
193 answer.
at(4, 6) = ( -b2 * c1 * l3 - b3 * c1 * l2 + b1 * c3 * l2 + b2 * c3 * l1 ) * 0.5 + l2 * 2. * area;
194 answer.
at(4, 7) = b3;
195 answer.
at(4, 8) = ( -b3 * b2 * l1 + b3 * b1 * l2 ) * 0.5;
196 answer.
at(4, 9) = ( -b3 * c2 * l1 - b1 * c2 * l3 + b2 * c1 * l3 + b3 * c1 * l2 ) * 0.5 + l3 * 2. * area;
198 answer.
at(5, 1) = c1;
199 answer.
at(5, 2) = ( -b3 * c1 * l2 - b3 * c2 * l1 + b2 * c3 * l1 + b2 * c1 * l3 ) * 0.5 - l1 * 2. * area;
200 answer.
at(5, 3) = ( -c1 * c3 * l2 + c1 * c2 * l3 ) * 0.5;
201 answer.
at(5, 4) = c2;
202 answer.
at(5, 5) = ( -b1 * c2 * l3 - b1 * c3 * l2 + b3 * c1 * l2 + b3 * c2 * l1 ) * 0.5 - l2 * 2. * area;
203 answer.
at(5, 6) = ( -c2 * c1 * l3 + c2 * c3 * l1 ) * 0.5;
204 answer.
at(5, 7) = c3;
205 answer.
at(5, 8) = ( -b2 * c3 * l1 - b2 * c1 * l3 + b1 * c2 * l3 + b1 * c3 * l2 ) * 0.5 - l3 * 2. * area;
206 answer.
at(5, 9) = ( -c3 * c2 * l1 + c3 * c1 * l2 ) * 0.5;
208 answer.
times( 1. / ( 2. * area ) );
218 double x1, x2, x3, y1, y2, y3, z1, z2, z3;
222 double l1, l2, l3, b1, b2, b3, c1, c2, c3;
232 l1 = iLocCoord.
at(1);
233 l2 = iLocCoord.
at(2);
240 answer.
at(1, 1) = l1;
241 answer.
at(1, 2) = l1 * ( l2 * b3 - l3 * b2 ) * 0.5;
242 answer.
at(1, 3) = l1 * ( l2 * c3 - l3 * c2 ) * 0.5;
243 answer.
at(1, 4) = l2;
244 answer.
at(1, 5) = l2 * ( l3 * b1 - l1 * b3 ) * 0.5;
245 answer.
at(1, 6) = l2 * ( l3 * c1 - l1 * c3 ) * 0.5;
246 answer.
at(1, 7) = l3;
247 answer.
at(1, 8) = l3 * ( l1 * b2 - l2 * b1 ) * 0.5;
248 answer.
at(1, 9) = l3 * ( l1 * c2 - l2 * c1 ) * 0.5;
250 answer.
at(2, 2) = l1;
251 answer.
at(2, 5) = l2;
252 answer.
at(2, 8) = l3;
254 answer.
at(3, 3) = l1;
255 answer.
at(3, 6) = l2;
256 answer.
at(3, 9) = l3;
276 double &y1,
double &y2,
double &y3,
277 double &z1,
double &z2,
double &z3)
303 double x1, x2, x3, y1, y2, y3, z1, z2, z3;
308 return (
area = 0.5*(x2*y3+x1*y2+y1*x3-x2*y1-x3*y2-x1*y3)) ;
323 answer = {D_w, R_u, R_v};
357 lc[0].at(2), lc[1].at(2), lc[2].at(2),
358 lc[0].at(3), lc[1].at(3), lc[2].at(3));
362 return detJ * weight;
380 double mass3 = mass/3.0;
382 answer.
at(1, 1) = mass3;
383 answer.
at(4, 4) = mass3;
384 answer.
at(7, 7) = mass3;
408 #define POINT_TOL 1.e-3 417 double x1, x2, x3, y1, y2, y3, z1, z2, z3;
425 midplZ = z1 * answer.
at(1) + z2 * answer.
at(2) + z3 * answer.
at(3);
428 GaussPoint _gp(NULL, 1, answer, 1.0, _2dPlate);
432 if ( elthick / 2.0 + midplZ - fabs( coords.
at(3) ) < -
POINT_TOL ) {
438 for (
int i = 1; i <= 3; i++ ) {
457 if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ) {
458 if ( type == IST_ShellForceTensor ) {
466 answer.
at(4) = help.
at(5);
467 answer.
at(5) = help.
at(4);
470 }
else if ( type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
471 if ( type == IST_ShellMomentTensor ) {
476 answer.
at(1) = help.
at(1);
477 answer.
at(2) = help.
at(2);
481 answer.
at(6) = help.
at(3);
493 if ( ( type == IST_ShellForceTensor ) || ( type == IST_ShellMomentTensor ) ||
494 ( type == IST_ShellStrainTensor ) || ( type == IST_CurvatureTensor ) ) {
543 double layerZeta, layerZCoord, top, bottom;
548 layerZCoord = 0.5 * ( ( 1. - layerZeta ) * bottom + ( 1. + layerZeta ) * top );
552 answer.
at(1) = masterGpStrain.
at(1) * layerZCoord;
553 answer.
at(2) = masterGpStrain.
at(2) * layerZCoord;
554 answer.
at(5) = masterGpStrain.
at(3) * layerZCoord;
555 answer.
at(3) = masterGpStrain.
at(5);
556 answer.
at(4) = masterGpStrain.
at(4);
605 }
else if ( iEdge == 2 ) {
612 }
else if ( iEdge == 3 ) {
642 double dx, dy, length;
656 length = sqrt(dx * dx + dy * dy);
658 answer.
at(1, 1) = 1.0;
659 answer.
at(2, 2) = dx / length;
660 answer.
at(2, 3) = -dy / length;
661 answer.
at(3, 2) = dy / length;
662 answer.
at(3, 3) = dx / length;
671 if (boundaryID == 1) {
674 OOFEM_ERROR(
"computeSurfaceNMatrix: Unsupported surface id");
698 EASValsSetEdgeFlag(
true);
699 EASValsSetFillStyle(FILL_SOLID);
711 go = CreateTriangle3D(p);
712 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
713 EGAttachObject(go, ( EObjectP )
this);
714 EMAddGraphicsToModel(ESIModel(), go);
734 EASValsSetEdgeFlag(
true);
735 EASValsSetFillStyle(FILL_SOLID);
747 go = CreateTriangle3D(p);
748 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
749 EMAddGraphicsToModel(ESIModel(), go);
757 int i, indx, result = 0;
761 double s [ 3 ], defScale;
789 s [ 0 ] = v1.
at(indx);
790 s [ 1 ] = v2.
at(indx);
791 s [ 2 ] = v3.
at(indx);
796 for ( i = 0; i < 3; i++ ) {
812 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
813 EGWithMaskChangeAttributes(LAYER_MASK, tr);
814 EMAddGraphicsToModel(ESIModel(), tr);
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 void giveNodeCoordinates(double &x1, double &x2, double &x3, double &y1, double &y2, double &y3, double &z1, double &z2, double &z3)
The element interface required by NodalAvergagingRecoveryModel.
virtual SPRPatchType SPRNodalRecoveryMI_givePatchType()
virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords)
Computes the element local coordinates from given global coordinates.
The element interface required by ZZNodalRecoveryModel.
virtual FEInterpolation * giveInterpolation() const
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
ScalarAlgorithmType getScalarAlgo()
Wrapper around cell with vertex coordinates stored in FloatArray**.
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
The element interface required by ZZNodalRecoveryModel.
Abstract base class for "structural" finite elements with geometrical nonlinearities.
double & at(int i)
Coefficient access function.
virtual int giveInternalStateAtNode(FloatArray &answer, InternalStateType type, InternalStateMode mode, int node, TimeStep *tStep)
Returns internal state variable (like stress,strain) at node of element in Reduced form...
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
#define OOFEG_RAW_GEOMETRY_LAYER
This class implements a structural material status information.
void clear()
Clears receiver (zero size).
virtual void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap)
EPixel getElementEdgeColor()
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual double edgeGiveTransformationJacobian(int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge Jacobian of transformation between local and global coordinates.
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
Computes boundary condition value - its components values at given time.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual double giveCoordinate(int i)
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
#define OOFEG_DEFORMED_GEOMETRY_LAYER
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
Abstract base class representing integration rule.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
virtual void give2dPlateStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Method for computing 2d plate stiffness matrix.
int getInternalVarsDefGeoFlag()
EPixel getDeformedElementColor()
Class representing a general abstraction for finite element interpolation class.
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...
InternalStateType giveIntVarType()
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
virtual void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type)
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
The element interface corresponding to ZZErrorEstimator.
virtual double computeArea()
Computes the area (zero for all but 2d geometries).
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
DofIDItem
Type representing particular dof type.
#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.
virtual void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep)
Computes lumped mass matrix of receiver.
virtual void giveGeneralizedStress_Plate(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)=0
virtual double computeEdgeVolumeAround(GaussPoint *gp, int iEdge)
Computes volume related to integration point on local edge.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
Wrapper around element definition to provide FEICellGeometry interface.
virtual double giveUpdatedCoordinate(int ic, TimeStep *tStep, double scale=1.)
Returns updated ic-th coordinate of receiver.
virtual int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Default implementation using Newton's method to find the local coordinates.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
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. ...
virtual void computeStrainVectorInLayer(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *masterGp, GaussPoint *slaveGp, TimeStep *tStep)
Computes full 3D strain vector in element layer.
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
Sets up integration rule for the given element.
int numberOfGaussPoints
Number of integration points as specified by nip.
InternalStateMode giveIntVarMode()
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 double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the determinant of the transformation.
double giveCharacteristicLengthForPlaneElements(const FloatArray &normalToCrackPlane)
Returns the size of element in the given direction if the direction is in the XY plane, otherwise gives the mean size defined as the square root of the element area.
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
void zero()
Zeroes all coefficients of receiver.
virtual bcGeomType giveBCGeoType() const
Returns geometry character of boundary condition.
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
virtual void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap)
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
CCTPlate(int n, Domain *d)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual bool isActivated(TimeStep *tStep)
virtual FloatArray * giveCoordinates()
void zero()
Zeroes all coefficient of receiver.
InterfaceType
Enumerative type, used to identify interface type.
void updateFringeTableMinMax(double *s, int size)
Load is base abstract class for all loads.
The element interface required by LayeredCrossSection.
virtual void computeMidPlaneNormal(FloatArray &answer, const GaussPoint *gp)
Computes mid-plane normal of receiver at integration point.
virtual bool computeGtoLRotationMatrix(FloatMatrix &answer)
Returns transformation matrix from global c.s.
int giveSize() const
Returns the size of receiver.
Abstract base class for all structural cross section models.
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
virtual bcValType giveBCValType() const
Returns receiver load type.
Class implementing node in finite element mesh.
virtual double giveCharacteristicLength(const FloatArray &normalToCrackPlane)
Returns the size of element in the given direction, in some cases adjusted (e.g.
double normalize()
Normalizes receiver.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
static FEI2dTrLin interp_lin
virtual void giveEdgeDofMapping(IntArray &answer, int iEdge) const
Assembles edge dof mapping mask, which provides mapping between edge local DOFs and "global" element ...
#define OOFEG_VARPLOT_PATTERN_LAYER
Class representing integration point in finite element program.
Class representing solution step.
int numberOfDofMans
Number of dofmanagers.
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.
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
virtual int SetUpPointsOnTriangle(int nPoints, MaterialMode mode)
Sets up receiver's integration points on triangular (area coords) integration domain.
virtual Material * giveMaterial()
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.
virtual void computeSurfaceNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords)
Computes surface interpolation matrix.