OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
rcsdnl.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 "rcsdnl.h"
36 #include "gausspoint.h"
37 #include "floatmatrix.h"
38 #include "floatarray.h"
39 #include "mathfem.h"
40 #include "nonlocalmaterialext.h"
41 #include "contextioerr.h"
42 #include "classfactory.h"
43 #include "datastream.h"
44 
45 namespace oofem {
46 REGISTER_Material(RCSDNLMaterial);
47 
49 {
50  //linearElasticMaterial = new IsotropicLinearElasticMaterial (n,d);
51  SDTransitionCoeff2 = 0.;
52  R = 0.;
53 }
54 
55 
57 {
58  //delete linearElasticMaterial;
59 }
60 
61 Interface *
63 {
65  return static_cast< StructuralNonlocalMaterialExtensionInterface * >(this);
66  } else {
67  return NULL;
68  }
69 }
70 
71 
72 void
74 {
75  /* Implements the service updating local variables in given integration points,
76  * which take part in nonlocal average process. Actually, no update is necessary,
77  * because the value used for nonlocal averaging is strain vector used for nonlocal secant stiffness
78  * computation. It is therefore necessary only to store local strain in corresponding status.
79  * This service is declared at StructuralNonlocalMaterial level.
80  */
81  RCSDNLMaterialStatus *status = static_cast< RCSDNLMaterialStatus * >( this->giveStatus(gp) );
82 
83  this->initTempStatus(gp);
84 
85  status->setLocalStrainVectorForAverage(strainVector);
86 }
87 
88 
89 
90 void
92  const FloatArray &totalStrain,
93  TimeStep *tStep)
94 //
95 // returns real stress vector in 3d stress space of receiver according to
96 // previous level of stress and current
97 // strain increment, the only way, how to correctly update gp records
98 //
99 {
100  FloatMatrix Ds0;
101  double equivStrain;
102  FloatArray princStress, nonlocalStrain, reducedSpaceStressVector;
103  FloatArray reducedNonlocStrainVector, fullNonlocStrainVector, principalStrain;
104  FloatMatrix tempCrackDirs;
105  RCSDNLMaterialStatus *nonlocStatus, *status = static_cast< RCSDNLMaterialStatus * >( this->giveStatus(gp) );
106 
107  FloatArray nonlocalContribution;
108  FloatArray reducedLocalStrainVector, localStrain;
109 
110  this->initTempStatus(gp);
111  this->buildNonlocalPointTable(gp);
112  this->updateDomainBeforeNonlocAverage(tStep);
113 
114  // compute nonlocal strain increment first
115  auto list = this->giveIPIntegrationList(gp); // !
116 
117  for ( auto &lir: *list ) {
118  nonlocStatus = static_cast< RCSDNLMaterialStatus * >( this->giveStatus(lir.nearGp) );
119  nonlocalContribution = nonlocStatus->giveLocalStrainVectorForAverage();
120  nonlocalContribution.times(lir.weight);
121 
122  reducedNonlocStrainVector.add(nonlocalContribution);
123  }
124 
125  reducedNonlocStrainVector.times( 1. / status->giveIntegrationScale() );
126  this->endIPNonlocalAverage(gp); // !
127 
128  // subtract stress independent part
130  //
131 
132  reducedLocalStrainVector = totalStrain;
133 
134  // subtract stress independent part
135  // note: eigenStrains (temperature) is not contained in mechanical strain stored in gp
136  // therefore it is necessary to subtract always the total eigen strain value
137  this->giveStressDependentPartOfStrainVector(nonlocalStrain, gp, reducedNonlocStrainVector,
138  tStep, VM_Total);
139  this->giveStressDependentPartOfStrainVector(localStrain, gp, reducedLocalStrainVector,
140  tStep, VM_Total);
141 
142  StructuralMaterial :: giveFullSymVectorForm( fullNonlocStrainVector, nonlocalStrain, gp->giveMaterialMode() );
143 
144  tempCrackDirs = status->giveTempCrackDirs();
145  this->computePrincipalValDir(principalStrain, tempCrackDirs,
146  fullNonlocStrainVector,
148 
149 
150  if ( status->giveTempMode() == RCSDEMaterialStatus :: rcMode ) {
151  // rotating crack mode
152 
153  this->giveRealPrincipalStressVector3d(princStress, gp, principalStrain, tempCrackDirs, tStep);
154 
160 
164 
165  this->updateCrackStatus(gp, status->giveCrackStrainVector());
166 
168  this->giveMaterialStiffnessMatrix(Ds0, SecantStiffness, gp, tStep);
169 
174 
175  // check for any currently opening crack
176  int anyOpeningCrack = 0;
177  for ( int i = 1; i <= 3; i++ ) {
178  if ( ( status->giveTempCrackStatus(i) == pscm_SOFTENING ) ||
179  ( status->giveTempCrackStatus(i) == pscm_OPEN ) ) {
180  anyOpeningCrack++;
181  }
182  }
183 
184  if ( anyOpeningCrack ) {
185  // test if transition to scalar damage mode take place
186  double minSofteningPrincStress = this->Ft, E, Le, CurrFt, Gf, Gf0, Gf1, e0, ef, ef2, damage;
187  // double minSofteningPrincStress = this->Ft, dCoeff, CurrFt, E, ep, ef, damage;
188  int ipos = 0;
189  for ( int i = 1; i <= 3; i++ ) {
190  if ( ( status->giveTempCrackStatus(i) == pscm_SOFTENING ) ||
191  ( status->giveTempCrackStatus(i) == pscm_OPEN ) ) {
192  if ( princStress.at(i) < minSofteningPrincStress ) {
193  minSofteningPrincStress = princStress.at(i);
194  ipos = i;
195  }
196  }
197  }
198 
199  CurrFt = this->computeStrength( gp, status->giveCharLength(ipos) );
200 
202  // next pasted from rcm2:giveEffectiveMaterialStiffnessMatrix
203  double G, minG, currG, princStressDis, princStrainDis;
204  int ii, jj;
205 
206  minG = G = this->give(pscm_G, gp);
207 
209  IntArray indx;
211  for ( int i = 4; i <= 6; i++ ) {
212  if ( indx.contains(i) ) {
213  if ( i == 4 ) {
214  ii = 2;
215  jj = 3;
216  } else if ( i == 5 ) {
217  ii = 1;
218  jj = 3;
219  } else if ( i == 6 ) {
220  ii = 1;
221  jj = 2;
222  } else {
223  continue;
224  }
225 
226  princStressDis = princStress.at(ii) -
227  princStress.at(jj);
228  princStrainDis = principalStrain.at(ii) -
229  principalStrain.at(jj);
230 
231  if ( fabs(princStrainDis) < rcm_SMALL_STRAIN ) {
232  currG = G;
233  } else {
234  currG = princStressDis / ( 2.0 * princStrainDis );
235  }
236 
237  //currG = Ds0.at(indi, indi);
238  minG = min(minG, currG);
239  }
240  }
241 
243 
244  if ( ( minSofteningPrincStress <= this->SDTransitionCoeff * CurrFt ) ||
245  ( minG <= this->SDTransitionCoeff2 * G ) ) {
246  // printf ("minSofteningPrincStress=%lf, CurrFt=%lf, SDTransitionCoeff=%lf",minSofteningPrincStress, CurrFt, this->SDTransitionCoeff);
247  // printf ("\nminG=%lf, G=%lf, SDTransitionCoeff2=%lf\n",minG, G, this->SDTransitionCoeff2);
248 
249  // sd transition takes place
250  if ( ipos == 0 ) {
251  for ( int i = 1; i <= 3; i++ ) {
252  if ( ( status->giveTempCrackStatus(i) == pscm_SOFTENING ) ||
253  ( status->giveTempCrackStatus(i) == pscm_OPEN ) ) {
254  if ( ipos == 0 ) {
255  ipos = i;
256  minSofteningPrincStress = princStress.at(i);
257  }
258 
259  if ( princStress.at(i) < minSofteningPrincStress ) {
260  minSofteningPrincStress = princStress.at(i);
261  ipos = i;
262  }
263  }
264  }
265  }
266 
267  // test for internal consistency error
268  // we should switch to scalar damage, but no softening take place
269  if ( ipos == 0 ) {
270  //RCSDEMaterial :: OOFEM_ERROR("can not switch to sd mode, while no cracking");
271  OOFEM_ERROR("can not switch to sd mode, while no cracking");
272  }
273 
274  //if (minSofteningPrincStress <= this->SDTransitionCoeff * CurrFt) printf (".");
275  //else printf (":");
276  //
277  Le = status->giveCharLength(ipos);
278  E = linearElasticMaterial->give(Ex, gp);
279  Gf = this->give(pscm_Gf, gp) / Le;
280  ef = this->ef;
281  e0 = principalStrain.at(ipos);
282  Gf0 = -CurrFt * ef * ( exp(-status->giveCrackStrain(ipos) / ef) - 1.0 ); // already disipated + 0.5*sigma0*epsilon0
283  Gf1 = Gf - Gf0;
284 
285  ef2 = Gf1 / princStress.at(ipos);
286 
287  //this->giveMaterialStiffnessMatrix (Ds0, SecantStiffness, gp, tStep);
288  // compute reached equivalent strain
289  equivStrain = this->computeCurrEquivStrain(gp, nonlocalStrain, E, tStep);
290  damage = this->computeDamageCoeff(equivStrain, e0, ef2);
291 
292  // printf ("Gf=%lf, Gf0=%lf, damage=%lf, e0=%lf, ef2=%lf, es=%lf\n",Gf, Gf0, damage,e0,ef2,equivStrain);
293 
294  status->setTransitionEpsCoeff(e0);
295  status->setEpsF2Coeff(ef2);
296  status->setDs0Matrix(Ds0);
297  status->setTempMaxEquivStrain(equivStrain);
298  status->setTempDamageCoeff(damage);
300  }
301  }
302  } else if ( status->giveTempMode() == RCSDEMaterialStatus :: sdMode ) {
303  // scalar damage mode
304  double E, e0, ef2;
305  // double ep, ef, E, dCoeff;
306  //FloatArray reducedSpaceStressVector;
307  double damage;
308 
309  E = linearElasticMaterial->give(Ex, gp);
310  equivStrain = this->computeCurrEquivStrain(gp, nonlocalStrain, E, tStep);
311  equivStrain = max( equivStrain, status->giveTempMaxEquivStrain() );
313  ef2 = status->giveEpsF2Coeff();
314  e0 = status->giveTransitionEpsCoeff();
315  damage = this->computeDamageCoeff(equivStrain, e0, ef2);
316 
317  // dCoeff = status->giveDamageStiffCoeff ();
318  // ef = status->giveDamageEpsfCoeff();
319  // ep = status->giveDamageEpspCoeff();
320  // damage = this->computeDamageCoeff (equivStrain, dCoeff, ep, ef);
322  Ds0 = * status->giveDs0Matrix();
323  Ds0.times(1.0 - damage);
326 
328 
332 
333  status->setTempMaxEquivStrain(equivStrain);
334  status->setTempDamageCoeff(damage);
335  }
336 
338  reducedSpaceStressVector.beProductOf(Ds0, localStrain);
339 
340  answer = reducedSpaceStressVector;
341 
342  status->letTempStressVectorBe(reducedSpaceStressVector);
343 
344  status->letTempStrainVectorBe(totalStrain);
345  status->setTempNonlocalStrainVector(reducedNonlocStrainVector);
346 }
347 
348 
351 {
352  IRResultType result; // Required by IR_GIVE_FIELD macro
353 
354  //RCSDEMaterial::instanciateFrom (ir);
355  result = this->giveLinearElasticMaterial()->initializeFrom(ir);
356  if ( result != IRRT_OK ) return result;
357 
359  if ( result != IRRT_OK ) return result;
360 
364  if ( SDTransitionCoeff2 > 1.0 ) {
365  SDTransitionCoeff2 = 1.0;
366  }
367 
368  if ( SDTransitionCoeff2 < 0.0 ) {
369  SDTransitionCoeff2 = 0.0;
370  }
371 
373  if ( R < 0.0 ) {
374  R = 0.0;
375  }
376 
377  if ( ir->hasField(_IFT_RCSDNLMaterial_ef) ) { // if ef is specified, Gf is computed acordingly
379  this->Gf = this->Ft * this->ef;
380  } else if ( ir->hasField(_IFT_RCSDNLMaterial_gf) ) { // otherwise if Gf is specified, ef is computed acordingly
382  this->ef = this->Gf / this->Ft;
383  } else {
384  OOFEM_WARNING("cannot determine Gf and ef from input data");
385  return IRRT_BAD_FORMAT;
386  }
387 
388  return IRRT_OK;
389 }
390 
391 
392 double
394 {
395  return 1.e6; //this->ef;
396 }
397 
398 
399 double
401 {
402  // Bell shaped function decaying with the distance.
403 
404  double dist = src.distance(coord);
405 
406  if ( ( dist >= 0. ) && ( dist <= this->R ) ) {
407  double help = ( 1. - dist * dist / ( R * R ) );
408  return help * help;
409  }
410 
411  return 0.0;
412 }
413 /*
414  * void
415  * RCSDNLMaterial :: updateStatusForNewCrack (GaussPoint* gp, int i, double Le)
416  * //
417  * // updates gp status when new crack-plane i is formed with charLength Le
418  * // updates Le and computes and sets minEffStrainForFullyOpenCrack
419  * //
420  * {
421  * RCSDNLMaterialStatus *status = (RCSDNLMaterialStatus*) this -> giveStatus (gp);
422  *
423  * if (Le <= 0) {
424  * char errMsg [80];
425  * sprintf (errMsg,"Element %d returned zero char length",
426  * gp->giveElement()->giveNumber());
427  * RCSDMaterial::_error(errMsg);
428  * }
429  *
430  * //status -> setCharLength(i, Le);
431  * status -> setCharLength(i, 1.0);
432  * status ->
433  * setMinCrackStrainsForFullyOpenCrack (i, this->giveMinCrackStrainsForFullyOpenCrack(gp,i));
434  * }
435  */
436 
437 
438 
441  tempNonlocalStrainVector(), localStrainVectorForAverage()
442 {
444 
446 }
447 
448 
450 { }
451 
452 
453 void
455 {
456  FloatArray helpVec;
457 
459 
460  fprintf(file, "nonlocstatus { ");
461  fprintf(file, " nonloc strains ");
463  for ( auto &val : helpVec ) {
464  fprintf( file, " %.4e", val );
465  }
466 
467  fprintf(file, "}\n");
468 }
469 
470 
471 void
473 //
474 // initializes temp variables according to variables form previous equlibrium state.
475 // builds new crackMap
476 //
477 {
479 
480  if ( nonlocalStrainVector.giveSize() == 0 ) {
482  }
483 
484  if ( localStrainVectorForAverage.giveSize() == 0 ) {
486  }
487 
489 }
490 
491 
492 void
494 //
495 // updates variables (nonTemp variables describing situation at previous equilibrium state)
496 // after a new equilibrium state has been reached
497 // temporary variables are having values corresponding to newly reched equilibrium.
498 //
499 {
502 }
503 
504 
507 //
508 // saves full information stored in this Status
509 // no temp variables stored
510 //
511 {
512  contextIOResultType iores;
513 
514  // save parent class status
515  if ( ( iores = RCSDEMaterialStatus :: saveContext(stream, mode, obj) ) != CIO_OK ) {
516  THROW_CIOERR(iores);
517  }
518 
519  // write a raw data
520  if ( ( iores = nonlocalStrainVector.storeYourself(stream) ) != CIO_OK ) {
521  THROW_CIOERR(iores);
522  }
523 
524  return CIO_OK;
525 }
526 
527 
530 //
531 // restores full information stored in stream to this Status
532 //
533 {
534  contextIOResultType iores;
535 
536  // read parent class status
537  if ( ( iores = RCSDEMaterialStatus :: restoreContext(stream, mode, obj) ) != CIO_OK ) {
538  THROW_CIOERR(iores);
539  }
540 
541  // read raw data
542 
543  if ( ( iores = nonlocalStrainVector.restoreYourself(stream) ) != CIO_OK ) {
544  THROW_CIOERR(iores);
545  }
546 
547  return CIO_OK; // return success
548 }
549 
550 
551 Interface *
553 {
555  return this;
556  } else {
557  return NULL;
558  }
559 }
560 
561 
562 int
564 {
565  RCSDNLMaterialStatus *status = static_cast< RCSDNLMaterialStatus * >( this->giveStatus(ip) );
566 
567  this->buildNonlocalPointTable(ip);
568  this->updateDomainBeforeNonlocAverage(tStep);
569 
570  return (status->giveLocalStrainVectorForAverage().storeYourself(buff) == CIO_OK);
571 }
572 
573 int
575 {
576  int result;
577  RCSDNLMaterialStatus *status = static_cast< RCSDNLMaterialStatus * >( this->giveStatus(ip) );
579 
580  result = (localStrainVectorForAverage.restoreYourself(buff) == CIO_OK);
581  status->setLocalStrainVectorForAverage(localStrainVectorForAverage);
582  return result;
583 }
584 
585 int
587 {
588  //
589  // Note: status localStrainVectorForAverage memeber must be properly sized!
590  //
591  RCSDNLMaterialStatus *status = static_cast< RCSDNLMaterialStatus * >( this->giveStatus(ip) );
592 
593  return status->giveLocalStrainVectorForAverage().givePackSize(buff);
594 }
595 
596 } // end namespace oofem
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
bool contains(int value) const
Definition: intarray.h:283
Abstract base class for all nonlocal structural materials.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition: gausspoint.h:191
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: rcsdnl.C:506
RCSDNLMaterial(int n, Domain *d)
Definition: rcsdnl.C:48
virtual void updateYourself(TimeStep *)
Update equilibrium history variables according to temp-variables.
Definition: rcsdnl.C:493
static int giveVoigtSymVectorMask(IntArray &answer, MaterialMode mmode)
The same as giveVoigtVectorMask but returns a mask corresponding to a symmetric second order tensor...
FloatArray localStrainVectorForAverage
Definition: rcsdnl.h:63
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
void setTransitionEpsCoeff(double val)
Definition: rcsde.h:87
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
void updateDomainBeforeNonlocAverage(TimeStep *tStep)
Updates data in all integration points before nonlocal average takes place.
#define _IFT_RCSDNLMaterial_r
Definition: rcsdnl.h:51
double computeCurrEquivStrain(GaussPoint *, const FloatArray &, double, TimeStep *)
Definition: rcsde.C:241
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
virtual double computeWeightFunction(const FloatArray &src, const FloatArray &coord)
Evaluates the basic nonlocal weight function for two points with given coordinates.
Definition: rcsdnl.C:400
void endIPNonlocalAverage(GaussPoint *gp)
Notifies the receiver, that the nonlocal averaging has been finished for given ip.
FloatArray nonlocalStrainVector
Definition: rcsdnl.h:63
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: rcsde.C:517
For computing principal strains from engineering strains.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
#define _IFT_RCSDNLMaterial_ft
Definition: rcsdnl.h:48
contextIOResultType storeYourself(DataStream &stream) const
Definition: floatarray.C:872
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
virtual int packUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
Pack all necessary data of integration point (according to element parallel_mode) into given communic...
Definition: rcsdnl.C:563
int max(int i, int j)
Returns bigger value form two given decimals.
Definition: mathfem.h:71
LinearElasticMaterial * linearElasticMaterial
Definition: rcm2.h:181
double giveTempMaxEquivStrain()
Definition: rcsde.h:77
LinearElasticMaterial * giveLinearElasticMaterial()
Definition: rcm2.h:199
const IntArray & giveTempCrackStatus()
Definition: rcm2.h:131
double giveCrackStrain(int icrack) const
Definition: rcm2.h:136
#define Ex
Definition: matconst.h:59
const FloatArray & giveLocalStrainVectorForAverage()
Definition: rcsdnl.h:75
virtual bool hasField(InputFieldType id)=0
Returns true if record contains field identified by idString keyword.
void setTempMode(__rcsdModeType mode)
Definition: rcsde.h:92
This class implements associated Material Status to RCSDNLMaterial.
Definition: rcsdnl.h:60
void buildNonlocalPointTable(GaussPoint *gp)
Builds list of integration points which take part in nonlocal average in given integration point...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void setDs0Matrix(FloatMatrix &mtrx)
Definition: rcsde.h:84
virtual ~RCSDNLMaterialStatus()
Definition: rcsdnl.C:449
virtual ~RCSDNLMaterial()
Definition: rcsdnl.C:56
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...
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
Computes principal values and directions of stress or strain vector.
Class implementing an array of integers.
Definition: intarray.h:61
double giveTransitionEpsCoeff()
Definition: rcsde.h:86
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
__rcsdModeType giveTempMode()
Definition: rcsde.h:91
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: rcsdnl.C:472
virtual Interface * giveInterface(InterfaceType)
Interface requesting service.
Definition: rcsdnl.C:552
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.
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
Definition: rcsdnl.C:62
IRResultType initializeFrom(InputRecord *ir)
This class implements associated Material Status to RCSDEMaterial.
Definition: rcsde.h:58
double distance(const FloatArray &x) const
Computes the distance between position represented by receiver and position given as parameter...
Definition: floatarray.C:489
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: rcsdnl.C:454
This class implements a Rotating Crack Model with transition to scalar damage for fracture in smeared...
Definition: rcsde.h:118
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
Definition: material.C:52
#define _IFT_RCSDNLMaterial_gf
Definition: rcsdnl.h:53
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *, const FloatArray &, TimeStep *)
Computes the real stress vector for given total strain and integration point.
Definition: rcsdnl.C:91
double ef
Strain at complete failure.
Definition: rcsdnl.h:115
#define E(p)
Definition: mdm.C:368
#define pscm_OPEN
Definition: rcm2.h:61
int givePackSize(DataStream &buff) const
Definition: floatarray.C:921
void setLocalStrainVectorForAverage(FloatArray ls)
Definition: rcsdnl.h:76
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
RCSDNLMaterialStatus(int n, Domain *d, GaussPoint *g)
Definition: rcsdnl.C:439
double SDTransitionCoeff
Definition: rcsde.h:121
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
std::vector< localIntegrationRecord > * giveIPIntegrationList(GaussPoint *gp)
Returns integration list corresponding to given integration point.
#define _IFT_RCSDNLMaterial_sdtransitioncoeff
Definition: rcsdnl.h:49
contextIOResultType restoreYourself(DataStream &stream)
Definition: floatarray.C:895
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: rcsdnl.C:350
FloatArray tempNonlocalStrainVector
Definition: rcsdnl.h:63
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
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 int estimatePackSize(DataStream &buff, GaussPoint *ip)
Estimates the necessary pack size to hold all packed data of receiver.
Definition: rcsdnl.C:586
#define pscm_Gf
Definition: rcm2.h:54
virtual void updateBeforeNonlocAverage(const FloatArray &strainVector, GaussPoint *gp, TimeStep *tStep)
Implements the service updating local variables in given integration points, which take part in nonlo...
Definition: rcsdnl.C:73
double giveEpsF2Coeff()
Definition: rcsde.h:88
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
Class representing vector of real numbers.
Definition: floatarray.h:82
#define _IFT_RCSDNLMaterial_ef
Definition: rcsdnl.h:52
#define _IFT_RCSDNLMaterial_sdtransitioncoeff2
Definition: rcsdnl.h:50
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
void setTempDamageCoeff(double val)
Definition: rcsde.h:82
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
Base class for all nonlocal structural material statuses.
virtual int unpackAndUpdateUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
Unpack and updates all necessary data of given integration point (according to element parallel_mode)...
Definition: rcsdnl.C:574
Class Interface.
Definition: interface.h:82
#define pscm_G
Definition: rcm2.h:56
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: rcsde.C:532
void times(double s)
Multiplies receiver with scalar.
Definition: floatarray.C:818
double SDTransitionCoeff2
Nondimensional parameter controlling the transition between rc and sd model, with respect to shear st...
Definition: rcsdnl.h:106
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
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
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
double giveIntegrationScale()
Returns associated integration scale.
int min(int i, int j)
Returns smaller value from two given decimals.
Definition: mathfem.h:59
REGISTER_Material(DummyMaterial)
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
the oofem namespace is to define a context or scope in which all oofem names are defined.
void setTempNonlocalStrainVector(FloatArray ls)
Definition: rcsdnl.h:73
#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
#define pscm_SOFTENING
Definition: fcm.h:56
double giveCharLength(int icrack) const
Definition: rcm2.h:141
virtual double giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i)
Definition: rcsdnl.C:393
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define OOFEM_WARNING(...)
Definition: error.h:62
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: rcsdnl.C:529
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
void add(const FloatArray &src)
Adds array src to receiver.
Definition: floatarray.C:156
virtual void updateCrackStatus(GaussPoint *gp, const FloatArray &crackStrain)
Definition: rcm2.C:442
virtual double computeStrength(GaussPoint *, double)
Definition: rcsdnl.h:159
double R
Interaction radius, related to the nonlocal characteristic length of material.
Definition: rcsdnl.h:110
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
#define rcm_SMALL_STRAIN
Definition: rcm2.h:71

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