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;
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)
301 double x1, x2, x3, y1, y2, y3, z1, z2, z3;
307 return (
area = 0.5 * ( x2 * y3 + x1 * y2 + y1 * x3 - x2 * y1 - x3 * y2 - x1 * y3 ) );
320 answer = { D_w, R_u, R_v };
354 lc [ 0 ].at(2), lc [ 1 ].at(2), lc [ 2 ].at(2),
355 lc [ 0 ].at(3), lc [ 1 ].at(3), lc [ 2 ].at(3) );
359 return detJ * weight;
377 double mass3 = mass / 3.0;
379 answer.
at(1, 1) = mass3;
380 answer.
at(4, 4) = mass3;
381 answer.
at(7, 7) = mass3;
405#define POINT_TOL 1.e-3
414 double x1, x2, x3, y1, y2, y3, z1, z2, z3;
422 midplZ = z1 * answer.
at(1) + z2 * answer.
at(2) + z3 * answer.
at(3);
425 GaussPoint _gp(NULL, 1, answer, 1.0, _2dPlate);
429 if ( elthick / 2.0 + midplZ - fabs(coords.
at(3) ) < -
POINT_TOL ) {
435 for (
int i = 1; i <= 3; i++ ) {
454 if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ) {
455 if ( type == IST_ShellForceTensor ) {
463 answer.
at(4) = help.
at(5);
464 answer.
at(5) = help.
at(4);
467 }
else if ( type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
468 if ( type == IST_ShellMomentTensor ) {
473 answer.
at(1) = help.
at(1);
474 answer.
at(2) = help.
at(2);
478 answer.
at(6) = help.
at(3);
490 if ( ( type == IST_ShellForceTensor ) || ( type == IST_ShellMomentTensor ) ||
491 ( type == IST_ShellStrainTensor ) || ( type == IST_CurvatureTensor ) ) {
540 double layerZeta, layerZCoord, top, bottom;
545 layerZCoord = 0.5 * ( ( 1. - layerZeta ) * bottom + ( 1. + layerZeta ) * top );
549 answer.
at(1) = masterGpStrain.
at(1) * layerZCoord;
550 answer.
at(2) = masterGpStrain.
at(2) * layerZCoord;
551 answer.
at(5) = masterGpStrain.
at(3) * layerZCoord;
552 answer.
at(3) = masterGpStrain.
at(5);
553 answer.
at(4) = masterGpStrain.
at(4);
602 }
else if ( iEdge == 2 ) {
609 }
else if ( iEdge == 3 ) {
639 const auto &edgeNodes = this->
interp_lin.computeLocalEdgeMapping(iEdge);
641 auto nodeA = this->
giveNode(edgeNodes.at(1) );
642 auto nodeB = this->
giveNode(edgeNodes.at(2) );
644 double dx = nodeB->giveCoordinate(1) - nodeA->giveCoordinate(1);
645 double dy = nodeB->giveCoordinate(2) - nodeA->giveCoordinate(2);
646 double length = sqrt(dx * dx + dy * dy);
650 answer.
at(1, 1) = 1.0;
663 if ( boundaryID == 1 ) {
666 OOFEM_ERROR(
"computeSurfaceNMatrix: Unsupported surface id");
682 if ( !
gc.testElementGraphicActivity(
this) ) {
688 EASValsSetColor(
gc.getElementColor() );
689 EASValsSetEdgeColor(
gc.getElementEdgeColor() );
690 EASValsSetEdgeFlag(
true);
691 EASValsSetFillStyle(FILL_SOLID);
703 go = CreateTriangle3D(p);
704 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
705 EGAttachObject(go, ( EObjectP )
this);
706 EMAddGraphicsToModel(ESIModel(), go);
716 double defScale =
gc.getDefScale();
718 if ( !
gc.testElementGraphicActivity(
this) ) {
724 EASValsSetColor(
gc.getDeformedElementColor() );
725 EASValsSetEdgeColor(
gc.getElementEdgeColor() );
726 EASValsSetEdgeFlag(
true);
727 EASValsSetFillStyle(FILL_SOLID);
739 go = CreateTriangle3D(p);
740 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
741 EMAddGraphicsToModel(ESIModel(), go);
749 int i, indx, result = 0;
753 double s[ 3 ], defScale;
755 if ( !
gc.testElementGraphicActivity(
this) ) {
779 indx =
gc.giveIntVarIndx();
781 s [ 0 ] = v1.
at(indx);
782 s [ 1 ] = v2.
at(indx);
783 s [ 2 ] = v3.
at(indx);
788 for ( i = 0; i < 3; i++ ) {
789 if (
gc.getInternalVarsDefGeoFlag() ) {
791 defScale =
gc.getDefScale();
803 gc.updateFringeTableMinMax(s, 3);
804 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
805 EGWithMaskChangeAttributes(LAYER_MASK, tr);
806 EMAddGraphicsToModel(ESIModel(), tr);
double length(const Vector &a)
#define REGISTER_Element(class)
FEInterpolation * giveInterpolation() const override
void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep) override
void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS) override
double computeArea() override
void giveEdgeDofMapping(IntArray &answer, int iEdge) const override
bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords) override
void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep) override
void giveDofManDofIDMask(int inode, IntArray &) const override
void computeStrainVectorInLayer(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *masterGp, GaussPoint *slaveGp, TimeStep *tStep) override
void computeSurfaceNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords) override
Interface * giveInterface(InterfaceType it) override
void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type) override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void computeMidPlaneNormal(FloatArray &answer, const GaussPoint *gp) override
CCTPlate(int n, Domain *d)
static FEI2dTrLin interp_lin
void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode) override
void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) override
double giveCharacteristicLength(const FloatArray &normalToCrackPlane) override
double computeEdgeVolumeAround(GaussPoint *gp, int iEdge) override
void initializeFrom(InputRecord &ir, int priority) override
int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp) override
SPRPatchType SPRNodalRecoveryMI_givePatchType() override
void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer) override
virtual void giveNodeCoordinates(double &x1, double &x2, double &x3, double &y1, double &y2, double &y3, double &z1, double &z2, double &z3)
void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep) override
void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap) override
void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap) override
void drawScalar(oofegGraphicContext &gc, TimeStep *tStep) override
void computeGaussPoints() override
double computeVolumeAround(GaussPoint *gp) override
virtual double give(CrossSectionProperty a, GaussPoint *gp) const
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
double giveCoordinate(int i) const
const FloatArray & giveCoordinates() const
Node * giveNode(int i) const
virtual bool computeGtoLRotationMatrix(FloatMatrix &answer)
virtual bool isActivated(TimeStep *tStep)
void initializeFrom(InputRecord &ir, int priority) override
int numberOfDofMans
Number of dofmanagers.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
double giveCharacteristicLengthForPlaneElements(const FloatArray &normalToCrackPlane)
CrossSection * giveCrossSection()
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Index giveSize() const
Returns the size of receiver.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
void zero()
Zeroes all coefficients of receiver.
void rotatedWith(FloatMatrix &r, char mode)
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
void resize(Index rows, Index cols)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
int SetUpPointsOnTriangle(int nPoints, MaterialMode mode) override
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
double giveWeight()
Returns integration weight of receiver.
virtual bcGeomType giveBCGeoType() const
virtual bcValType giveBCValType() const
GaussPoint * getIntegrationPoint(int n)
LayeredCrossSectionInterface()
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
NodalAveragingRecoveryModelInterface()
Constructor.
virtual double giveUpdatedCoordinate(int ic, TimeStep *tStep, double scale=1.)
SPRNodalRecoveryModelInterface()
Constructor.
virtual FloatMatrixF< 5, 5 > give2dPlateStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const =0
virtual FloatArrayF< 5 > giveGeneralizedStress_Plate(const FloatArrayF< 5 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const =0
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
StructuralElement(int n, Domain *d)
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
int giveInternalStateAtNode(FloatArray &answer, InternalStateType type, InternalStateMode mode, int node, TimeStep *tStep) override
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
ZZErrorEstimatorInterface(Element *element)
Constructor.
ZZNodalRecoveryModelInterface(Element *element)
Constructor.
@ CS_BottomZCoord
Bottom z coordinate.
@ CS_TopZCoord
Top z coordinate.
@ BodyLoadBGT
Distributed body load.
@ SPRNodalRecoveryModelInterfaceType
@ ZZNodalRecoveryModelInterfaceType
@ LayeredCrossSectionInterfaceType
@ ZZErrorEstimatorInterfaceType
@ NodalAveragingRecoveryModelInterfaceType
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
#define OOFEG_VARPLOT_PATTERN_LAYER
#define OOFEG_DEFORMED_GEOMETRY_LAYER
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
#define OOFEG_RAW_GEOMETRY_WIDTH
#define OOFEG_RAW_GEOMETRY_LAYER