OOFEM 3.0
Loading...
Searching...
No Matches
trplanstrss.C
Go to the documentation of this file.
1/*
2 *
3 * ##### ##### ###### ###### ### ###
4 * ## ## ## ## ## ## ## ### ##
5 * ## ## ## ## #### #### ## # ##
6 * ## ## ## ## ## ## ## ##
7 * ## ## ## ## ## ## ## ##
8 * ##### ##### ## ###### ## ##
9 *
10 *
11 * OOFEM : Object Oriented Finite Element Code
12 *
13 * Copyright (C) 1993 - 2025 Borek Patzak
14 *
15 *
16 *
17 * Czech Technical University, Faculty of Civil Engineering,
18 * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
36#include "fei2dtrlin.h"
37#include "node.h"
38#include "crosssection.h"
39#include "gausspoint.h"
41#include "floatmatrix.h"
42#include "floatarray.h"
43#include "intarray.h"
44#include "mathfem.h"
45#include "classfactory.h"
46
47#ifdef __OOFEG
48 #include "oofeggraphiccontext.h"
49 #include "oofegutils.h"
50 #include "sm/Materials/rcm2.h"
51#endif
52
53namespace oofem {
55
56FEI2dTrLin TrPlaneStress2d :: interp(1, 2);
57
69
70FEInterpolation *TrPlaneStress2d :: giveInterpolation() const { return & interp; }
71
73TrPlaneStress2d :: giveInterface(InterfaceType interface)
74{
75 if ( interface == ZZNodalRecoveryModelInterfaceType ) {
76 return static_cast< ZZNodalRecoveryModelInterface * >(this);
77 } else if ( interface == NodalAveragingRecoveryModelInterfaceType ) {
78 return static_cast< NodalAveragingRecoveryModelInterface * >(this);
79 } else if ( interface == SPRNodalRecoveryModelInterfaceType ) {
80 return static_cast< SPRNodalRecoveryModelInterface * >(this);
81 } else if ( interface == SpatialLocalizerInterfaceType ) {
82 return static_cast< SpatialLocalizerInterface * >(this);
83 } else if ( interface == ZZErrorEstimatorInterfaceType ) {
84 return static_cast< ZZErrorEstimatorInterface * >(this);
85 } else if ( interface == HuertaErrorEstimatorInterfaceType ) {
86 return static_cast< HuertaErrorEstimatorInterface * >(this);
87 } else if ( interface == LayeredCrossSectionInterfaceType ) {
88 return static_cast< LayeredCrossSectionInterface * >(this);
89 }
90
91 return NULL;
92}
93
94double
95TrPlaneStress2d :: giveArea()
96// returns the area occupied by the receiver
97{
98 if ( area > 0 ) {
99 return area; // check if previously computed
100 }
101
102 return ( area = fabs( this->interp.giveArea( FEIElementGeometryWrapper(this) ) ) );
103}
104
105
106double
107TrPlaneStress2d :: giveCharacteristicSize(GaussPoint *gp, FloatArray &normalToCrackPlane, ElementCharSizeMethod method)
108//
109// returns receiver's characteristic size at gp (for some material models)
110// for crack formed in plane with normal normalToCrackPlane
111// using the selected method
112//
113{
114 if ( method == ECSM_SquareRootOfArea ) {
115 // square root of element area
116 return sqrt( this->giveArea() );
117 }
118
119 if ( ( method == ECSM_Projection ) || ( method == ECSM_ProjectionCentered ) ) {
120 // projection method (standard or modified - no difference for constant-strain element)
121 return this->giveCharacteristicLength(normalToCrackPlane);
122 }
123
124 if ( ( method == ECSM_Oliver1 ) || ( method == ECSM_Oliver1modified ) || ( method == ECSM_Oliver2 ) ) {
125 // method based on derivative of auxiliary function phi
126 // in the maximum principal strain direction
127 // (standard or modified - no difference for constant-strain element)
128
129 // nodal coordinates and coordinates of the element center
130 FloatArray x(3), y(3);
131 double cx = 0., cy = 0.;
132 for ( int i = 1; i <= 3; i++ ) {
133 x.at(i) = giveNode(i)->giveCoordinate(1);
134 y.at(i) = giveNode(i)->giveCoordinate(2);
135 cx += x.at(i);
136 cy += y.at(i);
137 }
138
139 cx /= 3.;
140 cy /= 3.;
141
142 // nodal values of function phi (0 or 1)
143 FloatArray phi(3);
144 for ( int i = 1; i <= 3; i++ ) {
145 if ( ( ( x.at(i) - cx ) * normalToCrackPlane.at(1) + ( y.at(i) - cy ) * normalToCrackPlane.at(2) ) > 0. ) {
146 phi.at(i) = 1.;
147 } else {
148 phi.at(i) = 0.;
149 }
150 }
151
152 // derivatives of shape functions wrt global coordinates
153 FloatMatrix dnx(3, 2);
154 dnx.at(1, 1) = y.at(2) - y.at(3);
155 dnx.at(2, 1) = y.at(3) - y.at(1);
156 dnx.at(3, 1) = y.at(1) - y.at(2);
157 dnx.at(1, 2) = x.at(3) - x.at(2);
158 dnx.at(2, 2) = x.at(1) - x.at(3);
159 dnx.at(3, 2) = x.at(2) - x.at(1);
160 dnx.times( 1. / ( 2. * giveArea() ) );
161
162 // gradient of function phi
163 FloatArray gradPhi(2);
164 gradPhi.zero();
165 for ( int i = 1; i <= 3; i++ ) {
166 gradPhi.at(1) += phi.at(i) * dnx.at(i, 1);
167 gradPhi.at(2) += phi.at(i) * dnx.at(i, 2);
168 }
169
170 // scalar product of the gradient with crack normal
171 double dPhidN = 0.;
172 for ( int i = 1; i <= 2; i++ ) {
173 dPhidN += gradPhi.at(i) * normalToCrackPlane.at(i);
174 }
175
176 if ( dPhidN == 0. ) {
177 OOFEM_ERROR("Zero value of dPhidN");
178 }
179
180 return 1. / fabs(dPhidN);
181 }
182
183 OOFEM_ERROR("invalid method");
184}
185
186
187void
188TrPlaneStress2d :: NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node,
189 InternalStateType type, TimeStep *tStep)
190{
191 GaussPoint *gp = integrationRulesArray [ 0 ]->getIntegrationPoint(0);
192 this->giveIPValue(answer, gp, type, tStep);
193}
194
195
196
197void
198TrPlaneStress2d :: HuertaErrorEstimatorI_setupRefinedElementProblem(RefinedElement *refinedElement, int level, int nodeId,
199 IntArray &localNodeIdArray, IntArray &globalNodeIdArray,
200 HuertaErrorEstimatorInterface :: SetupMode sMode, TimeStep *tStep,
201 int &localNodeId, int &localElemId, int &localBcId,
202 IntArray &controlNode, IntArray &controlDof,
203 HuertaErrorEstimator :: AnalysisMode aMode)
204{
205 int nodes = 3, sides = 3;
206 double x = 0.0, y = 0.0;
207
208 static int sideNode [ 3 ] [ 2 ] = { { 1, 2 }, { 2, 3 }, { 3, 1 } };
209
210 FloatArray corner [ 3 ], midSide [ 3 ], midNode, cor [ 3 ];
211 if ( sMode == HuertaErrorEstimatorInterface :: NodeMode ||
212 ( sMode == HuertaErrorEstimatorInterface :: BCMode && aMode == HuertaErrorEstimator :: HEE_linear ) ) {
213 for ( int inode = 0; inode < nodes; inode++ ) {
214 corner [ inode ] = this->giveNode(inode + 1)->giveCoordinates();
215 if ( corner [ inode ].giveSize() != 3 ) {
216 cor [ inode ].resize(3);
217 cor [ inode ].at(1) = corner [ inode ].at(1);
218 cor [ inode ].at(2) = corner [ inode ].at(2);
219 cor [ inode ].at(3) = 0.0;
220
221 corner [ inode ] = cor [ inode ];
222 }
223
224 x += corner [ inode ].at(1);
225 y += corner [ inode ].at(2);
226 }
227
228 for ( int iside = 0; iside < sides; iside++ ) {
229 midSide [ iside ].resize(3);
230
231 int nd1 = sideNode [ iside ] [ 0 ] - 1;
232 int nd2 = sideNode [ iside ] [ 1 ] - 1;
233
234 midSide [ iside ].at(1) = ( corner [ nd1 ].at(1) + corner [ nd2 ].at(1) ) / 2.0;
235 midSide [ iside ].at(2) = ( corner [ nd1 ].at(2) + corner [ nd2 ].at(2) ) / 2.0;
236 midSide [ iside ].at(3) = 0.0;
237 }
238
239 midNode.resize(3);
240
241 midNode.at(1) = x / nodes;
242 midNode.at(2) = y / nodes;
243 midNode.at(3) = 0.0;
244 }
245
246 this->setupRefinedElementProblem2D(this, refinedElement, level, nodeId, localNodeIdArray, globalNodeIdArray,
247 sMode, tStep, nodes, corner, midSide, midNode,
248 localNodeId, localElemId, localBcId,
249 controlNode, controlDof, aMode, "PlaneStress2d");
250}
251
252
253void TrPlaneStress2d :: HuertaErrorEstimatorI_computeNmatrixAt(GaussPoint *gp, FloatMatrix &answer)
254{
256}
257
258#ifdef __OOFEG
259 #define TR_LENGHT_REDUCT 0.3333
260
261void TrPlaneStress2d :: drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
262{
263 WCRec p [ 3 ];
264 GraphicObj *go;
265
266 if ( !gc.testElementGraphicActivity(this) ) {
267 return;
268 }
269
270 EASValsSetLineWidth(OOFEG_RAW_GEOMETRY_WIDTH);
271 EASValsSetColor( gc.getElementColor() );
272 EASValsSetEdgeColor( gc.getElementEdgeColor() );
273 EASValsSetEdgeFlag(true);
274 EASValsSetLayer(OOFEG_RAW_GEOMETRY_LAYER);
275 p [ 0 ].x = ( FPNum ) this->giveNode(1)->giveCoordinate(1);
276 p [ 0 ].y = ( FPNum ) this->giveNode(1)->giveCoordinate(2);
277 p [ 0 ].z = 0.;
278 p [ 1 ].x = ( FPNum ) this->giveNode(2)->giveCoordinate(1);
279 p [ 1 ].y = ( FPNum ) this->giveNode(2)->giveCoordinate(2);
280 p [ 1 ].z = 0.;
281 p [ 2 ].x = ( FPNum ) this->giveNode(3)->giveCoordinate(1);
282 p [ 2 ].y = ( FPNum ) this->giveNode(3)->giveCoordinate(2);
283 p [ 2 ].z = 0.;
284
285 go = CreateTriangle3D(p);
286 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
287 EGAttachObject(go, ( EObjectP ) this);
288 EMAddGraphicsToModel(ESIModel(), go);
289}
290
291
292void TrPlaneStress2d :: drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type)
293{
294 WCRec p [ 3 ];
295 GraphicObj *go;
296 double defScale = gc.getDefScale();
297
298 if ( !gc.testElementGraphicActivity(this) ) {
299 return;
300 }
301
302 EASValsSetLineWidth(OOFEG_DEFORMED_GEOMETRY_WIDTH);
303 EASValsSetColor( gc.getDeformedElementColor() );
304 EASValsSetEdgeColor( gc.getElementEdgeColor() );
305 EASValsSetEdgeFlag(true);
306 EASValsSetLayer(OOFEG_DEFORMED_GEOMETRY_LAYER);
307 p [ 0 ].x = ( FPNum ) this->giveNode(1)->giveUpdatedCoordinate(1, tStep, defScale);
308 p [ 0 ].y = ( FPNum ) this->giveNode(1)->giveUpdatedCoordinate(2, tStep, defScale);
309 p [ 0 ].z = 0.;
310 p [ 1 ].x = ( FPNum ) this->giveNode(2)->giveUpdatedCoordinate(1, tStep, defScale);
311 p [ 1 ].y = ( FPNum ) this->giveNode(2)->giveUpdatedCoordinate(2, tStep, defScale);
312 p [ 1 ].z = 0.;
313 p [ 2 ].x = ( FPNum ) this->giveNode(3)->giveUpdatedCoordinate(1, tStep, defScale);
314 p [ 2 ].y = ( FPNum ) this->giveNode(3)->giveUpdatedCoordinate(2, tStep, defScale);
315 p [ 2 ].z = 0.;
316
317 go = CreateTriangle3D(p);
318 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
319 EMAddGraphicsToModel(ESIModel(), go);
320}
321
322void TrPlaneStress2d :: drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
323{
324 int i, indx, result = 0;
325 WCRec p [ 3 ];
326 GraphicObj *tr;
327 FloatArray v1, v2, v3;
328 double s [ 3 ], defScale;
329
330 if ( !gc.testElementGraphicActivity(this) ) {
331 return;
332 }
333
334 if ( gc.giveIntVarMode() == ISM_recovered ) {
335 result += this->giveInternalStateAtNode(v1, gc.giveIntVarType(), gc.giveIntVarMode(), 1, tStep);
336 result += this->giveInternalStateAtNode(v2, gc.giveIntVarType(), gc.giveIntVarMode(), 2, tStep);
337 result += this->giveInternalStateAtNode(v3, gc.giveIntVarType(), gc.giveIntVarMode(), 3, tStep);
338 } else if ( gc.giveIntVarMode() == ISM_local ) {
339 GaussPoint *gp = integrationRulesArray [ 0 ]->getIntegrationPoint(0);
340 result += giveIPValue(v1, gp, gc.giveIntVarType(), tStep);
341 v2 = v1;
342 v3 = v1;
343 result *= 3;
344 }
345
346 if ( result != 3 ) {
347 return;
348 }
349
350 indx = gc.giveIntVarIndx();
351
352 s [ 0 ] = v1.at(indx);
353 s [ 1 ] = v2.at(indx);
354 s [ 2 ] = v3.at(indx);
355
356 EASValsSetLayer(OOFEG_VARPLOT_PATTERN_LAYER);
357
358 if ( gc.getScalarAlgo() == SA_ISO_SURF ) {
359 for ( i = 0; i < 3; i++ ) {
360 if ( gc.getInternalVarsDefGeoFlag() ) {
361 // use deformed geometry
362 defScale = gc.getDefScale();
363 p [ i ].x = ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(1, tStep, defScale);
364 p [ i ].y = ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(2, tStep, defScale);
365 p [ i ].z = 0.;
366 } else {
367 p [ i ].x = ( FPNum ) this->giveNode(i + 1)->giveCoordinate(1);
368 p [ i ].y = ( FPNum ) this->giveNode(i + 1)->giveCoordinate(2);
369 p [ i ].z = 0.;
370 }
371 }
372
373 //EASValsSetColor(gc.getYieldPlotColor(ratio));
374 gc.updateFringeTableMinMax(s, 3);
375 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
376 EGWithMaskChangeAttributes(LAYER_MASK, tr);
377 EMAddGraphicsToModel(ESIModel(), tr);
378 } else if ( ( gc.getScalarAlgo() == SA_ZPROFILE ) || ( gc.getScalarAlgo() == SA_COLORZPROFILE ) ) {
379 double landScale = gc.getLandScale();
380
381 for ( i = 0; i < 3; i++ ) {
382 if ( gc.getInternalVarsDefGeoFlag() ) {
383 // use deformed geometry
384 defScale = gc.getDefScale();
385 p [ i ].x = ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(1, tStep, defScale);
386 p [ i ].y = ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(2, tStep, defScale);
387 p [ i ].z = s [ i ] * landScale;
388 } else {
389 p [ i ].x = ( FPNum ) this->giveNode(i + 1)->giveCoordinate(1);
390 p [ i ].y = ( FPNum ) this->giveNode(i + 1)->giveCoordinate(2);
391 p [ i ].z = s [ i ] * landScale;
392 }
393 }
394
395 if ( gc.getScalarAlgo() == SA_ZPROFILE ) {
396 EASValsSetColor( gc.getDeformedElementColor() );
397 EASValsSetLineWidth(OOFEG_DEFORMED_GEOMETRY_WIDTH);
398 EASValsSetFillStyle(FILL_SOLID);
399 tr = CreateTriangle3D(p);
400 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | FILL_MASK | LAYER_MASK, tr);
401 } else {
402 gc.updateFringeTableMinMax(s, 3);
403 EASValsSetFillStyle(FILL_SOLID);
404 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
405 EGWithMaskChangeAttributes(FILL_MASK | LAYER_MASK, tr);
406 }
407
408 EMAddGraphicsToModel(ESIModel(), tr);
409 }
410}
411
412void
413TrPlaneStress2d :: drawSpecial(oofegGraphicContext &gc, TimeStep *tStep)
414{
415 WCRec l [ 2 ];
416 GraphicObj *tr;
417 double defScale = gc.getDefScale();
418 FloatArray crackStatuses, cf;
419
420 if ( !gc.testElementGraphicActivity(this) ) {
421 return;
422 }
423
424 if ( gc.giveIntVarType() == IST_CrackState ) {
425 // ask if any active crack exist
426 int crackStatus;
427 double ax, ay, bx, by, norm, xc, yc, length;
428 FloatArray crackDir;
429
430 for ( GaussPoint *gp: *integrationRulesArray [ 0 ] ) {
431 if ( this->giveIPValue(cf, gp, IST_CrackedFlag, tStep) == 0 ) {
432 return;
433 }
434
435 if ( ( int ) cf.at(1) == 0 ) {
436 return;
437 }
438
439 if ( this->giveIPValue(crackDir, gp, IST_CrackDirs, tStep) ) {
440 this->giveIPValue(crackStatuses, gp, IST_CrackStatuses, tStep);
441 for ( int i = 1; i <= 3; i++ ) {
442 crackStatus = ( int ) crackStatuses.at(i);
443 if ( ( crackStatus != pscm_NONE ) && ( crackStatus != pscm_CLOSED ) ) {
444 // draw a crack
445 // this element is 2d element in x-y plane
446 //
447 // compute perpendicular line to normal in xy plane
448 ax = crackDir.at(i);
449 ay = crackDir.at(3 + i);
450 if ( fabs(ax) > 1.e-6 ) {
451 by = 1.;
452 bx = -ay * by / ax;
453 norm = sqrt(bx * bx + by * by);
454 bx = bx / norm; // normalize to obtain unit vector
455 by = by / norm;
456 } else {
457 by = 0.0;
458 bx = 1.0;
459 }
460
461 // obtain gp global coordinates - here only one exists
462 // it is in centre of gravity.
463 xc = yc = 0.;
464 for ( int j = 1; j <= 3; j++ ) {
465 if ( gc.getInternalVarsDefGeoFlag() ) {
466 // use deformed geometry
467 xc += ( FPNum ) this->giveNode(j)->giveUpdatedCoordinate(1, tStep, defScale);
468 yc += ( FPNum ) this->giveNode(j)->giveUpdatedCoordinate(2, tStep, defScale);
469 } else {
470 xc += ( FPNum ) this->giveNode(j)->giveCoordinate(1);
471 yc += ( FPNum ) this->giveNode(j)->giveCoordinate(2);
472 }
473 }
474
475 xc = xc / 3.;
476 yc = yc / 3.;
477 length = TR_LENGHT_REDUCT * sqrt( 2 * this->giveArea() ) / 2.0;
478 l [ 0 ].x = ( FPNum ) xc + bx * length;
479 l [ 0 ].y = ( FPNum ) yc + by * length;
480 l [ 0 ].z = 0.;
481 l [ 1 ].x = ( FPNum ) xc - bx * length;
482 l [ 1 ].y = ( FPNum ) yc - by * length;
483 l [ 1 ].z = 0.;
484 EASValsSetLayer(OOFEG_CRACK_PATTERN_LAYER);
485 EASValsSetLineWidth(OOFEG_CRACK_PATTERN_WIDTH);
486 if ( ( crackStatus == pscm_SOFTENING ) || ( crackStatus == pscm_OPEN ) ) {
487 EASValsSetColor( gc.getActiveCrackColor() );
488 } else {
489 EASValsSetColor( gc.getCrackPatternColor() );
490 }
491
492 tr = CreateLine3D(l);
493 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, tr);
494 EMAddGraphicsToModel(ESIModel(), tr);
495 }
496 }
497 }
498 }
499 }
500}
501
502#endif
503
504void
505TrPlaneStress2d :: SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap)
506{
507 pap.resize(3);
508 pap.at(1) = this->giveNode(1)->giveNumber();
509 pap.at(2) = this->giveNode(2)->giveNumber();
510 pap.at(3) = this->giveNode(3)->giveNumber();
511}
512
513void
514TrPlaneStress2d :: SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap)
515{
516 answer.resize(1);
517 if ( ( pap == this->giveNode(1)->giveNumber() ) ||
518 ( pap == this->giveNode(2)->giveNumber() ) ||
519 ( pap == this->giveNode(3)->giveNumber() ) ) {
520 answer.at(1) = pap;
521 } else {
522 OOFEM_ERROR("node unknown");
523 }
524}
525
526int
527TrPlaneStress2d :: SPRNodalRecoveryMI_giveNumberOfIP()
528{
529 return 1;
530}
531
532
534TrPlaneStress2d :: SPRNodalRecoveryMI_givePatchType()
535{
536 return SPRPatchType_2dxy;
537}
538
539void
540TrPlaneStress2d :: computeStrainVectorInLayer(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *masterGp, GaussPoint *slaveGp, TimeStep *tStep)
541{
542 answer=masterGpStrain;
543}
544
545
546} // end namespace oofem
double length(const Vector &a)
Definition CSG.h:88
#define REGISTER_Element(class)
Node * giveNode(int i) const
Definition element.h:629
int numberOfDofMans
Number of dofmanagers.
Definition element.h:136
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
Definition element.h:157
int numberOfGaussPoints
Definition element.h:175
int giveNumber() const
Definition femcmpnn.h:104
void resize(Index s)
Definition floatarray.C:94
double & at(Index i)
Definition floatarray.h:202
void zero()
Zeroes all coefficients of receiver.
Definition floatarray.C:683
void times(double f)
double at(std::size_t i, std::size_t j) const
const FloatArray & giveSubPatchCoordinates() const
Returns local sub-patch coordinates of the receiver.
Definition gausspoint.h:142
void setupRefinedElementProblem2D(Element *element, RefinedElement *refinedElement, int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray, HuertaErrorEstimatorInterface ::SetupMode mode, TimeStep *tStep, int nodes, FloatArray *corner, FloatArray *midSide, FloatArray &midNode, int &localNodeId, int &localElemId, int &localBcId, IntArray &controlNode, IntArray &controlDof, HuertaErrorEstimator ::AnalysisMode aMode, const char *quadtype)
void resize(int n)
Definition intarray.C:73
int & at(std::size_t i)
Definition intarray.h:104
PlaneStressElement(int n, Domain *d)
SpatialLocalizerInterface(Element *element)
double giveCharacteristicLength(const FloatArray &normalToCrackPlane) override
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
int giveInternalStateAtNode(FloatArray &answer, InternalStateType type, InternalStateMode mode, int node, TimeStep *tStep) override
virtual double giveArea()
Definition trplanstrss.C:95
static FEI2dTrLin interp
Definition trplanstrss.h:70
ZZErrorEstimatorInterface(Element *element)
Constructor.
ZZNodalRecoveryModelInterface(Element *element)
Constructor.
#define OOFEM_ERROR(...)
Definition error.h:79
#define pscm_NONE
Definition fcm.h:56
#define pscm_CLOSED
Definition fcm.h:60
#define pscm_SOFTENING
Definition fcm.h:58
#define TR_LENGHT_REDUCT
Definition lspace.C:372
double norm(const FloatArray &x)
@ HuertaErrorEstimatorInterfaceType
@ SPRNodalRecoveryModelInterfaceType
@ ZZNodalRecoveryModelInterfaceType
@ LayeredCrossSectionInterfaceType
@ ZZErrorEstimatorInterfaceType
@ SpatialLocalizerInterfaceType
@ NodalAveragingRecoveryModelInterfaceType
@ ECSM_SquareRootOfArea
@ ECSM_ProjectionCentered
#define OOFEG_CRACK_PATTERN_LAYER
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
#define OOFEG_CRACK_PATTERN_WIDTH
#define pscm_OPEN
Definition rcm2.h:61

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011