OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
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 - 2013 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 
35 #include "../sm/CrossSections/fiberedcs.h"
36 #include "../sm/Elements/structuralelement.h"
37 #include "../sm/Materials/structuralmaterial.h"
38 #include "../sm/Materials/structuralms.h"
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 
46 namespace oofem {
47 REGISTER_CrossSection(FiberedCrossSection);
48 
49 void
51 {
52  OOFEM_ERROR("Not supported");
53 }
54 
55 
56 void
58 {
59  OOFEM_ERROR("Not supported");
60 }
61 
62 
63 void
65 {
66  OOFEM_ERROR("Not supported");
67 }
68 
69 
70 void
72 {
73  OOFEM_ERROR("Not supported");
74 }
75 
76 
77 void
79 {
80  OOFEM_ERROR("Not supported\n");
81 }
82 
83 
84 void
86 {
87  OOFEM_ERROR("Not supported");
88 }
89 
90 
91 void
93 {
94  OOFEM_ERROR("Not supported");
95 }
96 
97 
98 void
100 {
101  OOFEM_ERROR("Not supported");
102 }
103 
104 
105 void
107 {
108  OOFEM_ERROR("Not supported");
109 }
110 
111 
112 
113 
114 void
116 {
117  OOFEM_ERROR("Not supported");
118 }
119 
120 
121 void
123 {
124  double fiberThick, fiberWidth, fiberZCoord, fiberYCoord;
125  FloatArray fiberStrain, reducedFiberStress;
126  StructuralElement *element = static_cast< StructuralElement * >( gp->giveElement() );
127  FiberedCrossSectionInterface *interface;
128 
129  if ( ( interface = static_cast< FiberedCrossSectionInterface * >( element->giveInterface(FiberedCrossSectionInterfaceType) ) ) == NULL ) {
130  OOFEM_ERROR("element with no fiber support encountered");
131  }
132 
133  answer.resize(6);
134  answer.zero();
135 
136  for ( int i = 1; i <= numberOfFibers; i++ ) {
137  GaussPoint *fiberGp = this->giveSlaveGaussPoint(gp, i - 1);
138  StructuralMaterial *fiberMat = static_cast< StructuralMaterial * >( domain->giveMaterial( fiberMaterials.at(i) ) );
139  // the question is whether this function should exist ?
140  // if yes the element details will be hidden.
141  // good idea also should be existence of element::GiveBmatrixOfLayer
142  // and computing strains here - but first idea looks better
143  // but treating of geometric non-linearities may become more complicated
144  // another approach - use several functions with assumed kinematic constraints
145 
146  // resolve current layer z-coordinate
147  fiberThick = this->fiberThicks.at(i);
148  fiberWidth = this->fiberWidths.at(i);
149  fiberYCoord = fiberGp->giveNaturalCoordinate(1);
150  fiberZCoord = fiberGp->giveNaturalCoordinate(2);
151 
152  interface->FiberedCrossSectionInterface_computeStrainVectorInFiber(fiberStrain, strain, fiberGp, tStep);
153 
154  fiberMat->giveRealStressVector_Fiber(reducedFiberStress, fiberGp, fiberStrain, tStep);
155 
156  // perform integration
157  // 1) membrane terms N, Qz, Qy
158  answer.at(1) += reducedFiberStress.at(1) * fiberWidth * fiberThick;
159  answer.at(2) += reducedFiberStress.at(2) * fiberWidth * fiberThick;
160  answer.at(3) += reducedFiberStress.at(3) * fiberWidth * fiberThick;
161  // 2) bending terms mx, my, mxy
162  answer.at(4) += ( reducedFiberStress.at(2) * fiberWidth * fiberThick * fiberYCoord -
163  reducedFiberStress.at(3) * fiberWidth * fiberThick * fiberZCoord );
164  answer.at(5) += reducedFiberStress.at(1) * fiberWidth * fiberThick * fiberZCoord;
165  answer.at(6) -= reducedFiberStress.at(1) * fiberWidth * fiberThick * fiberYCoord;
166  }
167 
168  // now we must update master gp ///@ todo simply chosen the first fiber material as master material /JB
169  StructuralMaterialStatus *status = static_cast< StructuralMaterialStatus * >
170  ( domain->giveMaterial( fiberMaterials.at(1) )->giveStatus(gp) );
171  status->letTempStrainVectorBe(strain);
172  status->letTempStressVectorBe(answer);
173 }
174 
175 
176 void
178 {
179  OOFEM_ERROR("Not supported");
180 }
181 
182 
183 void
185 {
186  OOFEM_ERROR("Not supported");
187 }
188 
189 
190 void
192 {
193  OOFEM_ERROR("Not supported in given cross-section (yet).");
194 }
195 
196 void
198 {
199  OOFEM_ERROR("Not supported in given cross-section.");
200 }
201 
202 void
204  MatResponseMode rMode,
205  GaussPoint *gp,
206  TimeStep *tStep)
207 {
208  MaterialMode mode = gp->giveMaterialMode();
209  if ( mode == _2dBeam ) {
210  this->give2dBeamStiffMtrx(answer, rMode, gp, tStep);
211  } else if ( mode == _3dBeam ) {
212  this->give3dBeamStiffMtrx(answer, rMode, gp, tStep);
213  } else if ( mode == _2dPlate ) {
214  this->give2dPlateStiffMtrx(answer, rMode, gp, tStep);
215  } else if ( mode == _3dShell ) {
216  this->give3dShellStiffMtrx(answer, rMode, gp, tStep);
217  } else {
218  OOFEM_ERROR("Not implemented for bulk materials.");
219  }
220 }
221 
222 
223 void
225 {
226  OOFEM_ERROR("Not implemented");
227 }
228 
229 
230 void
232 //
233 // General strain fiber vector has one of the following forms:
234 // 1) strainVector3d {eps_x,eps_y,eps_z,gamma_yz,gamma_zx,gamma_xy}
235 //
236 // returned strain or stress vector has the form:
237 // 2) strainVectorShell {eps_x, gamma_xz, gamma_xy, \der{phi_x}{x}, kappa_y, kappa_z}
238 //
239 {
240  FloatMatrix fiberMatrix;
241  GaussPoint *fiberGp;
242  double fiberThick, fiberWidth, fiberZCoord, fiberYCoord;
243  double fiberZCoord2, fiberYCoord2, Ip = 0.0, A = 0.0, Ik, G = 0.0;
244 
245  // if (form != ReducedForm) error ("give3dShellMaterialStiffness : full form unsupported");
246 
247  answer.resize(6, 6);
248  answer.zero();
249  // perform integration over layers
250 
251  for ( int i = 1; i <= numberOfFibers; i++ ) {
252  fiberGp = giveSlaveGaussPoint(gp, i - 1);
253  this->giveFiberMaterialStiffnessMatrix(fiberMatrix, rMode, fiberGp, tStep);
254  //
255  // resolve current layer z-coordinate
256  //
257  fiberThick = this->fiberThicks.at(i);
258  fiberWidth = this->fiberWidths.at(i);
259  fiberZCoord = fiberZcoords.at(i);
260  fiberYCoord = fiberYcoords.at(i);
261  fiberYCoord2 = fiberYCoord * fiberYCoord;
262  fiberZCoord2 = fiberZCoord * fiberZCoord;
263  //
264  // perform integration
265  //
266  // 1) membrane terms N, Qz, Qy
267  answer.at(1, 1) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick;
268 
269  answer.at(2, 2) += fiberMatrix.at(2, 2) * fiberWidth * fiberThick;
270 
271  answer.at(3, 3) += fiberMatrix.at(3, 3) * fiberWidth * fiberThick;
272 
273  // 2) bending terms mx, my, mz
274 
275  Ip += fiberWidth * fiberThick * fiberZCoord2 + fiberWidth * fiberThick * fiberYCoord2;
276  A += fiberWidth * fiberThick;
277  G = fiberMatrix.at(2, 2) * fiberWidth * fiberThick;
278 
279  answer.at(5, 5) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick * fiberZCoord2;
280  answer.at(6, 6) += fiberMatrix.at(1, 1) * fiberWidth * fiberThick * fiberYCoord2;
281  }
282 
284  G /= A;
285  Ik = A * A * A * A / ( 40.0 * Ip );
286  answer.at(4, 4) = G * Ik;
287 }
288 
289 
290 void
292 {
293  OOFEM_ERROR("Not implemented");
294 }
295 
296 
297 void
299 {
300  OOFEM_ERROR("Not implemented");
301 }
302 
303 void
305 {
306  OOFEM_ERROR("Not implemented");
307 }
308 
309 void
311 {
312  OOFEM_ERROR("Not supported");
313 }
314 
315 
316 
317 FloatArray *
319  FloatArray *gradientStressVector3d)
320 //
321 // returns modified gradient of stress vector, which is used to
322 // bring stresses back to yield surface.
323 //
324 // imposes zeros on places, where zero stress occurs. if energetically connected
325 // strain is zero, we do not impose zero there, because stress exist and
326 // must be taken into account when computing yeld function. In such case
327 // a problem is assumed to be full 3d with some explicit strain equal to 0.
328 //
329 // On the other hand, if some stress is imposed to be zero, we understand
330 // such case as subspace of 3d case (like a classical plane stess problem, with no
331 // tracing of ez, sigma_z)
332 //
333 {
334  MaterialMode mode = gp->giveMaterialMode();
335  int size = gradientStressVector3d->giveSize();
336  if ( size != 6 ) {
337  OOFEM_ERROR("gradientStressVector3d size mismatch");
338  }
339 
340  switch ( mode ) {
341  case _Fiber:
342  for ( int i = 2; i <= 4; i++ ) {
343  gradientStressVector3d->at(i) = 0.;
344  }
345 
346  break;
347  default:
349  }
350 
351  return gradientStressVector3d;
352 }
353 
354 
355 FloatArray *
357  FloatArray *gradientStrainVector3d)
358 //
359 // returns modified gradient of strain vector, which is used to
360 // compute plastic strain increment.
361 //
362 // imposes zeros on places, where zero strain occurs or energetically connected stress
363 // is prescribed to be zero.
364 //
365 {
366  MaterialMode mode = gp->giveMaterialMode();
367  int size = gradientStrainVector3d->giveSize();
368  if ( size != 6 ) {
369  OOFEM_ERROR("gradientStrainVector3d size mismatch");
370  }
371 
372  switch ( mode ) {
373  case _Fiber:
374  for ( int i = 2; i <= 4; i++ ) {
375  gradientStrainVector3d->at(i) = 0.;
376  }
377 
378  break;
379  default:
381  }
382 
383  return gradientStrainVector3d;
384 }
385 
386 
387 int
389 {
390  Material *mat = this->giveDomain()->giveMaterial( fiberMaterials.at(1) );
391  StructuralMaterialStatus *status = static_cast< StructuralMaterialStatus * >( mat->giveStatus(gp) );
392 
393  if ( type == IST_BeamForceMomentTensor ) {
394  answer = status->giveStressVector();
395  return 1;
396  } else if ( type == IST_BeamStrainCurvatureTensor ) {
397  answer = status->giveStrainVector();
398  return 1;
399  }
400  return CrossSection :: giveIPValue(answer, gp, type, tStep);
401 }
402 
403 
406 //
407 // instanciates receiver from input record
408 //
409 {
410  IRResultType result; // Required by IR_GIVE_FIELD macro
411 
412 # ifdef VERBOSE
413  // VERBOSE_PRINT1 ("Instanciating cross section ",this->giveNumber())
414 # endif
415 
420 
421  // read coordinates of fiber centers from (main pprincipal axes) mid-section
424 
427 
433  OOFEM_WARNING("Array size mismatch ");
434  return IRRT_BAD_FORMAT;
435  }
436 
437  if ( numberOfFibers <= 0 ) {
438  OOFEM_WARNING("numberOfFibers <= 0 is not allowed");
439  return IRRT_BAD_FORMAT;
440  }
441 
442  return IRRT_OK;
443 }
444 
446 {
447  for ( int i = 1; i <= numberOfFibers; i++ ) {
448  GaussPoint *fiberGp = this->giveSlaveGaussPoint(& iGP, i - 1);
449  StructuralMaterial *mat = static_cast< StructuralMaterial * >( domain->giveMaterial( fiberMaterials.at(i) ) );
450  MaterialStatus *matStat = mat->CreateStatus(fiberGp);
451  iGP.setMaterialStatus(matStat);
452  }
453 }
454 
455 GaussPoint *
457 //
458 // return the i-th slave gauss point of master gp
459 // if slave gp don't exists - create them
460 //
461 {
462  GaussPoint *slave = masterGp->giveSlaveGaussPoint(i);
463  if ( slave == NULL ) {
464  // check for proper dimensions - slave can be NULL if index too high or if not
465  // slaves previously defined
466  if ( i > this->numberOfFibers ) {
467  OOFEM_ERROR("no such fiber defined");
468  }
469 
470  // create new slave record in masterGp
471  // (requires that this is friend of gp)
472  // resolve slave material mode
473  MaterialMode slaveMode, masterMode = masterGp->giveMaterialMode();
474  slaveMode = this->giveCorrespondingSlaveMaterialMode(masterMode);
475 
476  masterGp->gaussPoints.resize( this->numberOfFibers );
477 
478  for ( int j = 0; j < numberOfFibers; j++ ) {
479  // in gp - is stored isoparametric coordinate (-1,1) of z-coordinate
480  masterGp->gaussPoints [ j ] = new GaussPoint(masterGp->giveIntegrationRule(), j + 1,
481  {fiberYcoords.at(j + 1), fiberZcoords.at(j + 1)}, 0., slaveMode);
482  }
483 
484  slave = masterGp->gaussPoints [ i ];
485  }
486 
487  return slave;
488 }
489 
490 
491 void
493 // Prints the receiver on screen.
494 {
495  printf("Cross Section with properties : \n");
497  printf("Fiber Materials: \n");
499  printf("Fiber Thicks : \n");
501  printf("Fiber Widths : \n");
503  printf("Fiber y coordinates: \n");
505  printf("Fiber y coordinates: \n");
507 }
508 
509 
512 //
513 // saves full material context (saves state variables, that completely describe
514 // current state)
515 // stores also slaves records of master gp
516 //
517 {
518  contextIOResultType iores;
519 
520  if ( ( iores = CrossSection :: saveIPContext(stream, mode, masterGp) ) != CIO_OK ) {
521  THROW_CIOERR(iores);
522  }
523 
524  // saved master gp record;
525  // and now save slave gp of master:
526  for ( int i = 1; i <= numberOfFibers; i++ ) {
527  GaussPoint *slaveGP = this->giveSlaveGaussPoint(masterGp, i - 1);
528  StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( domain->giveMaterial( fiberMaterials.at(i) ) );
529  if ( ( iores = mat->saveIPContext(stream, mode, slaveGP) ) != CIO_OK ) {
530  THROW_CIOERR(iores);
531  }
532  }
533 
534  return CIO_OK;
535 }
536 
537 
540 //
541 // restores full material context (saves state variables, that completely describe
542 // current state)
543 //
544 // restores also slaves of master gp
545 //
546 {
547  contextIOResultType iores;
548 
549  if ( ( iores = CrossSection :: restoreIPContext(stream, mode, masterGp) ) != CIO_OK ) {
550  THROW_CIOERR(iores); // saved masterGp
551  }
552 
553  for ( int i = 1; i <= numberOfFibers; i++ ) {
554  // creates also slaves if they don't exists
555  GaussPoint *slaveGP = this->giveSlaveGaussPoint(masterGp, i - 1);
556  StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( domain->giveMaterial( fiberMaterials.at(i) ) );
557  if ( ( iores = mat->restoreIPContext(stream, mode, slaveGP) ) != CIO_OK ) {
558  THROW_CIOERR(iores);
559  }
560  }
561 
562  return CIO_OK;
563 }
564 
565 
568 //
569 // returns corresponding slave material mode to master mode
570 //
571 {
572  if ( masterMode == _3dBeam ) {
573  return _Fiber;
574  } else {
575  OOFEM_ERROR("unsupported mode");
576  }
577 
578  return _Unknown;
579 }
580 
581 
582 double
584 {
585  if ( aProperty == CS_Thickness ) {
586  return this->thick;
587  } else if ( aProperty == CS_Width ) {
588  return this->width;
589  } else if ( aProperty == CS_Area ) { // not given in input
590  return this->giveArea();
591  }
592 
593  return CrossSection :: give(aProperty, gp);
594 }
595 
596 
598 {
599  if ( this->area <= 0.0 ) {
600  this->area = 0.0;
601  for ( int i = 1; i <= numberOfFibers; i++ ) {
602  this->area += this->fiberThicks.at(i) * this->fiberWidths.at(i);
603  }
604  }
605 
606  return area;
607 }
608 
609 
610 void
612  MatResponseMode rMode, GaussPoint *layerGp,
613  TimeStep *tStep)
614 {
615  StructuralMaterial *mat = dynamic_cast< StructuralMaterial * >( domain->giveMaterial( fiberMaterials.at( layerGp->giveNumber() ) ) );
616  mat->giveStiffnessMatrix(fiberMatrix, rMode, layerGp, tStep);
617 }
618 
619 
621 {
623 
624  for ( int i = 1; i <= this->numberOfFibers; i++ ) {
625  if ( !this->domain->giveMaterial( this->fiberMaterials.at(i) )->isCharacteristicMtrxSymmetric(rMode) ) {
626  return false;
627  }
628  }
629  return true;
630 }
631 
632 
633 int
635 //
636 // check internal consistency
637 // mainly tests, whether material and crossSection data
638 // are safe for conversion to "Structural" versions
639 //
640 {
641  int result = 1;
642  for ( int i = 1; this->fiberMaterials.giveSize(); i++ ) {
643  Material *mat = this->giveDomain()->giveMaterial( this->fiberMaterials.at(i) );
644  if ( !dynamic_cast< StructuralMaterial * >(mat) ) {
645  OOFEM_WARNING("material %s without structural support", mat->giveClassName() );
646  result = 0;
647  continue;
648  }
649  }
650  return result;
651 }
652 } // end namespace oofem
virtual FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
Returns modified gradient of stress vector, which is used to bring stresses back to yield surface...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition: gausspoint.h:191
void printYourself()
Prints the receiver on screen.
Definition: dictionary.C:145
virtual void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix of receiver in given integration point, respecting its history...
Definition: fiberedcs.C:203
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
virtual void giveStiffnessMatrix_1d(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Definition: fiberedcs.C:106
void printYourself() const
Prints receiver on stdout.
Definition: intarray.C:225
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
Definition: fiberedcs.C:539
virtual void give3dShellStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d shell stiffness matrix.
Definition: fiberedcs.C:298
virtual void createMaterialStatus(GaussPoint &iGP)
Definition: fiberedcs.C:445
virtual void printYourself()
Prints receiver state on stdout. Useful for debugging.
Definition: fiberedcs.C:492
IntegrationPointStatus * setMaterialStatus(IntegrationPointStatus *ptr, int n)
Sets Material status managed by receiver.
Definition: gausspoint.h:213
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Definition: femcmpnn.h:82
#define _IFT_FiberedCrossSection_thicks
Definition: fiberedcs.h:51
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
Definition: material.C:173
virtual void giveGeneralizedStress_MembraneRot(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Definition: fiberedcs.C:191
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
virtual FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
Returns modified gradient of strain vector, which is used to compute plastic strain increment...
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
double width
Total width.
Definition: fiberedcs.h:97
This class implements a structural material status information.
Definition: structuralms.h:65
FloatArray fiberThicks
Thickness for each fiber.
Definition: fiberedcs.h:93
#define _IFT_FiberedCrossSection_fiberzcentrecoords
Definition: fiberedcs.h:54
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode mode)
Check for symmetry of stiffness matrix.
Definition: fiberedcs.C:620
REGISTER_CrossSection(EmptyCS)
double thick
Total thickness.
Definition: fiberedcs.h:96
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
Definition: crosssection.C:128
#define _IFT_FiberedCrossSection_width
Definition: fiberedcs.h:56
virtual void giveGeneralizedStress_Beam3d(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Definition: fiberedcs.C:122
Element * giveElement()
Returns corresponding element to receiver.
Definition: gausspoint.h:188
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
Definition: material.C:204
CrossSectionProperty
List of properties possibly stored in a cross section.
Definition: crosssection.h:58
virtual void giveRealStress_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Definition: fiberedcs.C:57
virtual FloatArray * imposeStressConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStressVector3d)
Returns modified gradient of stress vector, which is used to bring stresses back to yield surface...
Definition: fiberedcs.C:318
GaussPoint * giveSlaveGaussPoint(int index)
Returns index-th slave gauss point of receiver.
Definition: gausspoint.C:106
MaterialMode
Type representing material mode of integration point.
Definition: materialmode.h:89
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of cross section property.
Definition: fiberedcs.h:141
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
Definition: fiberedcs.C:388
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
MatResponseMode
Describes the character of characteristic material matrix.
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
virtual void giveRealStress_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Definition: fiberedcs.C:50
virtual void giveRealStress_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Definition: fiberedcs.C:64
virtual void giveRealStress_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Definition: fiberedcs.C:71
virtual void FiberedCrossSectionInterface_computeStrainVectorInFiber(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *slaveGp, TimeStep *tStep)=0
Computes full 3d strain vector in element fiber.
Abstract base class for all "structural" finite elements.
virtual void give2dPlateStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d plate stiffness matrix.
Definition: fiberedcs.C:291
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
Definition: gausspoint.h:136
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
Dictionary propertyDictionary
Dictionary for storing cross section parameters (like dimensions).
Definition: crosssection.h:115
virtual void giveMembraneRotStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing membrane stiffness matrix with added drilling stiffness.
Definition: fiberedcs.C:304
Material * giveMaterial(int n)
Service for accessing particular domain material model.
Definition: domain.C:281
virtual int checkConsistency()
Allows programmer to test some internal data, before computation begins.
Definition: fiberedcs.C:634
#define OOFEM_ERROR(...)
Definition: error.h:61
virtual void give2dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for 2d beams.
Definition: fiberedcs.C:224
#define _IFT_FiberedCrossSection_nfibers
Definition: fiberedcs.h:49
int giveNumber()
Returns number of receiver.
Definition: gausspoint.h:184
MaterialMode giveCorrespondingSlaveMaterialMode(MaterialMode)
Definition: fiberedcs.C:567
double area
Total area.
Definition: fiberedcs.h:98
Abstract base class for all material models.
Definition: material.h:95
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
Definition: crosssection.C:110
#define _IFT_FiberedCrossSection_widths
Definition: fiberedcs.h:52
IntegrationRule * giveIntegrationRule()
Returns corresponding integration rule to receiver.
Definition: gausspoint.h:186
Abstract base class representing a material status information.
Definition: matstatus.h:84
virtual void giveGeneralizedStress_PlateSubSoil(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Definition: fiberedcs.C:197
virtual void giveStiffnessMatrix_3d(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing the stiffness matrix.
Definition: fiberedcs.C:85
Initializes the variable VERBOSE, in order to get a few intermediate messages on screen: beginning an...
Class representing vector of real numbers.
Definition: floatarray.h:82
virtual void giveGeneralizedStress_Shell(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Definition: fiberedcs.C:184
virtual void giveGeneralizedStress_Plate(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Definition: fiberedcs.C:177
void giveFiberMaterialStiffnessMatrix(FloatMatrix &fiberMatrix, MatResponseMode mode, GaussPoint *layerGp, TimeStep *tStep)
Method for computing 1d fiber stiffness matrix of receiver.
Definition: fiberedcs.C:611
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual double give(CrossSectionProperty a, GaussPoint *gp)
Returns the value of cross section property at given point.
Definition: crosssection.C:151
virtual void giveGeneralizedStress_Beam2d(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)
Computes the generalized stress vector for given strain and integration point.
Definition: fiberedcs.C:115
virtual int giveIPValue(FloatArray &answer, GaussPoint *ip, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
Definition: crosssection.C:89
virtual FloatArray * imposeStrainConstrainsOnGradient(GaussPoint *gp, FloatArray *gradientStrainVector3d)
Returns modified gradient of strain vector, which is used to compute plastic strain increment...
Definition: fiberedcs.C:356
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
Definition: structuralms.h:135
const FloatArray & giveStressVector() const
Returns the const pointer to receiver&#39;s stress vector.
Definition: structuralms.h:107
virtual const char * giveClassName() const =0
virtual void giveRealStressVector_Fiber(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
std::vector< GaussPoint * > gaussPoints
List of slave integration points.
Definition: gausspoint.h:114
Class representing the general Input Record.
Definition: inputrecord.h:101
virtual void printYourself() const
Print receiver on stdout.
Definition: floatarray.C:747
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: fiberedcs.C:405
int numberOfFibers
Number of fibers.
Definition: fiberedcs.h:95
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
GaussPoint * giveSlaveGaussPoint(GaussPoint *gp, int)
Definition: fiberedcs.C:456
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
Definition: femcmpnn.h:179
#define _IFT_FiberedCrossSection_fiberycentrecoords
Definition: fiberedcs.h:53
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
Abstract base class for all "structural" constitutive models.
The element interface required by FiberedCrossSection.
Definition: fiberedcs.h:220
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
Domain * giveDomain() const
Definition: femcmpnn.h:100
virtual void giveStiffnessMatrix_PlaneStrain(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Definition: fiberedcs.C:99
#define _IFT_FiberedCrossSection_thick
Definition: fiberedcs.h:55
int giveSize() const
Definition: intarray.h:203
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
the oofem namespace is to define a context or scope in which all oofem names are defined.
IntArray fiberMaterials
Material of each fiber.
Definition: fiberedcs.h:92
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
Definition: fiberedcs.C:511
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver&#39;s strain vector.
Definition: structuralms.h:105
virtual void give2dPlateSubSoilStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing subsoil stiffness matrix for plates.
Definition: fiberedcs.C:310
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define OOFEM_WARNING(...)
Definition: error.h:62
Class representing solution step.
Definition: timestep.h:80
#define _IFT_FiberedCrossSection_fibermaterials
Definition: fiberedcs.h:50
FloatArray fiberWidths
Width for each fiber.
Definition: fiberedcs.h:94
virtual void giveRealStress_Warping(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Definition: fiberedcs.C:78
virtual void give3dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for 2d beams.
Definition: fiberedcs.C:231
virtual void giveStiffnessMatrix_PlaneStress(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Definition: fiberedcs.C:92
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
Definition: material.h:316

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:28 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011