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

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011