OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
rcsde.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 "rcsde.h"
36 #include "gausspoint.h"
37 #include "floatmatrix.h"
38 #include "floatarray.h"
39 #include "mathfem.h"
41 #include "datastream.h"
42 #include "contextioerr.h"
43 #include "classfactory.h"
44 
45 
46 namespace oofem {
47 REGISTER_Material(RCSDEMaterial);
48 
50  //
51  // constructor
52  //
53 {
55 }
56 
57 
59 //
60 // destructor
61 //
62 {
63  delete linearElasticMaterial;
64 }
65 
66 
67 void
69  const FloatArray &totalStrain,
70  TimeStep *tStep)
71 //
72 // returns real stress vector in 3d stress space of receiver according to
73 // previous level of stress and current
74 // strain increment, the only way, how to correctly update gp records
75 //
76 {
77  FloatMatrix Ds0;
78  double equivStrain;
79  FloatArray princStress, reducedAnswer;
80  FloatArray reducedStrainVector, strainVector, principalStrain;
81  FloatArray reducedSpaceStressVector;
82  FloatMatrix tempCrackDirs;
83  RCSDEMaterialStatus *status = static_cast< RCSDEMaterialStatus * >( this->giveStatus(gp) );
84 
85  this->initTempStatus(gp);
86 
87  // subtract stress independent part
88  // note: eigenStrains (temperature) is not contained in mechanical strain stored in gp
89  // therefore it is necessary to subtract always the total eigen strain value
90  this->giveStressDependentPartOfStrainVector(reducedStrainVector, gp, totalStrain,
91  tStep, VM_Total);
92 
93  StructuralMaterial :: giveFullSymVectorForm( strainVector, reducedStrainVector, gp->giveMaterialMode() );
94 
95  tempCrackDirs = status->giveTempCrackDirs();
96  this->computePrincipalValDir(principalStrain, tempCrackDirs,
97  strainVector,
99 
100 
101  if ( status->giveTempMode() == RCSDEMaterialStatus :: rcMode ) {
102  // rotating crack mode
103 
104  this->giveRealPrincipalStressVector3d(princStress, gp, principalStrain, tempCrackDirs, tStep);
105  princStress.resize(6);
106  tempCrackDirs = status->giveTempCrackDirs();
107  this->transformStressVectorTo(answer, tempCrackDirs, princStress, 1);
108 
109  StructuralMaterial :: giveReducedSymVectorForm( reducedSpaceStressVector, answer, gp->giveMaterialMode() );
110  status->letTempStressVectorBe(reducedSpaceStressVector);
111 
112  this->updateCrackStatus(gp, status->giveCrackStrainVector());
113 
115  answer = reducedAnswer;
116 
117  // test if transition to scalar damage mode take place
118  double minSofteningPrincStress = this->Ft, E, Le, CurrFt, Ft, Gf, Gf0, Gf1, e0, ef, ef2, damage;
119  int ipos = 0;
120  for ( int i = 1; i <= 3; i++ ) {
121  if ( status->giveTempCrackStatus(i) == pscm_SOFTENING ) {
122  if ( princStress.at(i) < minSofteningPrincStress ) {
123  minSofteningPrincStress = princStress.at(i);
124  ipos = i;
125  }
126  }
127  }
128 
129  CurrFt = this->computeStrength( gp, status->giveCharLength(ipos) );
130 
131  if ( minSofteningPrincStress <= this->SDTransitionCoeff * CurrFt ) {
132  // sd transition takes place
133 
134  Le = status->giveCharLength(ipos);
135  E = linearElasticMaterial->give(Ex, gp);
136  Gf = this->give(pscm_Gf, gp) / Le;
137  Ft = this->computeStrength(gp, Le);
138  ef = Gf / Ft;
139  e0 = principalStrain.at(ipos);
140  Gf0 = -CurrFt * ef * ( exp(-status->giveCrackStrain(ipos) / ef) - 1.0 ); // already disipated + 0.5*sigma0*epsilon0
141  Gf1 = Gf - Gf0;
142 
143  ef2 = Gf1 / princStress.at(ipos);
144 
145  this->giveMaterialStiffnessMatrix(Ds0, SecantStiffness, gp, tStep);
146  // compute reached equivalent strain
147  equivStrain = this->computeCurrEquivStrain(gp, reducedStrainVector, E, tStep);
148  damage = this->computeDamageCoeff(equivStrain, e0, ef2);
149 
150 
151  status->setTransitionEpsCoeff(e0);
152  status->setEpsF2Coeff(ef2);
153  status->setDs0Matrix(Ds0);
154  status->setTempMaxEquivStrain(equivStrain);
155  status->setTempDamageCoeff(damage);
157  }
158  } else {
159  // scalar damage mode
160  double E, e0, ef2;
161  double damage;
162  //int ipos;
163 
164  E = linearElasticMaterial->give(Ex, gp);
165  equivStrain = this->computeCurrEquivStrain(gp, reducedStrainVector, E, tStep);
166  equivStrain = max( equivStrain, status->giveTempMaxEquivStrain() );
167  reducedSpaceStressVector.beProductOf(* status->giveDs0Matrix(), reducedStrainVector);
168  //dCoeff = status->giveDamageStiffCoeff();
169  ef2 = status->giveEpsF2Coeff();
170  e0 = status->giveTransitionEpsCoeff();
171  damage = this->computeDamageCoeff(equivStrain, e0, ef2);
172  reducedSpaceStressVector.times(1.0 - damage);
173 
174  answer = reducedSpaceStressVector;
175 
176  status->letTempStressVectorBe(reducedSpaceStressVector);
177 
178  status->setTempMaxEquivStrain(equivStrain);
179  status->setTempDamageCoeff(damage);
180  }
181 
182  status->letTempStrainVectorBe(totalStrain);
183 }
184 
185 
186 void
188  MatResponseMode rMode, GaussPoint *gp,
189  TimeStep *tStep)
190 //
191 // returns effective material stiffness matrix in full form
192 // for gp stress strain mode
193 //
194 {
195  RCSDEMaterialStatus *status = static_cast< RCSDEMaterialStatus * >( this->giveStatus(gp) );
196 
197  if ( status->giveTempMode() == RCSDEMaterialStatus :: rcMode ) {
198  // rotating crack mode
199 
201  return;
202  } else {
203  // rcsd mode
204 
205  if ( ( rMode == TangentStiffness ) || ( rMode == SecantStiffness ) ) {
206  FloatMatrix reducedAnswer;
207  double dCoeff;
208 
209  reducedAnswer = * status->giveDs0Matrix();
210  dCoeff = 1.0 - status->giveDamageCoeff();
211  if ( dCoeff < RCSDE_DAMAGE_EPS ) {
212  dCoeff = RCSDE_DAMAGE_EPS;
213  }
214 
215  reducedAnswer.times(dCoeff);
216 
217  answer = reducedAnswer;
218  } else if ( rMode == ElasticStiffness ) {
219  this->giveLinearElasticMaterial()->giveStiffnessMatrix(answer, rMode, gp, tStep);
220  return;
221  } else {
222  OOFEM_ERROR("usupported mode");
223  }
224  }
225 }
226 
227 
228 double
229 RCSDEMaterial :: computeDamageCoeff(double equivStrain, double e0, double ef2)
230 {
231  double damage = 1. - e0 / equivStrain *exp(-( equivStrain - e0 ) / ef2);
232  if ( damage > 1.0 ) {
233  return 1.0;
234  }
235 
236  return damage;
237 }
238 
239 
240 double
241 RCSDEMaterial :: computeCurrEquivStrain(GaussPoint *gp, const FloatArray &reducedTotalStrainVector, double e, TimeStep *tStep)
242 {
243  FloatArray effStress, princEffStress, fullEffStress;
244  FloatMatrix De;
245  double answer = 0.0;
246 
247  linearElasticMaterial->giveStiffnessMatrix(De, TangentStiffness, gp, tStep);
248  effStress.beProductOf(De, reducedTotalStrainVector);
249  StructuralMaterial :: giveFullSymVectorForm( fullEffStress, effStress, gp->giveMaterialMode() );
250 
251  this->computePrincipalValues(princEffStress, fullEffStress, principal_stress);
252  for ( int i = 1; i <= 3; i++ ) {
253  answer = max( answer, macbra( princEffStress.at(i) ) );
254  }
255 
256  return answer / e;
257 }
258 
259 
262 {
263  IRResultType result; // Required by IR_GIVE_FIELD macro
264 
267 }
268 
269 
270 double
272 // Returns the value of the property aProperty (e.g. the Young's modulus
273 // 'E') of the receiver.
274 {
275  if ( aProperty == pscm_SDTransitionCoeff ) {
276  return this->SDTransitionCoeff;
277  }
278 
279  return RCM2Material :: give(aProperty, gp);
280 }
281 
282 
283 int
285 //
286 // checks if element size (charLength) is too big
287 // so that tension strength must be reduced followed
288 // by sudden stress drop
289 //
290 {
291  double Ee, Gf, Ft, LeCrit;
292 
293  Ee = this->give(pscm_Ee, gp);
294  Gf = this->give(pscm_Gf, gp);
295  Ft = this->give(pscm_Ft, gp);
296 
297  LeCrit = 2.0 * Gf * Ee / ( Ft * Ft );
298  return ( charLength < LeCrit );
299 }
300 
301 
302 double
304 //
305 // computes strength for given gp,
306 // which may be reduced according to length of "fracture process zone"
307 // to be energetically correct
308 //
309 {
310  double Ee, Gf, Ft;
311 
312  Ee = this->give(pscm_Ee, gp);
313  Gf = this->give(pscm_Gf, gp);
314  Ft = this->give(pscm_Ft, gp);
315 
316  if ( this->checkSizeLimit(gp, charLength) ) { } else {
317  // we reduce Ft and there is no softening but sudden drop
318  Ft = sqrt(2. * Ee * Gf / charLength);
319  //
320  OOFEM_LOG_RELEVANT("Reducing Ft to %f in element %d, gp %d, Le %f\n",
321  Ft, gp->giveElement()->giveNumber(), gp->giveNumber(), charLength);
322  }
323 
324  return Ft;
325 }
326 
327 
328 double
330 //
331 // computes MinCrackStrainsForFullyOpenCrack for given gp and i-th crack
332 //
333 {
334  /*
335  * RCM2MaterialStatus *status = (RCM2MaterialStatus*) this -> giveStatus (gp);
336  * double Le, Gf, Ft;
337  *
338  * Le = status -> giveCharLength (i);
339  * Gf = this->give(pscm_Gf);
340  * Ft = this->computeStrength (gp, Le);
341  *
342  * return Gf/(Le*Ft); // Exponential softening
343  */
344  return 1.e6;
345 }
346 
347 
348 /*
349  * void
350  * RCSDEMaterial :: updateStatusForNewCrack (GaussPoint* gp, int i, double Le)
351  * //
352  * // updates gp status when new crack-plane i is formed with charLength Le
353  * // updates Le and computes and sets minEffStrainForFullyOpenCrack
354  * //
355  * {
356  * RCM2MaterialStatus *status = (RCM2MaterialStatus*) this -> giveStatus (gp);
357  *
358  * if (Le <= 0) {
359  * char errMsg [80];
360  * sprintf (errMsg,"Element %d returned zero char length",
361  * gp->giveElement()->giveNumber());
362  * OOFEM_ERROR(errMsg);
363  * }
364  *
365  * status -> setCharLength(i, Le);
366  * status ->
367  * setMinCrackStrainsForFullyOpenCrack (i, this->giveMinCrackStrainsForFullyOpenCrack(gp,i));
368  * }
369  */
370 
371 double
373  double crackStrain, int i)
374 //
375 // returns current cracking modulus according to crackStrain for i-th
376 // crackplane
377 // now linear softening is implemented
378 // see also CreateStatus () function.
379 // softening modulus represents a relation between the normal crack strain
380 // rate and the normal stress rate.
381 //
382 {
383  // double Ee, Gf;
384  double Gf, Cf, Ft, Le, ef;
385  RCM2MaterialStatus *status = static_cast< RCM2MaterialStatus * >( this->giveStatus(gp) );
386 
387  //
388  // now we have to set proper reduced strength and softening modulus Et
389  // in order to obtain energetically correct solution using the concept
390  // of fracture energy Gf, which is a material constant.
391  //
392  //Ee = this->give(pscm_Ee);
393  Gf = this->give(pscm_Gf, gp);
394  Le = status->giveCharLength(i);
395  Ft = this->computeStrength(gp, Le);
396  //minEffStrainForFullyOpenCrack = this->giveMinCrackStrainsForFullyOpenCrack(gp,i);
397  ef = Gf / ( Le * Ft );
398 
399  if ( rMode == TangentStiffness ) {
400  if ( this->checkSizeLimit(gp, Le) ) {
401  if ( crackStrain >= status->giveTempMaxCrackStrain(i) ) {
402  // further softening
403  Cf = -Ft / ef *exp(-crackStrain / ef);
404  } else {
405  // unloading or reloading regime
406  Cf = Ft / status->giveTempMaxCrackStrain(i) * exp(-status->giveTempMaxCrackStrain(i) / ef);
407  }
408  } else {
409  Cf = 0.;
410  }
411  } else {
412  if ( this->checkSizeLimit(gp, Le) ) {
413  Cf = Ft / status->giveTempMaxCrackStrain(i) * exp(-status->giveTempMaxCrackStrain(i) / ef);
414  } else {
415  Cf = 0.;
416  }
417  }
418 
419  return Cf;
420 }
421 
422 
423 double
425 //
426 // returns receivers Normal Stress in crack i for given cracking strain
427 //
428 {
429  double Gf, Ft, Le, answer, ef;
430  RCM2MaterialStatus *status = static_cast< RCM2MaterialStatus * >( this->giveStatus(gp) );
431 
432  Le = status->giveCharLength(i);
433  Ft = this->computeStrength(gp, Le);
434  Gf = this->give(pscm_Gf, gp);
435  ef = Gf / ( Le * Ft );
436 
437  if ( this->checkSizeLimit(gp, Le) ) {
438  if ( crackStrain >= status->giveTempMaxCrackStrain(i) ) {
439  // further softening
440  answer = Ft * exp(-crackStrain / ef);
441  } else {
442  // crack closing
443  // or unloading or reloading regime
444  answer = Ft * crackStrain / status->giveTempMaxCrackStrain(i) *
445  exp(-status->giveTempMaxCrackStrain(i) / ef);
446  }
447  } else {
448  answer = 0.;
449  }
450 
451  return answer;
452 }
453 
454 
455 
457  RCM2MaterialStatus(n, d, g), Ds0()
458 {
461  transitionEps = epsF2 = 0.0;
463 }
464 
465 
467 { }
468 
469 
470 void
472 {
473  char s [ 11 ];
474 
476  fprintf(file, "status { ");
477  if ( this->giveTempMode() == rcMode ) {
478  fprintf(file, "mode :rc ");
479 
480  if ( this->giveTempAlreadyCrack() ) {
481  for ( int i = 1; i <= 3; i++ ) {
482  switch ( crackStatuses.at(i) ) {
483  case pscm_NONE:
484  strcpy(s, "NONE");
485  break;
486  case pscm_OPEN:
487  strcpy(s, "OPEN");
488  break;
489  case pscm_SOFTENING:
490  strcpy(s, "SOFTENING");
491  break;
492  case pscm_RELOADING:
493  strcpy(s, "RELOADING");
494  break;
495  case pscm_UNLOADING:
496  strcpy(s, "UNLOADING");
497  break;
498  default:
499  strcpy(s, "UNKNOWN");
500  break;
501  }
502 
503  fprintf( file, "crack %d {status %s, normal to crackplane { %f %f %f }} ",
504  i, s, crackDirs.at(1, i), crackDirs.at(2, i), crackDirs.at(3, i) );
505  }
506  }
507  } else {
508  // sd mode
509  fprintf( file, "mode :sd, damageCoeff = %f ", this->giveTempDamageCoeff() );
510  }
511 
512  fprintf(file, "}\n");
513 }
514 
515 
516 void
518 //
519 // initializes temp variables according to variables form previous equlibrium state.
520 // builds new crackMap
521 //
522 {
524 
528 }
529 
530 
531 void
533 //
534 // updates variables (nonTemp variables describing situation at previous equilibrium state)
535 // after a new equilibrium state has been reached
536 // temporary variables are having values corresponding to newly reched equilibrium.
537 //
538 {
540 
544 }
545 
546 
549 //
550 // saves full information stored in this Status
551 // no temp variables stored
552 //
553 {
554  contextIOResultType iores;
555 
556  // save parent class status
557  if ( ( iores = RCM2MaterialStatus :: saveContext(stream, mode, obj) ) != CIO_OK ) {
558  THROW_CIOERR(iores);
559  }
560 
561  // write a raw data
562 
563  if ( !stream.write(maxEquivStrain) ) {
565  }
566 
567  if ( !stream.write(damageCoeff) ) {
569  }
570 
571  int _mode = rcsdMode;
572  if ( !stream.write(_mode) ) {
574  }
575 
576  if ( !stream.write(transitionEps) ) {
578  }
579 
580  if ( !stream.write(epsF2) ) {
582  }
583 
584  if ( ( iores = Ds0.storeYourself(stream) ) != CIO_OK ) {
585  THROW_CIOERR(iores);
586  }
587 
588  return CIO_OK;
589 }
590 
591 
594 //
595 // restores full information stored in stream to this Status
596 //
597 {
598  contextIOResultType iores;
599 
600  // read parent class status
601  if ( ( iores = RCM2MaterialStatus :: restoreContext(stream, mode, obj) ) != CIO_OK ) {
602  THROW_CIOERR(iores);
603  }
604 
605  // read raw data
606  if ( !stream.read(maxEquivStrain) ) {
608  }
609 
610  if ( !stream.read(damageCoeff) ) {
612  }
613 
614  int _mode;
615  if ( !stream.read(_mode) ) {
617  }
618 
619  rcsdMode = ( __rcsdModeType ) _mode;
620  if ( !stream.read(transitionEps) ) {
622  }
623 
624  if ( !stream.read(epsF2) ) {
626  }
627 
628  if ( ( iores = Ds0.restoreYourself(stream) ) != CIO_OK ) {
629  THROW_CIOERR(iores);
630  }
631 
632  return CIO_OK; // return succes
633 }
634 } // end namespace oofem
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Definition: rcsde.C:187
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
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
void setTransitionEpsCoeff(double val)
Definition: rcsde.h:87
__rcsdModeType rcsdMode
Definition: rcsde.h:69
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
virtual int checkSizeLimit(GaussPoint *gp, double)
Definition: rcsde.C:284
double computeCurrEquivStrain(GaussPoint *, const FloatArray &, double, TimeStep *)
Definition: rcsde.C:241
Class and object Domain.
Definition: domain.h:115
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: rcsde.C:517
For computing principal stresses.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: rcm2.C:796
For computing principal strains from engineering strains.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: rcsde.C:261
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: rcm2.C:1195
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: rcm2.C:1110
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
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
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *, const FloatArray &, TimeStep *)
Computes the real stress vector for given total strain and integration point.
Definition: rcsde.C:68
LinearElasticMaterial * linearElasticMaterial
Definition: rcm2.h:181
double giveTempMaxEquivStrain()
Definition: rcsde.h:77
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Definition: rcm2.C:607
#define _IFT_RCSDEMaterial_sdtransitioncoeff
Definition: rcsde.h:47
LinearElasticMaterial * giveLinearElasticMaterial()
Definition: rcm2.h:199
#define pscm_NONE
Definition: fcm.h:54
const IntArray & giveTempCrackStatus()
Definition: rcm2.h:131
virtual double computeStrength(GaussPoint *, double)
Definition: rcsde.C:303
double giveCrackStrain(int icrack) const
Definition: rcm2.h:136
#define Ex
Definition: matconst.h:59
double macbra(double x)
Returns the positive part of given float.
Definition: mathfem.h:115
void setTempMode(__rcsdModeType mode)
Definition: rcsde.h:92
Element * giveElement()
Returns corresponding element to receiver.
Definition: gausspoint.h:188
General IO error.
void setDs0Matrix(FloatMatrix &mtrx)
Definition: rcsde.h:84
double giveTempDamageCoeff()
Definition: rcsde.h:81
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...
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: structuralms.C:73
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
Computes principal values and directions of stress or strain vector.
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
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.
double giveTransitionEpsCoeff()
Definition: rcsde.h:86
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
__rcsdModeType giveTempMode()
Definition: rcsde.h:91
contextIOResultType storeYourself(DataStream &stream) const
Definition: floatmatrix.C:1852
#define OOFEM_LOG_RELEVANT(...)
Definition: logger.h:126
void setEpsF2Coeff(double val)
Definition: rcsde.h:89
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
RCSDEMaterial(int n, Domain *d)
Definition: rcsde.C:49
This class implements associated Material Status to RCSDEMaterial.
Definition: rcsde.h:58
This class implements a Rotating Crack Model for fracture in smeared fashion ( only material stiffnes...
Definition: rcm2.h:178
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
Definition: material.C:52
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
Definition: rcm2.C:807
#define pscm_Ft
Definition: rcm2.h:57
static void giveReducedSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full unsymmetric Voigt vector (2nd order tensor) to reduced form.
#define E(p)
Definition: mdm.C:368
#define pscm_OPEN
Definition: rcm2.h:61
This class implements an isotropic linear elastic material in a finite element problem.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: rcsde.C:471
#define OOFEM_ERROR(...)
Definition: error.h:61
int giveNumber()
Returns number of receiver.
Definition: gausspoint.h:184
double SDTransitionCoeff
Definition: rcsde.h:121
virtual ~RCSDEMaterial()
Definition: rcsde.C:58
This class implements associated Material Status to SmearedCrackingMaterail.
Definition: rcm2.h:77
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
__rcsdModeType tempRcsdMode
Definition: rcsde.h:69
double giveDamageCoeff()
Definition: rcsde.h:96
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
#define RCSDE_DAMAGE_EPS
Definition: rcsde.h:53
double computeDamageCoeff(double, double, double)
Definition: rcsde.C:229
const FloatArray & giveCrackStrainVector() const
Definition: rcm2.h:135
virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Definition: rcm2.C:96
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: rcm2.C:1131
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
int giveTempAlreadyCrack() const
Definition: rcm2.h:121
#define pscm_Gf
Definition: rcm2.h:54
double giveEpsF2Coeff()
Definition: rcsde.h:88
virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, double crackStrain, int i)
Definition: rcsde.C:372
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
Definition: rcsde.C:271
const FloatMatrix * giveDs0Matrix()
Definition: rcsde.h:83
contextIOResultType restoreYourself(DataStream &stream)
Definition: floatmatrix.C:1877
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
#define pscm_UNLOADING
Definition: rcm2.h:64
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual ~RCSDEMaterialStatus()
Definition: rcsde.C:466
void setTempDamageCoeff(double val)
Definition: rcsde.h:82
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: rcm2.C:1086
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
Definition: structuralms.h:135
void setTempMaxEquivStrain(double val)
Definition: rcsde.h:78
void giveRealPrincipalStressVector3d(FloatArray &answer, GaussPoint *, FloatArray &, FloatMatrix &, TimeStep *)
Definition: rcm2.C:163
Class representing the general Input Record.
Definition: inputrecord.h:101
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: rcsde.C:532
virtual double giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i)
Definition: rcsde.C:329
#define pscm_Ee
Definition: rcm2.h:52
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
FloatMatrix crackDirs
Storing direction of cracks in columwise format.
Definition: rcm2.h:87
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: rcsde.C:548
const FloatMatrix & giveTempCrackDirs()
Definition: rcm2.h:126
virtual double giveNormalCrackingStress(GaussPoint *gp, double eps_cr, int i)
Definition: rcsde.C:424
REGISTER_Material(DummyMaterial)
the oofem namespace is to define a context or scope in which all oofem names are defined.
#define pscm_SDTransitionCoeff
Definition: rcsd.h:52
#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
double giveTempMaxCrackStrain(int icrack)
Definition: rcm2.h:129
int giveNumber() const
Definition: femcmpnn.h:107
#define pscm_SOFTENING
Definition: fcm.h:56
static void transformStressVectorTo(FloatArray &answer, const FloatMatrix &base, const FloatArray &stressVector, bool transpose=false)
Transforms 3d stress vector into another coordinate system.
IntArray crackStatuses
One value from (pscm_NONE, pscm_OPEN, pscm_SOFTENING, pscm_RELOADING, pscm_UNLOADING, pscm_CLOSED.
Definition: rcm2.h:81
double giveCharLength(int icrack) const
Definition: rcm2.h:141
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define pscm_RELOADING
Definition: rcm2.h:63
Class representing solution step.
Definition: timestep.h:80
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: rcsde.C:593
RCSDEMaterialStatus(int n, Domain *d, GaussPoint *g)
Definition: rcsde.C:456
virtual void updateCrackStatus(GaussPoint *gp, const FloatArray &crackStrain)
Definition: rcm2.C:442
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:31 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011