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