OOFEM 3.0
Loading...
Searching...
No Matches
tr_shell01.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 "contextioerr.h"
39#include "gausspoint.h"
40#include "classfactory.h"
41#include "node.h"
42
43#ifdef __OOFEG
44 #include "node.h"
45 #include "oofeggraphiccontext.h"
46 #include "connectivitytable.h"
47#endif
48
49
50namespace oofem {
52
53IntArray TR_SHELL01 :: loc_plate = {3, 4, 5, 9, 10, 11, 15, 16, 17};
54IntArray TR_SHELL01 :: loc_membrane = {1, 2, 6, 7, 8, 12, 13, 14, 18};
55
56TR_SHELL01 :: TR_SHELL01(int n, Domain *aDomain) : StructuralElement(n, aDomain), ZZNodalRecoveryModelInterface(this), ZZErrorEstimatorInterface(this), SpatialLocalizerInterface(this),
57 plate(std::make_unique<CCTPlate3d>(n, aDomain)),
58 membrane(std::make_unique<TrPlaneStrRot3d>(n, aDomain))
59{
61}
62
63
64void
65TR_SHELL01 :: initializeFrom(InputRecord &ir, int priority)
66{
67 // proc tady neni return = this... ??? termitovo
68 StructuralElement :: initializeFrom(ir, priority);
69 plate->initializeFrom(ir, priority);
70 membrane->initializeFrom(ir, priority);
71
72#if 0
73 IR_GIVE_OPTIONAL_FIELD(ir, val, _IFT_Element_nip);
74 if ( val != -1 ) {
75 OOFEM_WARNING("key word NIP is not allowed for element TR_SHELL01");
76 return result;
77 }
79 if ( val != -1 ) {
80 OOFEM_WARNING("key word NIProt is not allowed for element TR_SHELL01");
81 return result;
82 }
83#endif
84}
85
86void
87TR_SHELL01 :: postInitialize()
88{
89 StructuralElement :: postInitialize();
90
91 if ( plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints() != membrane->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints() ) {
92 OOFEM_ERROR("incompatible integration rules detected %d vs %d IPs",
93 plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints(),
94 membrane->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints());
95 }
96}
97
98void
99TR_SHELL01 :: updateLocalNumbering(EntityRenumberingFunctor &f)
100{
101 StructuralElement :: updateLocalNumbering(f);
102 plate->updateLocalNumbering(f);
103 membrane->updateLocalNumbering(f);
104}
105
106void TR_SHELL01 :: setCrossSection(int csIndx)
107{
108 StructuralElement :: setCrossSection(csIndx);
109 plate->setCrossSection(csIndx);
110 membrane->setCrossSection(csIndx);
111}
112
113
114void
115TR_SHELL01 :: giveCharacteristicVector(FloatArray &answer, CharType mtrx, ValueModeType mode, TimeStep *tStep)
116//
117// returns characteristics vector of receiver accordind to mtrx
118//
119{
120 FloatArray aux;
121
122 answer.resize(18);
123 answer.zero();
124
125 plate->giveCharacteristicVector(aux, mtrx, mode, tStep);
126 if ( !aux.isEmpty() ) answer.assemble(aux, loc_plate);
127
128 membrane->giveCharacteristicVector(aux, mtrx, mode, tStep);
129 if ( !aux.isEmpty() ) answer.assemble(aux, loc_membrane);
130}
131
132void
133TR_SHELL01 :: giveCharacteristicMatrix(FloatMatrix &answer, CharType mtrx, TimeStep *tStep)
134//
135// returns characteristics matrix of receiver accordind to mtrx
136//
137{
138 FloatMatrix aux;
139
140 answer.resize(18, 18);
141 answer.zero();
142
143 plate->giveCharacteristicMatrix(aux, mtrx, tStep);
144 if ( aux.isNotEmpty() ) answer.assemble(aux, loc_plate);
145
146 membrane->giveCharacteristicMatrix(aux, mtrx, tStep);
147 if ( aux.isNotEmpty() ) answer.assemble(aux, loc_membrane);
148}
149
150void TR_SHELL01 :: computeBodyLoadVectorAt(FloatArray &answer, Load *forLoad, TimeStep *tStep, ValueModeType mode)
151{
152 FloatArray aux;
153
154 answer.resize(18);
155 answer.zero();
156
157 plate->computeBodyLoadVectorAt(aux, forLoad, tStep, mode);
158 if ( !aux.isEmpty() ) answer.assemble(aux, loc_plate);
159
160 membrane->computeBodyLoadVectorAt(aux, forLoad, tStep, mode);
161 if ( !aux.isEmpty() ) answer.assemble(aux, loc_membrane);
162
163
164
165}
166
167bool
168TR_SHELL01 :: giveRotationMatrix(FloatMatrix &answer)
169{
170 FloatMatrix aux1, aux2;
171 int ncol;
172
173 bool t1 = plate->giveRotationMatrix(aux1);
174 bool t2 = membrane->giveRotationMatrix(aux2);
175
176 if ( t1 != t2 ) {
177 OOFEM_ERROR("Transformation demand mismatch");
178 }
179
180 if ( t1 ) {
181 ncol = aux1.giveNumberOfColumns();
182 answer.resize(18, ncol);
183
184 for ( int i = 1; i <= 9; i++ ) { // row index
185 for ( int j = 1; j <= ncol; j++ ) {
186 answer.at(loc_plate.at(i), j) = aux1.at(i, j);
187 }
188 }
189
190 for ( int i = 1; i <= 9; i++ ) { // row index
191 for ( int j = 1; j <= ncol; j++ ) {
192 answer.at(loc_membrane.at(i), j) = aux2.at(i, j);
193 }
194 }
195 }
196
197 return t1;
198}
199
200void
201TR_SHELL01 :: updateInternalState(TimeStep *tStep)
202// Updates the receiver at end of step.
203{
204 plate->updateInternalState(tStep);
205 membrane->updateInternalState(tStep);
206}
207
208void
209TR_SHELL01 :: updateYourself(TimeStep *tStep)
210{
211 StructuralElement :: updateYourself(tStep);
212
213 plate->updateYourself(tStep);
214 membrane->updateYourself(tStep);
215}
216
217
218Interface *
219TR_SHELL01 :: giveInterface(InterfaceType interface)
220{
221 if ( interface == ZZNodalRecoveryModelInterfaceType ) {
222 return static_cast< ZZNodalRecoveryModelInterface * >(this);
223 } else if ( interface == NodalAveragingRecoveryModelInterfaceType ) {
224 return static_cast< NodalAveragingRecoveryModelInterface * >(this);
225 } else if ( interface == ZZErrorEstimatorInterfaceType ) {
226 return static_cast< ZZErrorEstimatorInterface * >(this);
227 } else if ( interface == SpatialLocalizerInterfaceType ) {
228 return static_cast< SpatialLocalizerInterface * >(this);
229 }
230
231 return NULL;
232}
233
234double
235TR_SHELL01 :: computeVolumeAround(GaussPoint *gp)
236{
237 return plate->computeVolumeAround(gp);
238}
239
240int
241TR_SHELL01 :: giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
242{
243 if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ||
244 type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
245 FloatArray aux;
246 GaussPoint *membraneGP = membrane->giveDefaultIntegrationRulePtr()->getIntegrationPoint(gp->giveNumber() - 1);
247 GaussPoint *plateGP = plate->giveDefaultIntegrationRulePtr()->getIntegrationPoint(gp->giveNumber() - 1);
248
249 plate->giveIPValue(answer, plateGP, type, tStep);
250 membrane->giveIPValue(aux, membraneGP, type, tStep);
251 answer.add(aux);
252 return 1;
253 } else {
254 return StructuralElement :: giveIPValue(answer, gp, type, tStep);
255 }
256}
257
258
259void
260TR_SHELL01 :: NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node,
261 InternalStateType type, TimeStep *tStep)
262{
263 this->giveIPValue(answer, this->giveDefaultIntegrationRulePtr()->getIntegrationPoint(0), type, tStep);
264}
265
266
267void
268TR_SHELL01 :: printOutputAt(FILE *file, TimeStep *tStep)
269{
270 FloatArray v;
272 fprintf( file, "element %d (%8d) :\n", this->giveLabel(), this->giveNumber() );
273
274 for ( auto &gp: *iRule ) {
275 fprintf( file, " GP %2d.%-2d :", iRule->giveNumber(), gp->giveNumber() );
276 // Strain - Curvature
277 this->giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
278
279 fprintf(file, " strains ");
280 // eps_x, eps_y, eps_z, eps_yz, eps_xz, eps_xy
281 fprintf(file, " %.4e %.4e %.4e %.4e %.4e %.4e ",
282 v.at(1), v.at(2), v.at(3), v.at(4), v.at(5), v.at(6) );
283
284 this->giveIPValue(v, gp, IST_CurvatureTensor, tStep);
285
286 fprintf(file, "\n curvatures ");
287 // k_x, k_y, k_z, k_yz, k_xz, k_xy
288 fprintf(file, " %.4e %.4e %.4e %.4e %.4e %.4e ",
289 v.at(1), v.at(2), v.at(3), v.at(4), v.at(5), v.at(6) );
290
291 // Forces - Moments
292 this->giveIPValue(v, gp, IST_ShellForceTensor, tStep);
293
294 fprintf(file, "\n stresses ");
295 // n_x, n_y, n_z, v_yz, v_xz, v_xy
296 fprintf(file, " %.4e %.4e %.4e %.4e %.4e %.4e ",
297 v.at(1), v.at(2), v.at(3), v.at(4), v.at(5), v.at(6) );
298
299 this->giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
300
301 fprintf(file, "\n moments ");
302 // m_x, m_y, m_z, m_yz, m_xz, m_xy
303 fprintf(file, " %.4e %.4e %.4e %.4e %.4e %.4e ",
304 v.at(1), v.at(2), v.at(3), v.at(4), v.at(5), v.at(6) );
305
306 if ( gp->hasSlaveGaussPoint()) { // layered material
307 fprintf(file, "\n Layers report {\n");
308
309 for (auto &sgp: gp->giveSlaveGaussPoints()) {
310 sgp->printOutputAt(file, tStep, " ");
311 }
312 fprintf(file, " }\n");
313
314 }
315
316
317 fprintf(file, "\n");
318 }
319}
320
321
322void
323TR_SHELL01 :: saveContext(DataStream &stream, ContextMode mode)
324{
325 StructuralElement :: saveContext(stream, mode);
326 this->plate->saveContext(stream, mode);
327 this->membrane->saveContext(stream, mode);
328}
329
330void
331TR_SHELL01 :: restoreContext(DataStream &stream, ContextMode mode)
332{
333 StructuralElement :: restoreContext(stream, mode);
334 this->plate->restoreContext(stream, mode);
335 this->membrane->restoreContext(stream, mode);
336}
337
339TR_SHELL01 :: ZZErrorEstimatorI_giveIntegrationRule()
340{
341 if ( !this->compositeIR ) {
342 this->compositeIR = std::make_unique<GaussIntegrationRule>(1, this, 1, 12);
343 this->compositeIR->SetUpPointsOnTriangle(plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints(), _3dShell);
344 }
345 return this->compositeIR.get();
346}
347
348void
349TR_SHELL01 :: ZZErrorEstimatorI_computeLocalStress(FloatArray &answer, FloatArray &sig)
350{
351 // sig is global ShellForceMomentTensor
352 FloatMatrix globTensor(3, 3);
353 const FloatMatrix *GtoLRotationMatrix = plate->computeGtoLRotationMatrix();
354 FloatMatrix LtoGRotationMatrix;
355
356 answer.resize(8); // reduced, local form
357 LtoGRotationMatrix.beTranspositionOf(* GtoLRotationMatrix);
358
359 // Forces
360 globTensor.at(1, 1) = sig.at(1); //sxForce
361 globTensor.at(1, 2) = sig.at(6); //qxyForce
362 globTensor.at(1, 3) = sig.at(5); //qxzForce
363
364 globTensor.at(2, 1) = sig.at(6); //qxyForce
365 globTensor.at(2, 2) = sig.at(2); //syForce
366 globTensor.at(2, 3) = sig.at(4); //syzForce
367
368 globTensor.at(3, 1) = sig.at(5); //qxzForce
369 globTensor.at(3, 2) = sig.at(4); //syzForce
370 globTensor.at(3, 3) = sig.at(3); //szForce
371
372 globTensor.rotatedWith(LtoGRotationMatrix);
373 // Forces: now globTensoris transformed into local c.s
374
375 // answer should be in reduced, local form
376 answer.at(1) = globTensor.at(1, 1); //sxForce
377 answer.at(2) = globTensor.at(2, 2); //syForce
378 answer.at(3) = globTensor.at(1, 2); //qxyForce
379 answer.at(7) = globTensor.at(2, 3); //syzForce
380 answer.at(8) = globTensor.at(1, 3); //qxzForce
381
382
383 // Moments:
384 globTensor.at(1, 1) = sig.at(7); //mxForce
385 globTensor.at(1, 2) = sig.at(12); //mxyForce
386 globTensor.at(1, 3) = sig.at(11); //mxzForce
387
388 globTensor.at(2, 1) = sig.at(12); //mxyForce
389 globTensor.at(2, 2) = sig.at(8); //myForce
390 globTensor.at(2, 3) = sig.at(10); //myzForce
391
392 globTensor.at(3, 1) = sig.at(11); //mxzForce
393 globTensor.at(3, 2) = sig.at(10); //myzForce
394 globTensor.at(3, 3) = sig.at(9); //mzForce
395
396 globTensor.rotatedWith(LtoGRotationMatrix);
397 // now globTensoris transformed into local c.s
398
399 answer.at(4) = globTensor.at(1, 1); //mxForce
400 answer.at(5) = globTensor.at(2, 2); //myForce
401 answer.at(6) = globTensor.at(1, 2); //mxyForce
402}
403
404
405void
406TR_SHELL01 :: SpatialLocalizerI_giveBBox(FloatArray &bb0, FloatArray &bb1)
407{
408 FloatArray lt3, gt3; // global vector in the element thickness direction of lenght thickeness/2
409 const FloatMatrix *GtoLRotationMatrix = plate->computeGtoLRotationMatrix();
410
411 // setup vector in the element local cs. perpendicular to element plane of thickness/2 length
412 lt3 = {0., 0., 1.}; //this->giveCrossSection()->give(CS_Thickness)/2.0; // HUHU
413 // transform it to globa cs
414 gt3.beTProductOf(* GtoLRotationMatrix, lt3);
415
416 // use gt3 to construct element bounding box respecting true element volume
417
418 FloatArray _c;
419
420 for ( int i = 1; i <= this->giveNumberOfNodes(); ++i ) {
421 const auto &coordinates = this->giveNode(i)->giveCoordinates();
422
423 _c = coordinates;
424 _c.add(gt3);
425 if ( i == 1 ) {
426 bb0 = bb1 = _c;
427 } else {
428 bb0.beMinOf(bb0, _c);
429 bb1.beMaxOf(bb1, _c);
430 }
431
432 _c = coordinates;
433 _c.subtract(gt3);
434 bb0.beMinOf(bb0, _c);
435 bb1.beMaxOf(bb1, _c);
436 }
437}
438
439//
440// io routines
441//
442#ifdef __OOFEG
443
444void
445TR_SHELL01 :: drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
446{
447 WCRec p [ 3 ];
448 GraphicObj *go;
449
450 if ( !gc.testElementGraphicActivity(this) ) {
451 return;
452 }
453
454 if ( this->isActivated(tStep) ) {
455 EASValsSetLineWidth(OOFEG_RAW_GEOMETRY_WIDTH);
456 EASValsSetColor( gc.getElementColor() );
457 EASValsSetEdgeColor( gc.getElementEdgeColor() );
458 EASValsSetEdgeFlag(true);
459 EASValsSetFillStyle(FILL_SOLID);
460 EASValsSetLayer(OOFEG_RAW_GEOMETRY_LAYER);
461 p [ 0 ].x = ( FPNum ) this->giveNode(1)->giveCoordinate(1);
462 p [ 0 ].y = ( FPNum ) this->giveNode(1)->giveCoordinate(2);
463 p [ 0 ].z = ( FPNum ) this->giveNode(1)->giveCoordinate(3);
464 p [ 1 ].x = ( FPNum ) this->giveNode(2)->giveCoordinate(1);
465 p [ 1 ].y = ( FPNum ) this->giveNode(2)->giveCoordinate(2);
466 p [ 1 ].z = ( FPNum ) this->giveNode(2)->giveCoordinate(3);
467 p [ 2 ].x = ( FPNum ) this->giveNode(3)->giveCoordinate(1);
468 p [ 2 ].y = ( FPNum ) this->giveNode(3)->giveCoordinate(2);
469 p [ 2 ].z = ( FPNum ) this->giveNode(3)->giveCoordinate(3);
470
471 go = CreateTriangle3D(p);
472 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
473 EGAttachObject(go, ( EObjectP ) this);
474 EMAddGraphicsToModel(ESIModel(), go);
475 }
476}
477
478void
479TR_SHELL01 :: drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type)
480{
481 WCRec p [ 3 ];
482 GraphicObj *go;
483 double defScale = gc.getDefScale();
484
485 if ( !gc.testElementGraphicActivity(this) ) {
486 return;
487 }
488
489 if ( this->isActivated(tStep) ) {
490 EASValsSetLineWidth(OOFEG_DEFORMED_GEOMETRY_WIDTH);
491 EASValsSetColor( gc.getDeformedElementColor() );
492 EASValsSetEdgeColor( gc.getElementEdgeColor() );
493 EASValsSetEdgeFlag(true);
494 EASValsSetFillStyle(FILL_SOLID);
495 EASValsSetLayer(OOFEG_DEFORMED_GEOMETRY_LAYER);
496 p [ 0 ].x = ( FPNum ) this->giveNode(1)->giveUpdatedCoordinate(1, tStep, defScale);
497 p [ 0 ].y = ( FPNum ) this->giveNode(1)->giveUpdatedCoordinate(2, tStep, defScale);
498 p [ 0 ].z = ( FPNum ) this->giveNode(1)->giveUpdatedCoordinate(3, tStep, defScale);
499 p [ 1 ].x = ( FPNum ) this->giveNode(2)->giveUpdatedCoordinate(1, tStep, defScale);
500 p [ 1 ].y = ( FPNum ) this->giveNode(2)->giveUpdatedCoordinate(2, tStep, defScale);
501 p [ 1 ].z = ( FPNum ) this->giveNode(2)->giveUpdatedCoordinate(3, tStep, defScale);
502 p [ 2 ].x = ( FPNum ) this->giveNode(3)->giveUpdatedCoordinate(1, tStep, defScale);
503 p [ 2 ].y = ( FPNum ) this->giveNode(3)->giveUpdatedCoordinate(2, tStep, defScale);
504 p [ 2 ].z = ( FPNum ) this->giveNode(3)->giveUpdatedCoordinate(3, tStep, defScale);
505
506 go = CreateTriangle3D(p);
507 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
508 EMAddGraphicsToModel(ESIModel(), go);
509 }
510}
511
512void
513TR_SHELL01 :: drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
514{
515 int indx, result = 0;
516 WCRec p [ 3 ];
517 GraphicObj *tr;
518 FloatArray v1, v2, v3;
519 double s [ 3 ], defScale;
520 if ( !gc.testElementGraphicActivity(this) ) {
521 return;
522 }
523
524 if ( !this->isActivated(tStep) ) {
525 return;
526 }
527
528 if ( gc.giveIntVarMode() == ISM_recovered ) {
529 result += this->giveInternalStateAtNode(v1, gc.giveIntVarType(), gc.giveIntVarMode(), 1, tStep);
530 result += this->giveInternalStateAtNode(v2, gc.giveIntVarType(), gc.giveIntVarMode(), 2, tStep);
531 result += this->giveInternalStateAtNode(v3, gc.giveIntVarType(), gc.giveIntVarMode(), 3, tStep);
532 } else if ( gc.giveIntVarMode() == ISM_local ) {
533 double tot_w = 0.;
534 FloatArray a, v;
535 for ( GaussPoint *gp: *plate->giveDefaultIntegrationRulePtr() ) {
536 this->giveIPValue(a, gp, IST_ShellMomentTensor, tStep);
537 v.add(gp->giveWeight(), a);
538 tot_w += gp->giveWeight();
539 }
540 v.times(1. / tot_w);
541 v1 = v;
542 v2 = v;
543 v3 = v;
544 }
545
546 indx = gc.giveIntVarIndx();
547
548 s [ 0 ] = v1.at(indx);
549 s [ 1 ] = v2.at(indx);
550 s [ 2 ] = v3.at(indx);
551 EASValsSetLayer(OOFEG_VARPLOT_PATTERN_LAYER);
552 if ( gc.getScalarAlgo() == SA_ISO_SURF ) {
553 for ( int i = 0; i < 3; i++ ) {
554 if ( gc.getInternalVarsDefGeoFlag() ) {
555 // use deformed geometry
556 defScale = gc.getDefScale();
557 p [ i ].x = ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(1, tStep, defScale);
558 p [ i ].y = ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(2, tStep, defScale);
559 p [ i ].z = ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(3, tStep, defScale);
560 } else {
561 p [ i ].x = ( FPNum ) this->giveNode(i + 1)->giveCoordinate(1);
562 p [ i ].y = ( FPNum ) this->giveNode(i + 1)->giveCoordinate(2);
563 p [ i ].z = ( FPNum ) this->giveNode(i + 1)->giveCoordinate(3);
564 }
565 }
566 // //EASValsSetColor(gc.getYieldPlotColor(ratio));
567 gc.updateFringeTableMinMax(s, 3);
568 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
569 EGWithMaskChangeAttributes(LAYER_MASK, tr);
570 EMAddGraphicsToModel(ESIModel(), tr);
571 }
572}
573
574#endif
575} // end namespace oofem
#define REGISTER_Element(class)
Node * giveNode(int i) const
Definition element.h:629
virtual bool isActivated(TimeStep *tStep)
Definition element.C:838
virtual int giveNumberOfNodes() const
Definition element.h:703
int numberOfDofMans
Number of dofmanagers.
Definition element.h:136
int giveLabel() const
Definition element.h:1125
int giveNumber() const
Definition femcmpnn.h:104
void assemble(const FloatArray &fe, const IntArray &loc)
Definition floatarray.C:616
void resize(Index s)
Definition floatarray.C:94
double & at(Index i)
Definition floatarray.h:202
void beMinOf(const FloatArray &a, const FloatArray &b)
Definition floatarray.C:377
void zero()
Zeroes all coefficients of receiver.
Definition floatarray.C:683
bool isEmpty() const
Returns true if receiver is empty.
Definition floatarray.h:265
void beMaxOf(const FloatArray &a, const FloatArray &b)
Definition floatarray.C:350
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Definition floatarray.C:721
void add(const FloatArray &src)
Definition floatarray.C:218
void subtract(const FloatArray &src)
Definition floatarray.C:320
void times(double s)
Definition floatarray.C:834
void rotatedWith(const FloatMatrix &r, char mode='n')
void resize(Index rows, Index cols)
Definition floatmatrix.C:79
int giveNumberOfColumns() const
Returns number of columns of receiver.
void beTranspositionOf(const FloatMatrix &src)
void zero()
Zeroes all coefficient of receiver.
bool isNotEmpty() const
Tests for empty matrix.
void assemble(const FloatMatrix &src, const IntArray &loc)
double at(std::size_t i, std::size_t j) const
int giveNumber()
Returns number of receiver.
Definition gausspoint.h:183
SpatialLocalizerInterface(Element *element)
StructuralElement(int n, Domain *d)
int giveInternalStateAtNode(FloatArray &answer, InternalStateType type, InternalStateMode mode, int node, TimeStep *tStep) override
static IntArray loc_membrane
Definition tr_shell01.h:72
std ::unique_ptr< CCTPlate3d > plate
Pointer to plate element.
Definition tr_shell01.h:61
IntegrationRule * giveDefaultIntegrationRulePtr() override
Definition tr_shell01.h:110
std ::unique_ptr< IntegrationRule > compositeIR
Definition tr_shell01.h:69
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
Definition tr_shell01.C:241
static IntArray loc_plate
Definition tr_shell01.h:71
std ::unique_ptr< TrPlaneStrRot3d > membrane
Pointer to membrane (plane stress) element.
Definition tr_shell01.h:63
ZZErrorEstimatorInterface(Element *element)
Constructor.
ZZNodalRecoveryModelInterface(Element *element)
Constructor.
#define OOFEM_WARNING(...)
Definition error.h:80
#define OOFEM_ERROR(...)
Definition error.h:79
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Definition inputrecord.h:75
long ContextMode
Definition contextmode.h:43
@ ZZNodalRecoveryModelInterfaceType
@ ZZErrorEstimatorInterfaceType
@ SpatialLocalizerInterfaceType
@ 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
#define _IFT_TrPlaneStrRot_niprot
Definition trplanrot.h:43

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