OOFEM 3.0
Loading...
Searching...
No Matches
lattice2d.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
39#include "domain.h"
40#include "node.h"
41#include "material.h"
42#include "gausspoint.h"
44#include "floatmatrix.h"
45#include "floatmatrixf.h"
46#include "intarray.h"
47#include "floatarray.h"
48#include "floatarrayf.h"
49#include "mathfem.h"
50#include "datastream.h"
51#include "contextioerr.h"
52#include "classfactory.h"
53#include "parametermanager.h"
54#include "paramkey.h"
55
56#ifdef __OOFEG
57 #include "oofeggraphiccontext.h"
59#endif
60
61namespace oofem {
68
69Lattice2d :: Lattice2d(int n, Domain *aDomain) : LatticeStructuralElement(n, aDomain), couplingNumbers(1)
70{
72
73 length = 0.;
74 pitch = 10.; // a dummy value
75 couplingFlag = 0;
76}
77
78Lattice2d :: ~Lattice2d()
79{ }
80
81
82int
83Lattice2d :: giveCrackFlag()
84{
85 GaussPoint *gp = this->giveDefaultIntegrationRulePtr()->getIntegrationPoint(0);
86 LatticeMaterialStatus *status = static_cast< LatticeMaterialStatus * >( gp->giveMaterialStatus() );
87 return status->giveCrackFlag();
88}
89
90
91double
92Lattice2d :: giveCrackWidth()
93{
94 GaussPoint *gp = this->giveDefaultIntegrationRulePtr()->getIntegrationPoint(0);
95 LatticeMaterialStatus *status = static_cast< LatticeMaterialStatus * >( gp->giveMaterialStatus() );
96 return status->giveCrackWidth();
97}
98
99
100
101double
102Lattice2d :: giveDissipation()
103{
104 GaussPoint *gp = this->giveDefaultIntegrationRulePtr()->getIntegrationPoint(0);
105 LatticeMaterialStatus *status = static_cast< LatticeMaterialStatus * >( gp->giveMaterialStatus() );
106 return status->giveDissipation();
107}
108
109
110double
111Lattice2d :: giveDeltaDissipation()
112{
113 GaussPoint *gp = this->giveDefaultIntegrationRulePtr()->getIntegrationPoint(0);
114 LatticeMaterialStatus *status = static_cast< LatticeMaterialStatus * >( gp->giveMaterialStatus() );
115 return status->giveDeltaDissipation();
116}
117
118void
119Lattice2d :: computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int li, int ui)
120// Returns the strain matrix of the receiver.
121{
122 double l = this->giveLength();
123 double x1, x2, y1, y2, xp, yp;
124
125 //Coordinates of the nodes
126 x1 = this->giveNode(1)->giveCoordinate(1);
127 y1 = this->giveNode(1)->giveCoordinate(2);
128 x2 = this->giveNode(2)->giveCoordinate(1);
129 y2 = this->giveNode(2)->giveCoordinate(2);
130
131 xp = this->gpCoords.at(1);
132 yp = this->gpCoords.at(2);
133
134 double ecc;
135
136 double areaHelp = 0.5 * ( x1 * y2 + x2 * yp + xp * y1 - ( xp * y2 + yp * x1 + x2 * y1 ) );
137
138 ecc = 2 * areaHelp / l;
139
140 // Assemble Bmatrix (used to compute strains and rotations
141 answer.resize(3, 6);
142 answer.zero();
143 answer.at(1, 1) = -1.;
144 answer.at(1, 2) = 0.;
145 answer.at(1, 3) = ecc;
146 answer.at(1, 4) = 1.;
147 answer.at(1, 5) = 0.;
148 answer.at(1, 6) = -ecc;
149
150 answer.at(2, 1) = 0.;
151 answer.at(2, 2) = -1.;
152 answer.at(2, 3) = -l / 2.;
153 answer.at(2, 4) = 0.;
154 answer.at(2, 5) = 1.;
155 answer.at(2, 6) = -l / 2.;
156
157 answer.at(3, 1) = 0.;
158 answer.at(3, 2) = 0.;
159 answer.at(3, 3) = -this->width / sqrt(12.);
160 answer.at(3, 4) = 0.;
161 answer.at(3, 5) = 0.;
162 answer.at(3, 6) = this->width / sqrt(12.);
163
164 answer.times(1. / l);
165}
166
167void
168Lattice2d :: computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
169{
170 answer = static_cast< LatticeCrossSection * >( this->giveCrossSection() )->give2dStiffnessMatrix(rMode, gp, tStep);
171}
172
173void
174Lattice2d :: computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
175{
176 answer = static_cast< LatticeCrossSection * >( this->giveCrossSection() )->giveLatticeStress2d(strain, gp, tStep);
177}
178
179void
180Lattice2d :: computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode,
181 TimeStep *tStep)
182// Computes numerically the stiffness matrix of the receiver.
183{
184 double dV;
185 FloatMatrix d, bj, dbj;
186 answer.resize(6, 6);
187 answer.zero();
188 this->computeBmatrixAt(integrationRulesArray [ 0 ]->getIntegrationPoint(0), bj);
189 this->computeConstitutiveMatrixAt(d, rMode, integrationRulesArray [ 0 ]->getIntegrationPoint(0), tStep);
190 dV = this->computeVolumeAround(integrationRulesArray [ 0 ]->getIntegrationPoint(0) );
191 dbj.beProductOf(d, bj);
192 answer.plusProductUnsym(bj, dbj, dV);
193}
194
195
196void Lattice2d :: computeGaussPoints()
197// Sets up the array of Gauss Points of the receiver.
198{
199 // the gauss point is used only when methods from crosssection and/or material
200 // classes are requested
201 integrationRulesArray.resize(1);
202 integrationRulesArray [ 0 ] = std :: make_unique< GaussIntegrationRule >(1, this, 1, 3);
203 integrationRulesArray [ 0 ]->SetUpPointsOnLine(1, _2dLattice);
204}
205
206
207bool
208Lattice2d :: computeGtoLRotationMatrix(FloatMatrix &answer)
209{
210 double sine, cosine;
211 answer.resize(6, 6);
212 answer.zero();
213
214 sine = sin(this->givePitch() );
215 cosine = cos(pitch);
216 answer.at(1, 1) = cosine;
217 answer.at(1, 2) = sine;
218 answer.at(2, 1) = -sine;
219 answer.at(2, 2) = cosine;
220 answer.at(3, 3) = 1.;
221 answer.at(4, 4) = cosine;
222 answer.at(4, 5) = sine;
223 answer.at(5, 4) = -sine;
224 answer.at(5, 5) = cosine;
225 answer.at(6, 6) = 1.;
226 return 1;
227}
228
229
230double
231Lattice2d :: computeVolumeAround(GaussPoint *gp)
232{
233 double area = this->width * this->thickness;
234 double weight = gp->giveWeight();
235 return weight * 0.5 * this->giveLength() * area;
236}
237
238
239void
240Lattice2d :: giveDofManDofIDMask(int inode, IntArray &answer) const
241{
242 answer = {
243 D_u, D_v, R_w
244 };
245}
246
247
248double Lattice2d :: giveLength()
249// Returns the length of the receiver.
250{
251 double dx, dy;
252 Node *nodeA, *nodeB;
253
254 if ( length == 0. ) {
255 nodeA = this->giveNode(1);
256 nodeB = this->giveNode(2);
257 dx = nodeB->giveCoordinate(1) - nodeA->giveCoordinate(1);
258 dy = nodeB->giveCoordinate(2) - nodeA->giveCoordinate(2);
259 length = sqrt(dx * dx + dy * dy);
260 }
261
262 return length;
263}
264
265
266double Lattice2d :: givePitch()
267// Returns the pitch of the receiver.
268{
269 double xA, xB, yA, yB;
270 Node *nodeA, *nodeB;
271
272 if ( pitch == 10. ) { // 10. : dummy initialization value
273 nodeA = this->giveNode(1);
274 nodeB = this->giveNode(2);
275 xA = nodeA->giveCoordinate(1);
276 xB = nodeB->giveCoordinate(1);
277 yA = nodeA->giveCoordinate(2);
278 yB = nodeB->giveCoordinate(2);
279 pitch = atan2(yB - yA, xB - xA);
280 }
281
282 return pitch;
283}
284
285
286double
287Lattice2d :: giveNormalStress()
288{
289 LatticeMaterialStatus *status;
290
292 GaussPoint *gp = iRule->getIntegrationPoint(0);
293 status = static_cast< LatticeMaterialStatus * >( gp->giveMaterialStatus() );
294 double normalStress = 0;
295 normalStress = status->giveNormalLatticeStress();
296
297 return normalStress;
298}
299
300int
301Lattice2d :: hasBeenUpdated()
302{
303 LatticeMaterialStatus *status;
304
306 GaussPoint *gp = iRule->getIntegrationPoint(0);
307 status = static_cast< LatticeMaterialStatus * >( gp->giveMaterialStatus() );
308 int updateFlag = 0;
309 updateFlag = status->hasBeenUpdated();
310
311 return updateFlag;
312}
313
314
315int
316Lattice2d :: giveLocalCoordinateSystem(FloatMatrix &answer)
317//
318// returns a unit vectors of local coordinate system at element
319// stored rowwise (mainly used by some materials with ortho and anisotrophy)
320//
321{
322 double sine, cosine;
323
324 answer.resize(3, 3);
325 answer.zero();
326
327 sine = sin(this->givePitch() );
328 cosine = cos(pitch);
329
330 answer.at(1, 1) = cosine;
331 answer.at(1, 2) = sine;
332 answer.at(2, 1) = -sine;
333 answer.at(2, 2) = cosine;
334 answer.at(3, 3) = 1.0;
335
336 return 1;
337}
338
339void
340Lattice2d :: initializeFrom(InputRecord &ir, int priority)
341{
342 ParameterManager &ppm = this->giveDomain()->elementPPM;
343 LatticeStructuralElement :: initializeFrom(ir, priority);
344
345 PM_UPDATE_PARAMETER(thickness, ppm, ir, this->number, IPK_Lattice2d_thick, priority);
346 PM_UPDATE_PARAMETER(width, ppm, ir, this->number, IPK_Lattice2d_width, priority);
347 PM_UPDATE_PARAMETER(gpCoords, ppm, ir, this->number, IPK_Lattice2d_gpcoords, priority);
349 PM_UPDATE_PARAMETER(couplingNumbers.at(1), ppm, ir, this->number, IPK_Lattice2d_couplingnumber, priority);
350}
351
352
353int
354Lattice2d :: computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
355{
356 answer.resize(3);
357 answer.at(1) = this->gpCoords.at(1);
358 answer.at(2) = this->gpCoords.at(2);
359
360 return 1;
361}
362
363
364void
365Lattice2d :: giveGpCoordinates(FloatArray &answer)
366{
367 answer.resize(3);
368 answer.at(1) = this->gpCoords.at(1);
369 answer.at(2) = this->gpCoords.at(2);
370}
371
372
373void Lattice2d :: saveContext(DataStream &stream, ContextMode mode)
374{
375 LatticeStructuralElement :: saveContext(stream, mode);
376
377 if ( ( mode & CM_Definition ) ) {
378 if ( !stream.write(width) ) {
380 }
381
382 if ( !stream.write(thickness) ) {
384 }
385
386 if ( !stream.write(couplingFlag) ) {
388 }
389
391 if ( ( iores = couplingNumbers.storeYourself(stream) ) != CIO_OK ) {
392 THROW_CIOERR(iores);
393 }
394
395 if ( ( iores = gpCoords.storeYourself(stream) ) != CIO_OK ) {
396 THROW_CIOERR(iores);
397 }
398 }
399}
400
401
402void Lattice2d :: restoreContext(DataStream &stream, ContextMode mode)
403{
404 LatticeStructuralElement :: restoreContext(stream, mode);
405
406 if ( mode & CM_Definition ) {
407 if ( !stream.read(width) ) {
409 }
410
411 if ( !stream.read(thickness) ) {
413 }
414
415 if ( !stream.read(couplingFlag) ) {
417 }
418
420 if ( ( iores = couplingNumbers.restoreYourself(stream) ) != CIO_OK ) {
421 THROW_CIOERR(iores);
422 }
423
424 if ( ( iores = gpCoords.restoreYourself(stream) ) != CIO_OK ) {
425 THROW_CIOERR(iores);
426 }
427 }
428}
429
430#ifdef __OOFEG
431
432void
433Lattice2d :: drawYourself(oofegGraphicContext &gc, TimeStep *tStep)
434{
435 OGC_PlotModeType mode = gc.giveIntVarPlotMode();
436
437 if ( mode == OGC_rawGeometry ) {
438 this->drawRawGeometry(gc, tStep);
439 this->drawRawCrossSections(gc, tStep);
440 } else if ( mode == OGC_deformedGeometry ) {
441 this->drawDeformedGeometry(gc, tStep, DisplacementVector);
442 } else if ( mode == OGC_eigenVectorGeometry ) {
443 this->drawDeformedGeometry(gc, tStep, EigenVector);
444 } else if ( mode == OGC_scalarPlot ) {
445 this->drawScalar(gc, tStep);
446 } else if ( mode == OGC_elemSpecial ) {
447 this->drawSpecial(gc, tStep);
448 } else {
449 OOFEM_ERROR("unsupported mode");
450 }
451}
452
453void
454Lattice2d :: drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
455{
456 GraphicObj *go;
457
458 WCRec p [ 2 ]; /* points */
459 if ( !gc.testElementGraphicActivity(this) ) {
460 return;
461 }
462
463 EASValsSetLineWidth(OOFEG_RAW_GEOMETRY_WIDTH);
464 EASValsSetColor(gc.getElementColor() );
465 EASValsSetLayer(OOFEG_RAW_GEOMETRY_LAYER);
466
467 p [ 0 ].x = ( FPNum ) this->giveNode(1)->giveCoordinate(1);
468 p [ 0 ].y = ( FPNum ) this->giveNode(1)->giveCoordinate(2);
469 p [ 0 ].z = 0.;
470 p [ 1 ].x = ( FPNum ) this->giveNode(2)->giveCoordinate(1);
471 p [ 1 ].y = ( FPNum ) this->giveNode(2)->giveCoordinate(2);
472 p [ 1 ].z = 0.;
473
474 go = CreateLine3D(p);
475 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
476 EGAttachObject(go, ( EObjectP ) this);
477 EMAddGraphicsToModel(ESIModel(), go);
478}
479
480void
481Lattice2d :: drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type)
482{
483 GraphicObj *go;
484
485 if ( !gc.testElementGraphicActivity(this) ) {
486 return;
487 }
488
489 double defScale = gc.getDefScale();
490
491 WCRec p [ 2 ]; /* poin */
492 EASValsSetLineWidth(OOFEG_DEFORMED_GEOMETRY_WIDTH);
493 EASValsSetColor(gc.getDeformedElementColor() );
494 EASValsSetLayer(OOFEG_DEFORMED_GEOMETRY_LAYER);
495
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 = 0.;
499
500 p [ 1 ].x = ( FPNum ) this->giveNode(2)->giveUpdatedCoordinate(1, tStep, defScale);
501 p [ 1 ].y = ( FPNum ) this->giveNode(2)->giveUpdatedCoordinate(2, tStep, defScale);
502 p [ 1 ].z = 0.;
503
504 go = CreateLine3D(p);
505 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
506 EGAttachObject(go, ( EObjectP ) this);
507 EMAddGraphicsToModel(ESIModel(), go);
508}
509
510void
511Lattice2d :: drawSpecial(oofegGraphicContext &gc, TimeStep *tStep)
512{
513 WCRec p [ 2 ];
514 GraphicObj *tr;
515 GaussPoint *gp;
516 FloatArray crackStatuses, cf;
517
518 if ( !gc.testElementGraphicActivity(this) ) {
519 return;
520 }
521
522 if ( gc.giveIntVarType() == IST_CrackState ) {
523 gp = integrationRulesArray [ 0 ]->getIntegrationPoint(0);
524 this->giveIPValue(crackStatuses, gp, IST_CrackStatuses, tStep);
525 if ( crackStatuses(0) == 1. || crackStatuses(0) == 2. || crackStatuses(0) == 3 || crackStatuses(0) == 4 ) {
526 FloatArray coords;
527 this->giveCrossSectionCoordinates(coords);
528
529 p [ 0 ].x = ( FPNum ) coords.at(1);
530 p [ 0 ].y = ( FPNum ) coords.at(2);
531 p [ 0 ].z = ( FPNum ) coords.at(3);
532 p [ 1 ].x = ( FPNum ) coords.at(4);
533 p [ 1 ].y = ( FPNum ) coords.at(5);
534 p [ 1 ].z = ( FPNum ) coords.at(6);
535
536
537 EASValsSetLayer(OOFEG_CRACK_PATTERN_LAYER);
538 EASValsSetLineWidth(OOFEG_CRACK_PATTERN_WIDTH);
539 if ( ( crackStatuses(0) == 1. ) ) {
540 EASValsSetColor(gc.getActiveCrackColor() );
541 } else if ( crackStatuses(0) == 2. ) {
542 EASValsSetColor(gc.getCrackPatternColor() );
543 } else if ( crackStatuses(0) == 3. ) {
544 EASValsSetColor(gc.getActiveCrackColor() );
545 } else if ( crackStatuses(0) == 4. ) {
546 EASValsSetColor(gc.getActiveCrackColor() );
547 }
548
549
550 tr = CreateLine3D(p);
551 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, tr);
552 EGAttachObject(tr, ( EObjectP ) this);
553 EMAddGraphicsToModel(ESIModel(), tr);
554 }
555 }
556}
557
558void
559Lattice2d :: drawRawCrossSections(oofegGraphicContext &gc, TimeStep *tStep)
560{
561 GraphicObj *go;
562
563 // if (!go) { // create new one
564 WCRec p [ 2 ]; /* poin */
565 if ( !gc.testElementGraphicActivity(this) ) {
566 return;
567 }
568
569 EASValsSetLineWidth(OOFEG_RAW_GEOMETRY_WIDTH);
570 EASValsSetColor(gc.getCrossSectionColor() );
571 EASValsSetLayer(OOFEG_RAW_CROSSSECTION_LAYER);
572
573 FloatArray coords;
574 this->giveCrossSectionCoordinates(coords);
575
576 p [ 0 ].x = ( FPNum ) coords.at(1);
577 p [ 0 ].y = ( FPNum ) coords.at(2);
578 p [ 0 ].z = ( FPNum ) coords.at(3);
579 p [ 1 ].x = ( FPNum ) coords.at(4);
580 p [ 1 ].y = ( FPNum ) coords.at(5);
581 p [ 1 ].z = ( FPNum ) coords.at(6);
582
583 go = CreateLine3D(p);
584 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
585 EGAttachObject(go, ( EObjectP ) this);
586 EMAddGraphicsToModel(ESIModel(), go);
587}
588
589void
590Lattice2d :: giveCrossSectionCoordinates(FloatArray &coords)
591{
592 double x1, y1, x2, y2;
593 x1 = this->giveNode(1)->giveCoordinate(1);
594 y1 = this->giveNode(1)->giveCoordinate(2);
595 x2 = this->giveNode(2)->giveCoordinate(1);
596 y2 = this->giveNode(2)->giveCoordinate(2);
597
598 //Compute normal and shear direction
599 FloatArray normalDirection;
600 FloatArray shearDirection;
601 normalDirection.resize(2);
602 normalDirection.zero();
603 shearDirection.resize(2);
604 shearDirection.zero();
605 normalDirection.at(1) = x2 - x1;
606 normalDirection.at(2) = y2 - y1;
607 normalDirection.normalize();
608 if ( normalDirection.at(2) == 0. ) {
609 shearDirection.at(1) = 0.;
610 shearDirection.at(2) = 1.;
611 } else {
612 shearDirection.at(1) = 1.0;
613 shearDirection.at(2) =
614 -normalDirection.at(1) / normalDirection.at(2);
615 }
616
617 shearDirection.normalize();
618
619 coords.resize(6);
620 coords.at(1) = this->gpCoords.at(1) - shearDirection.at(1) * this->width / 2.;
621 coords.at(2) = this->gpCoords.at(2) - shearDirection.at(2) * this->width / 2.;
622 coords.at(3) = 0.;
623 coords.at(4) = this->gpCoords.at(1) + shearDirection.at(1) * this->width / 2.;
624 coords.at(5) = this->gpCoords.at(2) + shearDirection.at(2) * this->width / 2.;
625 coords.at(6) = 0.;
626}
627
628#endif
629} // end namespace oofem
#define REGISTER_Element(class)
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
double giveCoordinate(int i) const
Definition dofmanager.h:383
Node * giveNode(int i) const
Definition element.h:629
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
Definition element.h:1077
int numberOfDofMans
Number of dofmanagers.
Definition element.h:136
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
Definition element.h:157
CrossSection * giveCrossSection()
Definition element.C:534
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Definition element.h:886
Domain * giveDomain() const
Definition femcmpnn.h:97
int number
Component number.
Definition femcmpnn.h:77
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)
void resize(Index rows, Index cols)
Definition floatmatrix.C:79
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
Definition gausspoint.h:204
double giveWeight()
Returns integration weight of receiver.
Definition gausspoint.h:180
GaussPoint * getIntegrationPoint(int n)
void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep) override
Definition lattice2d.C:454
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
Definition lattice2d.C:168
double giveLength() override
Definition lattice2d.C:248
double computeVolumeAround(GaussPoint *gp) override
Definition lattice2d.C:231
static ParamKey IPK_Lattice2d_thick
Definition lattice2d.h:65
void drawRawCrossSections(oofegGraphicContext &gc, TimeStep *tStep)
Definition lattice2d.C:559
static ParamKey IPK_Lattice2d_width
Definition lattice2d.h:66
IntArray couplingNumbers
Definition lattice2d.h:63
double givePitch()
Definition lattice2d.C:266
void giveCrossSectionCoordinates(FloatArray &coords) override
Definition lattice2d.C:590
void computeBmatrixAt(GaussPoint *, FloatMatrix &, int=1, int=ALL_STRAINS) override
Definition lattice2d.C:119
FloatArray gpCoords
Definition lattice2d.h:61
void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType) override
Definition lattice2d.C:481
static ParamKey IPK_Lattice2d_gpcoords
Definition lattice2d.h:67
static ParamKey IPK_Lattice2d_couplingnumber
Definition lattice2d.h:69
void drawSpecial(oofegGraphicContext &gc, TimeStep *tStep) override
Definition lattice2d.C:511
static ParamKey IPK_Lattice2d_couplingflag
Definition lattice2d.h:68
virtual double giveCrackWidth() const
virtual int giveCrackFlag() const
virtual double giveDissipation() const
virtual int hasBeenUpdated() const
virtual double giveDeltaDissipation() const
double giveNormalLatticeStress() const
Gives the last equilibrated normal stress.
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
#define THROW_CIOERR(e)
#define CM_Definition
Definition contextmode.h:47
#define OOFEM_ERROR(...)
Definition error.h:79
long ContextMode
Definition contextmode.h:43
@ CIO_IOERR
General IO error.
#define OOFEG_RAW_CROSSSECTION_LAYER
#define OOFEG_CRACK_PATTERN_LAYER
oofem::oofegGraphicContext gc[OOFEG_LAST_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 PM_UPDATE_PARAMETER(_val, _pm, _ir, _componentnum, _paramkey, _prio)

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