OOFEM 3.0
Loading...
Searching...
No Matches
fiberedcs.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 "gausspoint.h"
40#include "material.h"
41#include "floatarray.h"
42#include "verbose.h"
43#include "contextioerr.h"
44#include "classfactory.h"
45
46namespace oofem {
48
51{
52 OOFEM_ERROR("Not supported");
53}
54
55
58{
59 OOFEM_ERROR("Not supported");
60}
61
62
65{
66 OOFEM_ERROR("Not supported");
67}
68
69
72{
73 OOFEM_ERROR("Not supported");
74}
75
76
79{
80 OOFEM_ERROR("Not supported\n");
81}
82
83
84
85
88{
89 OOFEM_ERROR("Not supported");
90}
91
92
98
99
102{
103 OOFEM_ERROR("Not supported");
104}
105
106
109{
110 OOFEM_ERROR("Not supported");
111}
112
113
114
115
117FiberedCrossSection::giveStiffnessMatrix_3d(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
118{
119 OOFEM_ERROR("Not supported");
120}
121
122
125{
126 OOFEM_ERROR("Not supported");
127}
128
129
132{
133 OOFEM_ERROR("Not supported");
134}
135
136
138FiberedCrossSection::giveStiffnessMatrix_1d(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
139{
140 OOFEM_ERROR("Not supported");
141}
142
143
144
145
146void
148 MatResponseMode rMode,
149 GaussPoint *gp,
150 TimeStep *tStep)
151{
152 OOFEM_ERROR("Not implemented.");
153}
154
155
158{
159 OOFEM_ERROR("Not supported");
160}
161
162
165{
166 OOFEM_ERROR("Not supported");
167}
168
169
172{
173 OOFEM_ERROR("Not supported");
174}
175
176
179{
180 OOFEM_ERROR("Not supported");
181}
182
183
184
187{
188 OOFEM_ERROR("Not supported");
189}
190
191
194{
195 FloatArray fiberStrain;
196 auto element = static_cast< StructuralElement * >( gp->giveElement() );
197 auto interface = static_cast< FiberedCrossSectionInterface * >( element->giveInterface(FiberedCrossSectionInterfaceType) );
198
199 if ( interface == nullptr ) {
200 OOFEM_ERROR("element with no fiber support encountered");
201 }
202
203 FloatArrayF< 6 >answer;
204
205 for ( int i = 1; i <= this->fiberMaterials.giveSize(); i++ ) {
206 auto fiberGp = this->giveSlaveGaussPoint(gp, i - 1);
207 auto fiberMat = static_cast< StructuralMaterial * >( domain->giveMaterial(fiberMaterials.at(i) ) );
208 // the question is whether this function should exist ?
209 // if yes the element details will be hidden.
210 // good idea also should be existence of element::GiveBmatrixOfLayer
211 // and computing strains here - but first idea looks better
212 // but treating of geometric non-linearities may become more complicated
213 // another approach - use several functions with assumed kinematic constraints
214
215 // resolve current layer z-coordinate
216 double fiberThick = this->fiberThicks.at(i);
217 double fiberWidth = this->fiberWidths.at(i);
218 double fiberYCoord = fiberGp->giveNaturalCoordinate(1);
219 double fiberZCoord = fiberGp->giveNaturalCoordinate(2);
220
221 interface->FiberedCrossSectionInterface_computeStrainVectorInFiber(fiberStrain, strain, fiberGp, tStep);
222
223 auto reducedFiberStress = fiberMat->giveRealStressVector_Fiber(fiberStrain, fiberGp, tStep);
224
225 // perform integration
226 // 1) membrane terms N, Qz, Qy
227 answer.at(1) += reducedFiberStress.at(1) * fiberWidth * fiberThick;
228 answer.at(2) += reducedFiberStress.at(2) * fiberWidth * fiberThick;
229 answer.at(3) += reducedFiberStress.at(3) * fiberWidth * fiberThick;
230 // 2) bending terms mx, my, mxy
231 answer.at(4) += ( reducedFiberStress.at(2) * fiberWidth * fiberThick * fiberYCoord -
232 reducedFiberStress.at(3) * fiberWidth * fiberThick * fiberZCoord );
233 answer.at(5) += reducedFiberStress.at(1) * fiberWidth * fiberThick * fiberZCoord;
234 answer.at(6) -= reducedFiberStress.at(1) * fiberWidth * fiberThick * fiberYCoord;
235 }
236
237 // now we must update master gp ///@ todo simply chosen the first fiber material as master material /JB
238 auto status = static_cast< StructuralMaterialStatus * >( domain->giveMaterial(fiberMaterials.at(1) )->giveStatus(gp) );
239 status->letTempStrainVectorBe(strain);
240 status->letTempStressVectorBe(answer);
241
242 return answer;
243}
244
245
248{
249 OOFEM_ERROR("Not supported");
250}
251
252
255{
256 OOFEM_ERROR("Not supported");
257}
258
261{
262 OOFEM_ERROR("Not supported");
263}
264
265
268{
269 OOFEM_ERROR("Not supported in given cross-section (yet).");
270}
271
274{
275 OOFEM_ERROR("Not supported in given cross-section.");
276}
277
278void
280 MatResponseMode rMode,
281 GaussPoint *gp,
282 TimeStep *tStep)
283{
284 MaterialMode mode = gp->giveMaterialMode();
285 if ( mode == _2dBeam ) {
286 answer = this->give2dBeamStiffMtrx(rMode, gp, tStep);
287 } else if ( mode == _3dBeam ) {
288 answer = this->give3dBeamStiffMtrx(rMode, gp, tStep);
289 } else if ( mode == _2dPlate ) {
290 answer = this->give2dPlateStiffMtrx(rMode, gp, tStep);
291 } else if ( mode == _3dShell ) {
292 answer = this->give3dShellStiffMtrx(rMode, gp, tStep);
293 } else {
294 OOFEM_ERROR("Not implemented for bulk materials.");
295 }
296}
297
298
300FiberedCrossSection::give2dBeamStiffMtrx(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
301{
302 OOFEM_ERROR("Not implemented");
303}
304
305
307FiberedCrossSection::give3dBeamStiffMtrx(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
308//
309// General strain fiber vector has one of the following forms:
310// 1) strainVector3d {eps_x,eps_y,eps_z,gamma_yz,gamma_zx,gamma_xy}
311//
312// returned strain or stress vector has the form:
313// 2) strainVectorShell {eps_x, gamma_xz, gamma_xy, \der{phi_x}{x}, kappa_y, kappa_z}
314//
315{
316 FloatMatrixF< 6, 6 >beamStiffness;
317
318 // perform integration over layers
319 for ( int i = 1; i <= this->fiberMaterials.giveSize(); i++ ) {
320 auto fiberGp = giveSlaveGaussPoint(gp, i - 1);
321 auto mat = dynamic_cast< StructuralMaterial * >( domain->giveMaterial(fiberMaterials.at(fiberGp->giveNumber() ) ) );
322 auto fiberMatrix = mat->giveFiberStiffMtrx(rMode, fiberGp, tStep);
323 //
324 // resolve current layer z-coordinate
325 //
326 double fiberThick = this->fiberThicks.at(i);
327 double fiberWidth = this->fiberWidths.at(i);
328 double fiberZCoord = fiberZcoords.at(i);
329 double fiberYCoord = fiberYcoords.at(i);
330 double fiberYCoord2 = fiberYCoord * fiberYCoord;
331 double fiberZCoord2 = fiberZCoord * fiberZCoord;
332 //
333 // perform integration
334 //
335 // 1) membrane terms N, Qz, Qy
336 beamStiffness.at(1, 1) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick;
337
338 beamStiffness.at(2, 2) += fiberMatrix.at(2, 2) * fiberWidth * fiberThick;
339
340 beamStiffness.at(3, 3) += fiberMatrix.at(3, 3) * fiberWidth * fiberThick;
341
342 // 2) bending terms mx, my, mz
343 // G*Ik
344 beamStiffness.at(4, 4) += fiberMatrix.at(2, 2) * ( fiberWidth * fiberThick * fiberZCoord2 + fiberWidth * fiberThick * fiberYCoord2 );
345
346 beamStiffness.at(5, 5) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick * fiberZCoord2;
347 beamStiffness.at(6, 6) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick * fiberYCoord2;
348 }
349
350 return beamStiffness;
351}
352
353
355FiberedCrossSection::give2dPlateStiffMtrx(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
356{
357 OOFEM_ERROR("Not implemented");
358}
359
360
362FiberedCrossSection::give3dShellStiffMtrx(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
363{
364 OOFEM_ERROR("Not implemented");
365}
366
368FiberedCrossSection::give3dShellRotStiffMtrx(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
369{
370 OOFEM_ERROR("Not implemented");
371}
372
375{
376 OOFEM_ERROR("Not implemented");
377}
378
381{
382 OOFEM_ERROR("Not supported");
383}
384
385
386
389 FloatArray *gradientStressVector3d)
390//
391// returns modified gradient of stress vector, which is used to
392// bring stresses back to yield surface.
393//
394// imposes zeros on places, where zero stress occurs. if energetically connected
395// strain is zero, we do not impose zero there, because stress exist and
396// must be taken into account when computing yeld function. In such case
397// a problem is assumed to be full 3d with some explicit strain equal to 0.
398//
399// On the other hand, if some stress is imposed to be zero, we understand
400// such case as subspace of 3d case (like a classical plane stess problem, with no
401// tracing of ez, sigma_z)
402//
403{
404 MaterialMode mode = gp->giveMaterialMode();
405 int size = gradientStressVector3d->giveSize();
406 if ( size != 6 ) {
407 OOFEM_ERROR("gradientStressVector3d size mismatch");
408 }
409
410 switch ( mode ) {
411 case _Fiber:
412 for ( int i = 2; i <= 4; i++ ) {
413 gradientStressVector3d->at(i) = 0.;
414 }
415
416 break;
417 default:
419 }
420
421 return gradientStressVector3d;
422}
423
424
427 FloatArray *gradientStrainVector3d)
428//
429// returns modified gradient of strain vector, which is used to
430// compute plastic strain increment.
431//
432// imposes zeros on places, where zero strain occurs or energetically connected stress
433// is prescribed to be zero.
434//
435{
436 MaterialMode mode = gp->giveMaterialMode();
437 int size = gradientStrainVector3d->giveSize();
438 if ( size != 6 ) {
439 OOFEM_ERROR("gradientStrainVector3d size mismatch");
440 }
441
442 switch ( mode ) {
443 case _Fiber:
444 for ( int i = 2; i <= 4; i++ ) {
445 gradientStrainVector3d->at(i) = 0.;
446 }
447
448 break;
449 default:
451 }
452
453 return gradientStrainVector3d;
454}
455
456
457int
459{
460 Material *mat = this->giveDomain()->giveMaterial(fiberMaterials.at(1) );
461 StructuralMaterialStatus *status = static_cast< StructuralMaterialStatus * >( mat->giveStatus(gp) );
462
463 if ( type == IST_BeamForceMomentTensor ) {
464 answer = status->giveStressVector();
465 return 1;
466 } else if ( type == IST_BeamStrainCurvatureTensor ) {
467 answer = status->giveStrainVector();
468 return 1;
469 }
470 // return CrossSection :: giveIPValue(answer, gp, type, tStep);
472 int layer = gp->giveIntegrationRule()->giveNumber();
473 return this->giveDomain()->giveMaterial(fiberMaterials.at(layer) )->giveIPValue(answer, gp, type, tStep);
474}
475
476
477void
479{
480# ifdef VERBOSE
481 // VERBOSE_PRINT1 ("Instanciating cross section ",this->giveNumber())
482# endif
483
485
489
490 // read coordinates of fiber centers from (main pprincipal axes) mid-section
493
496
497 int num = fiberMaterials.giveSize();
498 if ( num != fiberThicks.giveSize() ||
499 num != fiberWidths.giveSize() ||
500 num != fiberYcoords.giveSize() ||
501 num != fiberZcoords.giveSize() ) {
502 throw ValueInputException(ir, _IFT_FiberedCrossSection_fibermaterials, "Array size mismatch ");
503 }
504
505 if ( num <= 0 ) {
506 throw ValueInputException(ir, _IFT_FiberedCrossSection_fibermaterials, "number of fibers == 0 is not allowed");
507 }
508
509 area = fiberThicks.dotProduct(fiberWidths);
510}
511
513{
514 for ( int i = 1; i <= fiberMaterials.giveSize(); i++ ) {
515 GaussPoint *fiberGp = this->giveSlaveGaussPoint(& iGP, i - 1);
516 Material *mat = domain->giveMaterial(fiberMaterials.at(i) );
517 //MaterialStatus *matStat = mat->CreateStatus(fiberGp);
518 iGP.setMaterialStatus(mat->CreateStatus(fiberGp));
519 }
520}
521
524//
525// return the i-th slave gauss point of master gp
526// if slave gp don't exists - create them
527//
528{
529 auto slave = masterGp->giveSlaveGaussPoint(i);
530 if ( !slave ) {
531 // check for proper dimensions - slave can be NULL if index too high or if not
532 // slaves previously defined
533 if ( i > this->fiberMaterials.giveSize() ) {
534 OOFEM_ERROR("no such fiber defined");
535 }
536
537 // create new slave record in masterGp
538 // (requires that this is friend of gp)
539 // resolve slave material mode
540 auto masterMode = masterGp->giveMaterialMode();
541 auto slaveMode = this->giveCorrespondingSlaveMaterialMode(masterMode);
542
543 masterGp->gaussPoints.resize(fiberMaterials.giveSize() );
544
545 for ( int j = 0; j < fiberMaterials.giveSize(); j++ ) {
546 // in gp - is stored isoparametric coordinate (-1,1) of z-coordinate
547 masterGp->gaussPoints [ j ] = new GaussPoint(masterGp->giveIntegrationRule(), j + 1,
548 Vec2( fiberYcoords.at(j + 1), fiberZcoords.at(j + 1) ), 0., slaveMode);
549 }
550
551 slave = masterGp->gaussPoints [ i ];
552 }
553
554 return slave;
555}
556
557
558void
560// Prints the receiver on screen.
561{
562 printf("Cross Section with properties : \n");
563 propertyDictionary.printYourself();
564 printf("Fiber Materials: \n");
565 fiberMaterials.printYourself();
566 printf("Fiber Thicks : \n");
567 fiberThicks.printYourself();
568 printf("Fiber Widths : \n");
569 fiberWidths.printYourself();
570 printf("Fiber y coordinates: \n");
571 fiberYcoords.printYourself();
572 printf("Fiber y coordinates: \n");
573 fiberZcoords.printYourself();
574}
575
576
577void
579{
580 CrossSection::saveIPContext(stream, mode, masterGp);
581
582 // saved master gp record;
583 // and now save slave gp of master:
584 for ( int i = 1; i <= fiberMaterials.giveSize(); i++ ) {
585 GaussPoint *slaveGP = this->giveSlaveGaussPoint(masterGp, i - 1);
586 StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( domain->giveMaterial(fiberMaterials.at(i) ) );
587 mat->saveIPContext(stream, mode, slaveGP);
588 }
589}
590
591
592void
594{
595 CrossSection::restoreIPContext(stream, mode, masterGp);
596
597 for ( int i = 1; i <= fiberMaterials.giveSize(); i++ ) {
598 // creates also slaves if they don't exists
599 GaussPoint *slaveGP = this->giveSlaveGaussPoint(masterGp, i - 1);
600 StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( domain->giveMaterial(fiberMaterials.at(i) ) );
601 mat->restoreIPContext(stream, mode, slaveGP);
602 }
603}
604
605
606MaterialMode
608{
609 if ( masterMode == _3dBeam ) {
610 return _Fiber;
611 } else {
612 throw std::runtime_error("Unsupported mode");
613 }
614}
615
616
617double
619{
620 if ( aProperty == CS_Thickness ) {
621 return this->thick;
622 } else if ( aProperty == CS_Width ) {
623 return this->width;
624 } else if ( aProperty == CS_Area ) { // not given in input
625 return this->area;
626 }
627
628 return CrossSection::give(aProperty, gp);
629}
630
631
632bool
634{
636
637 for ( int imat : this->fiberMaterials ) {
638 if ( !this->domain->giveMaterial(imat)->isCharacteristicMtrxSymmetric(rMode) ) {
639 return false;
640 }
641 }
642 return true;
643}
644
645
646int
648{
649 int result = 1;
650 for ( int i = 1; this->fiberMaterials.giveSize(); i++ ) {
651 Material *mat = this->giveDomain()->giveMaterial(this->fiberMaterials.at(i) );
652 if ( !dynamic_cast< StructuralMaterial * >( mat ) ) {
653 OOFEM_WARNING( "material %s without structural support", mat->giveClassName() );
654 result = 0;
655 continue;
656 }
657 }
658 return result;
659}
660
661Material *
663{
667 ) {
668 return domain->giveMaterial(fiberMaterials.at(1) );
669 //return this->domain->giveMaterial( this->giveLayerMaterial(ip->giveNumber()) );
670 }
671
672 if ( ip->hasSlaveGaussPoint() ) {
673 return domain->giveMaterial(fiberMaterials.at(1) ); //virtual master, has no material assigned in input file
674 } else {
675 return domain->giveMaterial(fiberMaterials.at(1) ); //virtual master, has no material assigned in input file
676 //OOFEM_ERROR("Not implemented.")
677 }
678 return nullptr;
679}
680} // end namespace oofem
#define REGISTER_CrossSection(class)
Dictionary propertyDictionary
virtual double give(CrossSectionProperty a, GaussPoint *gp) const
virtual void saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
void initializeFrom(InputRecord &ir) override
virtual void restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Material * giveMaterial(int n)
Definition domain.C:284
Domain * giveDomain() const
Definition femcmpnn.h:97
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Definition femcmpnn.h:79
virtual const char * giveClassName() const =0
FloatMatrixF< 9, 9 > give3dShellRotStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:368
static MaterialMode giveCorrespondingSlaveMaterialMode(MaterialMode)
Definition fiberedcs.C:607
FloatMatrixF< 3, 3 > give2dBeamStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:300
FloatMatrixF< 4, 4 > giveStiffnessMatrix_dPdF_PlaneStress(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:164
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
Definition fiberedcs.C:458
double width
Total width.
Definition fiberedcs.h:97
FloatArray fiberWidths
Width for each fiber.
Definition fiberedcs.h:94
FloatArrayF< 2 > giveRealStress_Warping(const FloatArrayF< 2 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:78
FloatArrayF< 3 > giveRealStress_PlaneStress(const FloatArrayF< 3 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:64
bool isCharacteristicMtrxSymmetric(MatResponseMode mode) const override
Definition fiberedcs.C:633
void restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp) override
Definition fiberedcs.C:593
FloatArray fiberThicks
Thickness for each fiber.
Definition fiberedcs.h:93
double area
Total area.
Definition fiberedcs.h:98
FloatArrayF< 9 > giveFirstPKStress_3d(const FloatArrayF< 9 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:87
FloatArrayF< 3 > giveGeneralizedStress_PlateSubSoil(const FloatArrayF< 3 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:273
FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStrainVector3d) override
Definition fiberedcs.C:426
FloatMatrixF< 5, 5 > give2dPlateStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:355
double give(int aProperty, GaussPoint *gp) const override
Definition fiberedcs.h:136
FloatMatrixF< 3, 3 > giveStiffnessMatrix_PlaneStress(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:124
FloatArrayF< 6 > giveGeneralizedStress_Beam3d(const FloatArrayF< 6 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:193
FloatMatrixF< 9, 9 > giveStiffnessMatrix_dPdF_3d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:157
double thick
Total thickness.
Definition fiberedcs.h:96
FloatMatrixF< 1, 1 > giveStiffnessMatrix_1d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:138
FloatArrayF< 4 > giveFirstPKStress_PlaneStress(const FloatArrayF< 4 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:101
void printYourself() override
Prints receiver state on stdout. Useful for debugging.
Definition fiberedcs.C:559
FloatArrayF< 5 > giveGeneralizedStress_Plate(const FloatArrayF< 5 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:247
FloatMatrixF< 4, 4 > giveMembraneRotStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:374
FloatArrayF< 1 > giveFirstPKStress_1d(const FloatArrayF< 1 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:108
FloatMatrixF< 3, 3 > give2dPlateSubSoilStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:380
FloatArrayF< 1 > giveRealStress_1d(const FloatArrayF< 1 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:71
FloatMatrixF< 6, 6 > giveStiffnessMatrix_3d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:117
FloatMatrixF< 6, 6 > give3dBeamStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:307
FloatArrayF< 9 > giveGeneralizedStress_ShellRot(const FloatArrayF< 9 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:260
FloatMatrixF< 8, 8 > give3dShellStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:362
FloatArrayF< 5 > giveFirstPKStress_PlaneStrain(const FloatArrayF< 5 > &reducedvF, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:94
FloatMatrixF< 5, 5 > giveStiffnessMatrix_dPdF_PlaneStrain(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:171
GaussPoint * giveSlaveGaussPoint(GaussPoint *gp, int) const
Definition fiberedcs.C:523
IntArray fiberMaterials
Material of each fiber.
Definition fiberedcs.h:92
FloatArrayF< 8 > giveGeneralizedStress_Shell(const FloatArrayF< 8 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:254
int checkConsistency() override
Definition fiberedcs.C:647
FloatArrayF< 4 > giveRealStress_PlaneStrain(const FloatArrayF< 4 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:57
FloatArrayF< 6 > giveRealStress_3d(const FloatArrayF< 6 > &reducedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:50
void createMaterialStatus(GaussPoint &iGP) override
Definition fiberedcs.C:512
Material * giveMaterial(IntegrationPoint *ip) const override
hidden by virtual oofem::Material* TransportCrossSection::giveMaterial() const
Definition fiberedcs.C:662
FloatMatrixF< 1, 1 > giveStiffnessMatrix_dPdF_1d(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:178
void giveCharMaterialStiffnessMatrix_dPdF(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
Definition fiberedcs.C:147
void saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp) override
Definition fiberedcs.C:578
void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) override
Definition fiberedcs.C:279
FloatArrayF< 4 > giveGeneralizedStress_MembraneRot(const FloatArrayF< 4 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:267
FloatArrayF< 3 > giveGeneralizedStress_Beam2d(const FloatArrayF< 3 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:186
FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d) override
Definition fiberedcs.C:388
void initializeFrom(InputRecord &ir) override
Definition fiberedcs.C:478
FloatMatrixF< 4, 4 > giveStiffnessMatrix_PlaneStrain(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition fiberedcs.C:131
double & at(std::size_t i)
double & at(Index i)
Definition floatarray.h:202
Index giveSize() const
Returns the size of receiver.
Definition floatarray.h:261
double at(std::size_t i, std::size_t j) const
bool hasSlaveGaussPoint()
Definition gausspoint.C:109
IntegrationPointStatus * setMaterialStatus(std::unique_ptr< IntegrationPointStatus > ptr, IntegrationPointStatusIDType key=IPSID_Default)
Definition gausspoint.h:213
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition gausspoint.h:190
IntegrationRule * giveIntegrationRule()
Returns corresponding integration rule to receiver.
Definition gausspoint.h:185
Element * giveElement()
Returns corresponding element to receiver.
Definition gausspoint.h:187
integrationDomain giveIntegrationDomain() const
virtual std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const
Definition material.h:332
virtual void restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Definition material.C:182
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Definition material.C:206
virtual void saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Definition material.C:169
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Definition material.C:138
virtual FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
virtual FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
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.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual FloatMatrixF< 3, 3 > giveFiberStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const
#define OOFEM_WARNING(...)
Definition error.h:80
#define OOFEM_ERROR(...)
Definition error.h:79
#define _IFT_FiberedCrossSection_width
Definition fiberedcs.h:56
#define _IFT_FiberedCrossSection_fiberzcentrecoords
Definition fiberedcs.h:54
#define _IFT_FiberedCrossSection_thick
Definition fiberedcs.h:55
#define _IFT_FiberedCrossSection_widths
Definition fiberedcs.h:52
#define _IFT_FiberedCrossSection_fiberycentrecoords
Definition fiberedcs.h:53
#define _IFT_FiberedCrossSection_fibermaterials
Definition fiberedcs.h:50
#define _IFT_FiberedCrossSection_thicks
Definition fiberedcs.h:51
#define IR_GIVE_FIELD(__ir, __value, __id)
Definition inputrecord.h:67
static FloatArray Vec2(const double &a, const double &b)
Definition floatarray.h:606
long ContextMode
Definition contextmode.h:43
CrossSectionProperty
List of properties possibly stored in a cross section.
@ CS_Area
Area.
@ CS_Thickness
Thickness.
@ CS_Width
Width.
GaussPoint IntegrationPoint
Definition gausspoint.h:272
@ FiberedCrossSectionInterfaceType

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