OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
mazarsmodel.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 "mazarsmodel.h"
36 #include "gausspoint.h"
37 #include "floatmatrix.h"
38 #include "floatarray.h"
39 #include "mathfem.h"
40 #include "datastream.h"
41 #include "contextioerr.h"
43 #include "classfactory.h"
44 
45 namespace oofem {
46 #define _MAZARS_MODEL_ITER_TOL 1.e-15
47 #define _MAZARS_MODEL_MAX_ITER 400.
48 
49 REGISTER_Material(MazarsMaterial);
50 
52  //
53  // constructor
54  //
55 {
56  // force the loading / unloading control according to max. reached damage level
58 }
59 
60 
62 //
63 // destructor
64 //
65 { }
66 
69 {
70  IRResultType result; // Required by IR_GIVE_FIELD macro
71  int ver;
72 
73  // Note: IsotropicDamageMaterial1 :: initializeFrom is not activated
74  // because we do not always read ef and the equivalent strain type
75  // cannot be selected
76  // IsotropicDamageMaterial1 :: initializeFrom(ir);
77 
79 
81  if ( result != IRRT_OK ) return result;
83  if ( result != IRRT_OK ) return result;
85  if ( result != IRRT_OK ) return result;
86  // E and nu are made available for direct access
89 
90  ver = 0;
92  if ( ver == 1 ) {
94  } else if ( ver == 0 ) {
95  this->modelVersion = maz_original;
96  } else {
97  OOFEM_WARNING("unknown version");
98  return IRRT_BAD_FORMAT;
99  }
100 
103 
104  this->Bc = ( Ac - 1.0 ) / ( Ac * e0 ); // default value, ensures smooth curve
106 
107  beta = 1.06;
109 
110  if ( this->modelVersion == maz_original ) {
113  } else if ( this->modelVersion == maz_modTension ) {
114  // in case of modified model read ef instead of At, Bt
116  }
117 
118  // ask for optional "reference length"
119  hReft = hRefc = 0.; // default values 0 => no adjustment for element size is used
122 
123  this->mapper.initializeFrom(ir);
124 
125  return IRRT_OK;
126 }
127 
128 
129 void
131 {
132  double posNorm = 0.0;
133  FloatArray principalStrains, strainb;
134 
135  if ( strain.isEmpty() ) {
136  kappa = 0.;
137  return;
138  }
139 
141  // if plane stress mode -> compute strain in z-direction from condition of zero stress in corresponding direction
142  int ndim = giveNumberOfSpatialDimensions(gp);
143  if ( ndim == 2 ) {
144  strainb.at(3) = -nu * ( strainb.at(1) + strainb.at(2) ) / ( 1. - nu );
145  } else if ( ndim == 1 ) {
146  strainb.at(2) = -nu *strainb.at(1);
147  strainb.at(3) = -nu *strainb.at(1);
148  }
149 
150  if ( ndim == 1 ) {
151  principalStrains.resize(3);
152  for ( int i = 1; i <= 3; i++ ) {
153  principalStrains.at(i) = strainb.at(i);
154  }
155  } else {
156  this->computePrincipalValues(principalStrains, strainb, principal_strain);
157  }
158 
159  /*
160  * // simple check
161  * double i1 = strainb.at(1)+strainb.at(2)+strainb.at(3) - principalStrains.at(1)-principalStrains.at(2)-principalStrains.at(3);
162  * double i2 = strainb.at(1)*strainb.at(3)+strainb.at(2)*strainb.at(3)+strainb.at(1)*strainb.at(2) -
163  * 0.25*(strainb.at(4)*strainb.at(4)+strainb.at(5)*strainb.at(5)+strainb.at(6)*strainb.at(6)) -
164  * principalStrains.at(1)*principalStrains.at(3)+principalStrains.at(2)*principalStrains.at(3)+principalStrains.at(1)*principalStrains.at(2);
165  * if ((fabs(i1) > 1.e-6) || (fabs(i2) > 1.e-6)) {
166  * printf("v");
167  * }
168  * // end simple check
169  */
170  for ( int i = 1; i <= 3; i++ ) {
171  if ( principalStrains.at(i) > 0.0 ) {
172  posNorm += principalStrains.at(i) * principalStrains.at(i);
173  }
174  }
175 
176  kappa = sqrt(posNorm);
177 }
178 
179 /*
180  * void
181  * MazarsMaterial :: giveNormalElasticStiffnessMatrix(FloatMatrix &answer,
182  * MatResponseMode rMode,
183  * GaussPoint *gp, TimeStep *tStep)
184  * {
185  * //
186  * // return Elastic Stiffness matrix for normal Stresses
187  * LinearElasticMaterial *lMat = this->giveLinearElasticMaterial();
188  * FloatMatrix de;
189  * int i, j;
190  *
191  * answer.resize(3, 3);
192  * lMat->give3dMaterialStiffnessMatrix(de, rMode, gp, tStep);
193  * // copy first 3x3 submatrix to answer
194  * for ( i = 1; i <= 3; i++ ) {
195  * for ( j = 1; j <= 3; j++ ) {
196  * answer.at(i, j) = de.at(i, j);
197  * }
198  * }
199  * }
200  */
201 
202 int
204 {
205  if ( gp->giveMaterialMode() == _1dMat ) {
206  return 1;
207  } else if ( gp->giveMaterialMode() == _PlaneStress ) {
208  return 2;
209  } else {
210  return 3;
211  }
212 }
213 
214 void
216 {
217  int ndim = giveNumberOfSpatialDimensions(gp);
218  answer.resize(ndim, ndim);
219  for ( int i = 1; i <= ndim; i++ ) {
220  for ( int j = 1; j <= ndim; j++ ) {
221  if ( i == j ) {
222  answer.at(i, j) = 1. / E;
223  } else {
224  answer.at(i, j) = -nu / E;
225  }
226  }
227  }
228 }
229 
230 void
231 MazarsMaterial :: computeDamageParam(double &omega, double kappa, const FloatArray &strain, GaussPoint *gp)
232 {
233  // positive_flag = 0, negat_count = 0;
234  FloatMatrix de, ce;
235  FloatArray sigp, epsti, epsi;
236  double gt, gc, alpha_t, alpha_c, alpha, eqStrain2;
237 
238  if ( kappa <= this->e0 ) { // strain below damage threshold
239  omega = 0.0;
240  return;
241  }
242 
243  // strain above damage threshold
244 
245  int ndim = giveNumberOfSpatialDimensions(gp);
246  if ( !strain.isEmpty() ) {
247  this->computePrincipalValues(epsi, strain, principal_strain);
248  } else {
249  epsi.resize(ndim);
250  epsi.zero();
251  }
252 
253  // construct the normal block of elastic compliance matrix
255  // compute the normal block of elastic stiffness matrix
256  de.beInverseOf(ce);
257 
258  // compute principal stresses
259  sigp.beProductOf(de, epsi);
260  // take positive part
261  for ( int i = 1; i <= ndim; i++ ) {
262  if ( sigp.at(i) < 0. ) {
263  sigp.at(i) = 0.;
264  }
265  }
266 
267  // compute principal strains due to positive stresses
268  epsti.beProductOf(ce, sigp);
269 
270  // extend strains to 3 dimensions
271  if ( ndim == 2 ) {
272  epsi.resize(3);
273  epsti.resize(3);
274  epsi.at(3) = -nu * ( epsi.at(1) + epsi.at(2) ) / ( 1. - nu );
275  epsti.at(3) = -nu * ( epsti.at(1) + epsti.at(2) ) / ( 1. - nu );
276  } else if ( ndim == 1 ) {
277  epsi.resize(3);
278  epsti.resize(3);
279  epsi.at(2) = epsi.at(3) = -nu *epsi.at(1);
280  epsti.at(2) = epsti.at(3) = -nu *epsti.at(1);
281  }
282 
283  /* the following section "improves" biaxial compression
284  * // but it may lead to convergence problems, probably due to the condition > 1.e-6
285  * // therefore it was commented out by Milan Jirasek on 22 Nov 2009
286  *
287  * positive_flag = negat_count = 0;
288  * for ( i = 1; i <= 3; i++ ) {
289  * if ( sigp.at(i) > 1.e-6 ) {
290  * positive_flag = 1;
291  * break;
292  * } else if ( sigp.at(i) < 1.e-6 ) {
293  * negat_count++;
294  * }
295  * }
296  *
297  * if ( ( positive_flag == 0 ) && ( negat_count > 1 ) ) {
298  * // adjust equivalent strain to improve biaxial compression
299  * double f = 0.0, g = 0.0;
300  * for ( i = 1; i <= 3; i++ ) {
301  * if ( sigp.at(i) < 0 ) {
302  * f += sigp.at(i) * sigp.at(i);
303  * g += fabs( sigp.at(i) );
304  * }
305  * }
306  *
307  * f = sqrt(f) / g;
308  * kappa *= f;
309  * }
310  *
311  * // test adjusted kappa
312  * if ( kappa < this->e0 ) {
313  * omega = 0.0;
314  * return;
315  * }
316  * // end of section that improves biaxial compression
317  */
318 
319  // evaluation of damage functions
320  gt = computeGt(kappa, gp);
321  gc = computeGc(kappa, gp);
322 
323  // evaluation of factors alpha_t and alpha_c
324  alpha = 0.0;
325  eqStrain2 = 0.0;
326  for ( int i = 1; i <= 3; i++ ) {
327  if ( epsi.at(i) > 0.0 ) {
328  eqStrain2 += epsi.at(i) * epsi.at(i);
329  alpha += epsti.at(i) * epsi.at(i);
330  }
331  }
332 
333  if ( eqStrain2 > 0. ) {
334  alpha /= eqStrain2;
335  }
336 
337  if ( alpha > 1. ) {
338  alpha = 1.;
339  } else if ( alpha < 0. ) {
340  alpha = 0.;
341  }
342 
343  if ( this->beta == 1. ) {
344  alpha_t = alpha;
345  alpha_c = 1. - alpha;
346  } else if ( alpha <= 0. ) {
347  alpha_t = 0.;
348  alpha_c = 1.;
349  } else if ( alpha < 1. ) {
350  alpha_t = pow(alpha, this->beta);
351  alpha_c = pow( ( 1. - alpha ), this->beta );
352  } else {
353  alpha_t = 1.;
354  alpha_c = 0.;
355  }
356 
357  omega = alpha_t * gt + alpha_c * gc;
358  if ( omega > 1.0 ) {
359  omega = 1.0;
360  }
361 }
362 
363 // evaluation of tensile damage
364 double MazarsMaterial :: computeGt(double kappa, GaussPoint *gp)
365 {
366  double gt;
367  if ( hReft <= 0. ) { // material law considered as independent of element size
368  if ( this->modelVersion == maz_modTension ) { // exponential softening
369  gt = 1.0 - ( this->e0 / kappa ) * exp( ( this->e0 - kappa ) / this->ef );
370  } else { // maz_original
371  gt = 1.0 - ( 1.0 - this->At ) * this->e0 / kappa - this->At *exp( -this->Bt * ( kappa - this->e0 ) );
372  }
373 
374  return gt;
375  }
376 
377  // tension objectivity (material law dependent on element size)
378  int nite = 0;
379  double aux, hCurrt, kappaRefT, dgt, R;
380  MazarsMaterialStatus *status = static_cast< MazarsMaterialStatus * >( this->giveStatus(gp) );
381  hCurrt = status->giveLe();
382  kappaRefT = kappa;
383  do {
384  if ( this->modelVersion == maz_modTension ) {
385  gt = 1.0 - ( this->e0 / kappaRefT ) * exp( ( this->e0 - kappaRefT ) / this->ef );
386  dgt = this->e0 / kappaRefT / kappaRefT + this->e0 / kappaRefT / this->ef;
387  dgt *= exp( ( this->e0 - kappaRefT ) / this->ef );
388  } else { // maz_original
389  gt = 1.0 - ( 1.0 - this->At ) * this->e0 / kappaRefT - this->At *exp( -this->Bt * ( kappaRefT - this->e0 ) );
390  dgt = ( 1.0 - this->At ) * this->e0 / kappaRefT / kappaRefT + this->At *exp( -this->Bt * ( kappaRefT - this->e0 ) ) * this->Bt;
391  }
392 
393  aux = 1 + gt * ( hReft / hCurrt - 1.0 );
394  R = kappaRefT * aux - kappa;
395  if ( fabs(R) <= _MAZARS_MODEL_ITER_TOL ) {
396  if ( ( gt < 0. ) || ( gt > 1.0 ) ) {
397  OOFEM_ERROR("gt out of range ");
398  }
399 
400  return gt * ( hReft * kappaRefT ) / ( hCurrt * kappa );
401  }
402 
403  aux += dgt * kappaRefT * ( hReft / hCurrt - 1.0 );
404  kappaRefT += -R / aux;
405  } while ( nite++ < _MAZARS_MODEL_MAX_ITER );
406 
407  OOFEM_ERROR("tension objectivity iteration internal error - no convergence");
408  return 0.; // just to make the compiler happy
409 }
410 
411 // evaluation of compression damage
412 double MazarsMaterial :: computeGc(double kappa, GaussPoint *gp)
413 {
414  double gc;
415  if ( hRefc <= 0. ) { // material law considered as independent of element size
416  gc = 1.0 - ( 1.0 - this->Ac ) * this->e0 / kappa - this->Ac *exp( -this->Bc * ( kappa - this->e0 ) );
417  return gc;
418  }
419 
420  // compression objectivity (material law dependent on element size)
421  int nite = 0;
422  double aux, hCurrc, kappaRefC, dgc, R;
423  MazarsMaterialStatus *status = static_cast< MazarsMaterialStatus * >( this->giveStatus(gp) );
424  hCurrc = status->giveLec();
425  kappaRefC = kappa;
426  do {
427  gc = 1.0 - ( 1.0 - this->Ac ) * this->e0 / kappaRefC - this->Ac *exp( -this->Bc * ( kappaRefC - this->e0 ) );
428  aux = 1 + gc * ( hRefc / hCurrc - 1.0 );
429  R = kappaRefC * aux - kappa;
430  if ( fabs(R) <= _MAZARS_MODEL_ITER_TOL ) {
431  return gc * ( hRefc * kappaRefC ) / ( hCurrc * kappa );
432  }
433 
434  dgc = ( 1.0 - this->Ac ) * this->e0 / kappaRefC / kappaRefC + this->Ac *exp( -this->Bc * ( kappaRefC - this->e0 ) ) * this->Bc;
435  aux += dgc * kappaRefC * ( hRefc / hCurrc - 1.0 );
436  kappaRefC += -R / aux;
437  } while ( nite++ < _MAZARS_MODEL_MAX_ITER );
438 
439  OOFEM_ERROR("compression objectivity iteration internal error - no convergence");
440  return 0.; // just to make the compiler happy
441 }
442 
443 void
444 MazarsMaterial :: initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp)
445 {
446  int indmin = 1, indmax = 1;
447  double le;
448  FloatArray principalStrains, crackPlaneNormal(3);
449  FloatMatrix principalDir(3, 3);
450  MazarsMaterialStatus *status = static_cast< MazarsMaterialStatus * >( this->giveStatus(gp) );
451 
452  if ( ( kappa > this->e0 ) && ( status->giveDamage() == 0. ) ) {
453  //printf (":");
454 
455 
456  if ( gp->giveMaterialMode() == _1dMat ) {
457  crackPlaneNormal.zero();
458  crackPlaneNormal.at(1) = 1.0;
459  le = gp->giveElement()->giveCharacteristicLength(crackPlaneNormal);
460  status->setLe(le);
461  status->setLec(le);
462  return;
463  }
464 
465 
466  if ( gp->giveMaterialMode() == _PlaneStress ) {
467  principalDir.resize(2, 2);
468  }
469 
470  this->computePrincipalValDir(principalStrains, principalDir, totalStrainVector, principal_strain);
471  if ( gp->giveMaterialMode() == _PlaneStress ) {
472  if ( principalStrains.at(1) > principalStrains.at(2) ) {
473  indmax = 1;
474  indmin = 2;
475  } else {
476  indmax = 2;
477  indmin = 1;
478  }
479  } else {
480  // find index of max and min positive principal strains
481  for ( int i = 2; i <= 3; i++ ) {
482  if ( principalStrains.at(i) > principalStrains.at(indmax) ) {
483  indmax = i;
484  }
485 
486  if ( principalStrains.at(i) < principalStrains.at(indmin) ) {
487  indmin = i;
488  }
489  }
490  }
491 
492  for ( int i = 1; i <= principalStrains.giveSize(); i++ ) {
493  crackPlaneNormal.at(i) = principalDir.at(i, indmax);
494  }
495 
496  le = gp->giveElement()->giveCharacteristicLength(crackPlaneNormal);
497  // remember le in cooresponding status for tension
498  status->setLe(le);
499 
500  for ( int i = 1; i <= principalStrains.giveSize(); i++ ) {
501  crackPlaneNormal.at(i) = principalDir.at(i, indmin);
502  }
503 
504  le = gp->giveElement()->giveCharacteristicLength(crackPlaneNormal);
505  // remember le in cooresponding status for compression
506  status->setLec(le);
507 
508  }
509 }
510 
511 
514 {
515  lec = 0.0;
516 }
517 
520 //
521 // saves full information stored in this Status
522 // no temp variables stored
523 //
524 {
525  contextIOResultType iores;
526  // save parent class status
527  if ( ( iores = IsotropicDamageMaterial1Status :: saveContext(stream, mode, obj) ) != CIO_OK ) {
528  THROW_CIOERR(iores);
529  }
530 
531  // write a raw data
532  if ( !stream.write(lec) ) {
534  }
535 
536  return CIO_OK;
537 }
538 
541 //
542 // restores full information stored in stream to this Status
543 //
544 {
545  contextIOResultType iores;
546  // read parent class status
547  if ( ( iores = IsotropicDamageMaterial1Status :: restoreContext(stream, mode, obj) ) != CIO_OK ) {
548  THROW_CIOERR(iores);
549  }
550 
551  // read raw data
552  if ( !stream.read(lec) ) {
554  }
555 
556  return CIO_OK;
557 }
558 } // end namespace oofem
enum oofem::IsotropicDamageMaterial::loaUnloCriterium llcriteria
MazarsMaterial(int n, Domain *d)
Constructor.
Definition: mazarsmodel.C:51
double giveDamage()
Returns the last equilibrated damage level.
static void computePrincipalValues(FloatArray &answer, const FloatArray &s, stressStrainPrincMode mode)
Common functions for convenience.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition: gausspoint.h:191
double giveLec()
Returns characteristic length stored in receiver.
Definition: mazarsmodel.h:75
Class and object Domain.
Definition: domain.h:115
For computing principal strains from engineering strains.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
double beta
Beta coefficient reducing the effect of shear; default val = 1.06.
Definition: mazarsmodel.h:105
#define _IFT_MazarsMaterial_hreft
Definition: mazarsmodel.h:54
#define _IFT_MazarsMaterial_ac
Definition: mazarsmodel.h:47
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
#define _IFT_MazarsMaterial_bt
Definition: mazarsmodel.h:51
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
#define _IFT_MazarsMaterial_beta
Definition: mazarsmodel.h:49
static MMAContainingElementProjection mapper
Mapper used to map internal variables in adaptivity.
Definition: idm1.h:236
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
void setLe(double ls)
Sets characteristic length to given value.
double lec
Characteristic element length for compression, fixed as square from element size (for 2d)...
Definition: mazarsmodel.h:66
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Element * giveElement()
Returns corresponding element to receiver.
Definition: gausspoint.h:188
General IO error.
double computeGc(double kappa, GaussPoint *gp)
Definition: mazarsmodel.C:412
This class implements associated Material Status to IsotropicDamageMaterial1.
Definition: idm1.h:117
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
Computes principal values and directions of stress or strain vector.
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
double ef
Determines ductility -> corresponds to fracturing strain.
Definition: idm1.h:145
double computeGt(double kappa, GaussPoint *gp)
Definition: mazarsmodel.C:364
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
double hReft
Reference elem-length for objectivity.
Definition: mazarsmodel.h:103
virtual void computeEquivalentStrain(double &kappa, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the equivalent strain measure from given strain vector (full form).
Definition: mazarsmodel.C:130
#define _MAZARS_MODEL_ITER_TOL
Definition: mazarsmodel.C:46
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
EquivStrainType equivStrainType
Parameter specifying the definition of equivalent strain.
Definition: idm1.h:189
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
double giveLe()
Returns characteristic length stored in receiver.
#define _IFT_IsotropicLinearElasticMaterial_n
#define OOFEM_ERROR(...)
Definition: error.h:61
double E
Elastic parameters.
Definition: mazarsmodel.h:99
#define _IFT_MazarsMaterial_version
Definition: mazarsmodel.h:45
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
#define _IFT_IsotropicLinearElasticMaterial_e
virtual void computeDamageParam(double &omega, double kappa, const FloatArray &strain, GaussPoint *gp)
Computes the value of damage parameter omega, based on given value of equivalent strain.
Definition: mazarsmodel.C:231
bool isEmpty() const
Returns true if receiver is empty.
Definition: floatarray.h:222
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: idm1.C:1354
#define _IFT_MazarsMaterial_at
Definition: mazarsmodel.h:50
virtual ~MazarsMaterial()
Destructor.
Definition: mazarsmodel.C:61
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: mazarsmodel.C:519
double At
Model parameters related to the shape of uniaxial stress-strain diagrams.
Definition: mazarsmodel.h:101
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp)
Perfoms initialization, when damage first appear.
Definition: mazarsmodel.C:444
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: mazarsmodel.C:68
double e0
Equivalent strain at stress peak (or a similar parameter).
Definition: idm1.h:143
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
Class representing the general Input Record.
Definition: inputrecord.h:101
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: mazarsmodel.C:540
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
virtual double giveCharacteristicLength(const FloatArray &normalToCrackPlane)
Returns the size of element in the given direction, in some cases adjusted (e.g.
Definition: element.h:874
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
This class implements a simple local isotropic damage model for concrete in tension.
Definition: idm1.h:137
#define _IFT_MazarsMaterial_ef
Definition: mazarsmodel.h:52
virtual IRResultType initializeFrom(InputRecord *ir)
#define _IFT_MazarsMaterial_e0
Definition: mazarsmodel.h:46
REGISTER_Material(DummyMaterial)
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
void setLec(double ls)
Sets characteristic length to given value.
Definition: mazarsmodel.h:77
#define _MAZARS_MODEL_MAX_ITER
Definition: mazarsmodel.C:47
#define _IFT_MazarsMaterial_hrefc
Definition: mazarsmodel.h:55
MazarsMaterialStatus(int n, Domain *d, GaussPoint *g)
Constructor.
Definition: mazarsmodel.C:512
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
This class implements associated Material Status to MazarsMaterial.
Definition: mazarsmodel.h:62
the oofem namespace is to define a context or scope in which all oofem names are defined.
#define _IFT_MazarsMaterial_bc
Definition: mazarsmodel.h:48
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
Definition: floatmatrix.C:835
void giveNormalBlockOfElasticCompliance(FloatMatrix &answer, GaussPoint *gp)
Definition: mazarsmodel.C:215
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define OOFEM_WARNING(...)
Definition: error.h:62
IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Class representing solution step.
Definition: timestep.h:80
enum oofem::MazarsMaterial::mazarsModelVariant modelVersion
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
int giveNumberOfSpatialDimensions(GaussPoint *gp)
Definition: mazarsmodel.C:203

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:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011