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

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