OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
isodamagemodel.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 "isodamagemodel.h"
36 #include "floatmatrix.h"
37 #include "floatarray.h"
38 #include "mathfem.h"
39 #include "datastream.h"
40 #include "contextioerr.h"
41 #include "dynamicinputrecord.h"
42 
43 namespace oofem {
45  //
46  // constructor
47  //
48 {
49  linearElasticMaterial = NULL;
51  maxOmega = 0.999999;
52  permStrain = 0;
53 }
54 
55 
57 //
58 // destructor
59 //
60 {
61  delete linearElasticMaterial;
62 }
63 
64 int
66 //
67 // returns whether receiver supports given mode
68 //
69 {
70  return mode == _3dMat || mode == _PlaneStress || mode == _PlaneStrain || mode == _1dMat;
71 }
72 
73 
74 void
76  MatResponseMode mode,
77  GaussPoint *gp,
78  TimeStep *tStep)
79 //
80 // computes full constitutive matrix for case of gp stress-strain state.
81 //
82 {
83  IsotropicDamageMaterialStatus *status = static_cast< IsotropicDamageMaterialStatus * >( this->giveStatus(gp) );
84  double tempDamage;
85  if ( mode == ElasticStiffness ) {
86  tempDamage = 0.0;
87  } else {
88  tempDamage = status->giveTempDamage();
89  tempDamage = min(tempDamage, maxOmega);
90  }
91 
92  this->giveLinearElasticMaterial()->give3dMaterialStiffnessMatrix(answer, mode, gp, tStep);
93  answer.times(1.0 - tempDamage);
94  //TODO - correction for tangent mode
95 }
96 
97 
98 void
100  const FloatArray &totalStrain,
101  TimeStep *tStep)
102 //
103 // returns real stress vector in 3d stress space of receiver according to
104 // previous level of stress and current
105 // strain increment, the only way, how to correctly update gp records
106 //
107 {
108  IsotropicDamageMaterialStatus *status = static_cast< IsotropicDamageMaterialStatus * >( this->giveStatus(gp) );
109  //StructuralCrossSection *crossSection = (StructuralCrossSection*) gp -> giveElement()->giveCrossSection();
111  FloatArray reducedTotalStrainVector;
112  FloatMatrix de;
113  double f, equivStrain, tempKappa = 0.0, omega = 0.0;
114 
115  this->initTempStatus(gp);
116 
117  // subtract stress-independent part
118  // note: eigenStrains (temperature) are present in strains stored in gp
119  // therefore it is necessary to subtract always the total eigen strain value
120  this->giveStressDependentPartOfStrainVector(reducedTotalStrainVector, gp, totalStrain, tStep, VM_Total);
121 
122  //crossSection->giveFullCharacteristicVector(totalStrainVector, gp, reducedTotalStrainVector);
123 
124  // compute equivalent strain
125  this->computeEquivalentStrain(equivStrain, reducedTotalStrainVector, gp, tStep);
126 
127  if ( llcriteria == idm_strainLevelCR ) {
128  // compute value of loading function if strainLevel crit apply
129  f = equivStrain - status->giveKappa();
130 
131  if ( f <= 0.0 ) {
132  // damage does not grow
133  tempKappa = status->giveKappa();
134  omega = status->giveDamage();
135  } else {
136  // damage grows
137  tempKappa = equivStrain;
138  this->initDamaged(tempKappa, reducedTotalStrainVector, gp);
139  // evaluate damage parameter
140  this->computeDamageParam(omega, tempKappa, reducedTotalStrainVector, gp);
141  }
142  } else if ( llcriteria == idm_damageLevelCR ) {
143  // evaluate damage parameter first
144  tempKappa = equivStrain;
145  this->initDamaged(tempKappa, reducedTotalStrainVector, gp);
146  this->computeDamageParam(omega, tempKappa, reducedTotalStrainVector, gp);
147  if ( omega < status->giveDamage() ) {
148  // unloading takes place
149  omega = status->giveDamage();
150  }
151  } else {
152  OOFEM_ERROR("unsupported loading/unloading criterion");
153  }
154 
155 
156  lmat->giveStiffnessMatrix(de, SecantStiffness, gp, tStep);
157  //mj
158  // permanent strain - so far implemented only in 1D
159  if ( permStrain && reducedTotalStrainVector.giveSize() == 1 ) {
160  double epsp = evaluatePermanentStrain(tempKappa, omega);
161  reducedTotalStrainVector.at(1) -= epsp;
162  }
163  // damage deactivation in compression for 1D model
164  if ( ( reducedTotalStrainVector.giveSize() > 1 ) || ( reducedTotalStrainVector.at(1) > 0. ) ) {
165  //emj
166  de.times(1.0 - omega);
167  }
168 
169  answer.beProductOf(de, reducedTotalStrainVector);
170 
171  // update gp
172  status->letTempStrainVectorBe(totalStrain);
173  status->letTempStressVectorBe(answer);
174  status->setTempKappa(tempKappa);
175  status->setTempDamage(omega);
176 #ifdef keep_track_of_dissipated_energy
177  status->computeWork(gp);
178 #endif
179 }
180 
181 
183  GaussPoint *gp, TimeStep *tStep)
184 {
185  IsotropicDamageMaterialStatus *status = static_cast< IsotropicDamageMaterialStatus * >( this->giveStatus(gp) );
186  double tempDamage;
187  if ( mode == ElasticStiffness ) {
188  tempDamage = 0.0;
189  } else {
190  tempDamage = status->giveTempDamage();
191  tempDamage = min(tempDamage, maxOmega);
192  }
193 
194  this->giveLinearElasticMaterial()->giveStiffnessMatrix(answer, mode, gp, tStep);
195  answer.times(1.0 - tempDamage);
196  if ( mode == TangentStiffness ) {
197  double damage = status->giveDamage();
198  if ( tempDamage > damage ) {
199  double tempKappa;
200  FloatArray stress, strain, eta;
201  FloatMatrix correctionTerm;
202  stress = status->giveTempStressVector();
203  strain = status->giveTempStrainVector();
204  tempKappa = status->giveTempKappa();
205  // effective stress
206  stress.times( 1. / ( 1 - tempDamage ) );
207  //Computes derivative of the equivalent strain with regards to strain
208  this->computeEta(eta, strain, gp, tStep);
209  //compute derivative of damage function
210  double damagePrime = damageFunctionPrime(tempKappa, gp);
211  // dyadic product of eff stress and eta
212  correctionTerm.beDyadicProductOf(stress, eta);
213  // times minus derivative of damage function
214  correctionTerm.times(-damagePrime);
215  // add to secant stiffness
216  answer.add(correctionTerm);
217  }
218  }
219 }
220 
221 
223  GaussPoint *gp, TimeStep *tStep)
224 {
225  IsotropicDamageMaterialStatus *status = static_cast< IsotropicDamageMaterialStatus * >( this->giveStatus(gp) );
226  double tempDamage;
227  if ( mode == ElasticStiffness ) {
228  tempDamage = 0.0;
229  } else {
230  tempDamage = status->giveTempDamage();
231  tempDamage = min(tempDamage, maxOmega);
232  }
233 
234  this->giveLinearElasticMaterial()->giveStiffnessMatrix(answer, mode, gp, tStep);
235  answer.times(1.0 - tempDamage);
236  //TODO - correction for tangent mode
237 }
238 
239 
241  GaussPoint *gp, TimeStep *tStep)
242 {
243  IsotropicDamageMaterialStatus *status = static_cast< IsotropicDamageMaterialStatus * >( this->giveStatus(gp) );
244  double tempDamage;
245  if ( mode == ElasticStiffness ) {
246  tempDamage = 0.0;
247  } else {
248  tempDamage = status->giveTempDamage();
249  tempDamage = min(tempDamage, maxOmega);
250  }
251 
252  this->giveLinearElasticMaterial()->giveStiffnessMatrix(answer, mode, gp, tStep);
253  answer.times(1.0 - tempDamage);
254  //TODO - correction for tangent mode
255 }
256 
257 #ifdef __OOFEG
258 #endif
259 
260 
261 int
263 {
264  IsotropicDamageMaterialStatus *status = static_cast< IsotropicDamageMaterialStatus * >( this->giveStatus(gp) );
265  if ( type == IST_DamageScalar ) {
266  answer.resize(1);
267  answer.zero();
268  answer.at(1) = status->giveDamage();
269  return 1;
270  } else if ( type == IST_DamageTensor ) {
271  answer.resize(6);
272  answer.zero();
273  answer.at(1) = answer.at(2) = answer.at(3) = status->giveDamage();
274  return 1;
275  } else if ( type == IST_PrincipalDamageTensor ) {
276  answer.resize(3);
277  answer.zero();
278  answer.at(1) = status->giveDamage();
279  return 1;
280  } else if ( type == IST_DamageTensorTemp ) {
281  answer.resize(6);
282  answer.zero();
283  answer.at(1) = answer.at(2) = answer.at(3) = status->giveTempDamage();
284  return 1;
285  } else if ( type == IST_PrincipalDamageTempTensor ) {
286  answer.resize(3);
287  answer.zero();
288  answer.at(1) = status->giveTempDamage();
289  return 1;
290  } else if ( type == IST_MaxEquivalentStrainLevel ) {
291  answer.resize(1);
292  answer.at(1) = status->giveKappa();
293  return 1;
294  } else if ( type == IST_CharacteristicLength ) {
295  answer.resize(1);
296  answer.at(1) = status->giveLe();
297  return 1;
298  } else if (type == IST_CrackWidth) {
299  answer.resize(1);
300  FloatArray reducedTotalStrainVector;
301  this->giveStressDependentPartOfStrainVector(reducedTotalStrainVector, gp, status->giveStrainVector(), tStep, VM_Total);
302  double maxStrain = reducedTotalStrainVector.giveIndexMaxElem();
303  answer.at(1) = status->giveLe() * status->giveDamage() * reducedTotalStrainVector.at(maxStrain);
304  } else if ( type == IST_CrackDirs ) {
305  answer.resize(1);
306  answer.at(1) = status->giveCrackAngle();
307  return 1;
308  } else if ( type == IST_CrackVector ) {
309  status->giveCrackVector(answer);
310  return 1;
311 
312 #ifdef keep_track_of_dissipated_energy
313  } else if ( type == IST_StressWorkDensity ) {
314  answer.resize(1);
315  answer.at(1) = status->giveStressWork();
316  return 1;
317  } else if ( type == IST_DissWorkDensity ) {
318  answer.resize(1);
319  answer.at(1) = status->giveDissWork();
320  } else if ( type == IST_FreeEnergyDensity ) {
321  answer.resize(1);
322  answer.at(1) = status->giveStressWork() - status->giveDissWork();
323  return 1;
324 
325 #endif
326  } else {
327  return StructuralMaterial :: giveIPValue(answer, gp, type, tStep);
328  }
329 
330  return 1; // to make the compiler happy
331 }
332 
333 
334 void
336  GaussPoint *gp, TimeStep *tStep)
337 //
338 // returns a FloatArray(6) of initial strain vector
339 // eps_0 = {exx_0, eyy_0, ezz_0, gyz_0, gxz_0, gxy_0}^T
340 // caused by unit temperature in direction of
341 // gp (element) local axes
342 //
343 {
344  answer.resize(6);
345  answer.zero();
346  answer.at(1) = this->tempDillatCoeff;
347  answer.at(2) = this->tempDillatCoeff;
348  answer.at(3) = this->tempDillatCoeff;
349 }
350 
351 double IsotropicDamageMaterial :: give(int aProperty, GaussPoint *gp)
352 {
353  return linearElasticMaterial->give(aProperty, gp);
354 }
355 
358 {
359  IRResultType result; // Required by IR_GIVE_FIELD macro
360 
361  //Set limit on the maximum isotropic damage parameter if needed
363  maxOmega = min(maxOmega, 0.999999);
364  maxOmega = max(maxOmega, 0.0);
365 
366  permStrain = 0; // default - no permanent strain used
368 
371 }
372 
373 
374 void
376 {
380 }
381 
382 
383 
385 {
386  kappa = tempKappa = 0.0;
387  damage = tempDamage = 0.0;
388  le = 0.0;
389  crack_angle = -1000.0;
390  crackVector.resize(3);
391  crackVector.zero();
392 #ifdef keep_track_of_dissipated_energy
393  stressWork = tempStressWork = 0.0;
394  dissWork = tempDissWork = 0.0;
395 #endif
396 }
397 
398 
400 { }
401 
402 
403 void
405 {
407  fprintf(file, "status { ");
408  if ( this->kappa > 0 && this->damage <= 0 ) {
409  fprintf(file, "kappa %f", this->kappa);
410  } else if ( this->damage > 0.0 ) {
411  fprintf( file, "kappa %f, damage %f crackVector %f %f %f", this->kappa, this->damage, this->crackVector.at(1), this->crackVector.at(2), this->crackVector.at(3) );
412 
413 #ifdef keep_track_of_dissipated_energy
414  fprintf(file, ", dissW %f, freeE %f, stressW %f ", this->dissWork, ( this->stressWork ) - ( this->dissWork ), this->stressWork);
415  } else {
416  fprintf(file, "stressW %f ", this->stressWork);
417 #endif
418  }
419 
420  fprintf(file, "}\n");
421 }
422 
423 
424 void
426 {
428  this->tempKappa = this->kappa;
429  //mj 14 July 2010 - should be discussed with Borek !!!
430  //this->tempDamage = this->damage;
431 #ifdef keep_track_of_dissipated_energy
432  this->tempStressWork = this->stressWork;
433  this->tempDissWork = this->dissWork;
434 #endif
435 }
436 
437 
438 void
440 {
442  this->kappa = this->tempKappa;
443  this->damage = this->tempDamage;
444 #ifdef keep_track_of_dissipated_energy
445  this->stressWork = this->tempStressWork;
446  this->dissWork = this->tempDissWork;
447 #endif
448 }
449 
450 void
452 {
453  answer = crackVector;
454  answer.times(damage);
455 }
456 
457 
460 {
461  contextIOResultType iores;
462 
463  // save parent class status
464  if ( ( iores = StructuralMaterialStatus :: saveContext(stream, mode, obj) ) != CIO_OK ) {
465  THROW_CIOERR(iores);
466  }
467 
468  // write raw data
469  if ( !stream.write(kappa) ) {
471  }
472 
473  if ( !stream.write(damage) ) {
475  }
476 
477 #ifdef keep_track_of_dissipated_energy
478  if ( !stream.write(stressWork) ) {
480  }
481 
482  if ( !stream.write(dissWork) ) {
484  }
485 
486 #endif
487 
488  return CIO_OK;
489 }
490 
493 {
494  contextIOResultType iores;
495 
496  // read parent class status
497  if ( ( iores = StructuralMaterialStatus :: restoreContext(stream, mode, obj) ) != CIO_OK ) {
498  THROW_CIOERR(iores);
499  }
500 
501  // read raw data
502  if ( !stream.read(kappa) ) {
504  }
505 
506  if ( !stream.read(damage) ) {
508  }
509 
510 #ifdef keep_track_of_dissipated_energy
511  if ( !stream.read(stressWork) ) {
513  }
514 
515  if ( !stream.read(dissWork) ) {
517  }
518 
519 #endif
520 
521  return CIO_OK;
522 }
523 
524 #ifdef keep_track_of_dissipated_energy
525 void
527 {
528  // strain increment
529  FloatArray deps;
531 
532  // increment of stress work density
533  double dSW = ( tempStressVector.dotProduct(deps) + stressVector.dotProduct(deps) ) / 2.;
534  tempStressWork = stressWork + dSW;
535 
536  // elastically stored energy density
537  double We = tempStressVector.dotProduct(tempStrainVector) / 2.;
538 
539  // dissipative work density
541 }
542 #endif
543 } // end namespace oofem
enum oofem::IsotropicDamageMaterial::loaUnloCriterium llcriteria
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: structuralms.C:96
virtual void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes derivative of the equivalent strain with regards to strain.
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
void setField(int item, InputFieldType id)
double giveDamage()
Returns the last equilibrated damage level.
double le
Characteristic element length, computed when damage initialized from direction of maximum positive pr...
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
double tempDillatCoeff
Coefficient of thermal dilatation.
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
double kappa
Scalar measure of the largest strain level ever reached in material.
double tempDamage
Non-equilibrated damage level of material.
FloatArray tempStrainVector
Temporary strain vector in reduced form (to find balanced state)
Definition: structuralms.h:75
virtual double evaluatePermanentStrain(double kappa, double omega)
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *, TimeStep *)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
int max(int i, int j)
Returns bigger value form two given decimals.
Definition: mathfem.h:71
double damage
Damage level of material.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual ~IsotropicDamageMaterialStatus()
Destructor.
double tempStressWork
Non-equilibrated density of total work done by stresses on strain increments.
This class implements a structural material status information.
Definition: structuralms.h:65
FloatArray stressVector
Equilibrated stress vector in reduced form.
Definition: structuralms.h:71
double giveStressWork()
Returns the density of total work of stress on strain increments.
General IO error.
virtual double damageFunctionPrime(double kappa, GaussPoint *gp)
Returns the value of derivative of damage function wrt damage-driving variable kappa corresponding to...
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode)
Method for subtracting from reduced space strain vector its stress-independent parts (caused by tempe...
MaterialMode
Type representing material mode of integration point.
Definition: materialmode.h:89
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: structuralms.C:73
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
MatResponseMode
Describes the character of characteristic material matrix.
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
This class is a abstract base class for all linear elastic material models in a finite element proble...
IsotropicDamageMaterial(int n, Domain *d)
Constructor.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
Definition: floatarray.C:341
void computeWork(GaussPoint *gp)
Computes the increment of total stress work and of dissipated work.
void giveCrackVector(FloatArray &answer)
Returns crack vector stored in receiver. This is useful for plotting cracks as a vector field (paravi...
virtual void computeDamageParam(double &omega, double kappa, const FloatArray &strain, GaussPoint *gp)=0
Computes the value of damage parameter omega, based on given value of equivalent strain.
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.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
Definition: material.C:52
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
#define _IFT_IsotropicDamageMaterial_permstrain
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
double stressWork
Density of total work done by stresses on strain increments.
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
Definition: floatarray.C:463
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
#define OOFEM_ERROR(...)
Definition: error.h:61
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
double giveKappa()
Returns the last equilibrated scalar measure of the largest strain level.
virtual ~IsotropicDamageMaterial()
Destructor.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver&#39;s temporary strain vector.
Definition: structuralms.h:115
#define _IFT_IsotropicDamageMaterial_talpha
LinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: structuralms.C:157
int giveIndexMaxElem(void)
Returns index (between 1 and Size) of maximum element in the array.
Definition: floatarray.C:447
double giveTempKappa()
Returns the temp. scalar measure of the largest strain level.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
double tempDissWork
Non-equilibrated density of dissipated work.
Class representing vector of real numbers.
Definition: floatarray.h:82
IsotropicDamageMaterialStatus(int n, Domain *d, GaussPoint *g)
Constructor.
FloatArray strainVector
Equilibrated strain vector in reduced form.
Definition: structuralms.h:69
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
#define _IFT_IsotropicDamageMaterial_maxOmega
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
Definition: structuralms.h:135
int permStrain
Indicator of the type of permanent strain formulation (0 = standard damage with no permanent strain) ...
double giveCrackAngle()
Returns crack angle stored in receiver.
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
double giveDissWork()
Returns the density of dissipated work.
double giveTempDamage()
Returns the temp. damage level.
double tempKappa
Non-equilibrated scalar measure of the largest strain level.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
Class representing the general Input Record.
Definition: inputrecord.h:101
void add(const FloatMatrix &a)
Adds matrix to the receiver.
Definition: floatmatrix.C:1023
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
Definition: floatmatrix.C:492
virtual void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp)
Abstract service allowing to perform some initialization, when damage first appear.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
Class representing the a dynamic Input Record.
void times(double s)
Multiplies receiver with scalar.
Definition: floatarray.C:818
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.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: structuralms.C:108
int min(int i, int j)
Returns smaller value from two given decimals.
Definition: mathfem.h:59
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver&#39;s temporary stress vector.
Definition: structuralms.h:117
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: structuralms.C:133
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
double crack_angle
Angle characterizing the crack direction.
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
Definition: material.C:267
virtual void computeEquivalentStrain(double &kappa, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)=0
Computes the equivalent strain measure from given strain vector (full form).
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver&#39;s strain vector.
Definition: structuralms.h:105
FloatArray tempStressVector
Temporary stress vector in reduced form (increments are used mainly in nonlinear analysis) ...
Definition: structuralms.h:73
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
This class implements associated Material Status to IsotropicDamageMaterial.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
double dissWork
Density of dissipated work.
Class representing integration point in finite element program.
Definition: gausspoint.h:93
FloatArray crackVector
Crack orientation normalized to damage magnitude. This is useful for plotting cracks as a vector fiel...
Class representing solution step.
Definition: timestep.h:80
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631

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