OOFEM 3.0
Loading...
Searching...
No Matches
misesmatgrad.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 "misesmatgrad.h"
36#include "stressvector.h"
37#include "gausspoint.h"
38#include "floatmatrix.h"
39#include "floatarray.h"
40#include "mathfem.h"
41#include "error.h"
42#include "classfactory.h"
43
44
45namespace oofem {
47
49//gradient regularization of Mises plasticity coupled with isotropic damage
51
52MisesMatGrad :: MisesMatGrad(int n, Domain *d) : MisesMat(n, d), GradientDamageMaterialExtensionInterface(d)
53{}
54
55
56bool
57MisesMatGrad :: hasMaterialModeCapability(MaterialMode mode) const
58{
59 return mode == _1dMat || mode == _PlaneStrain || mode == _3dMat;
60}
61
62
63void
64MisesMatGrad :: giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
65//
66// Returns characteristic material stiffness matrix of the receiver
67//
68{
69 OOFEM_ERROR("Shouldn't be called.");
70}
71
72
73
74void
75MisesMatGrad :: giveGradientDamageStiffnessMatrix_uu(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
76{
77 MaterialMode mMode = gp->giveMaterialMode();
78 switch ( mMode ) {
79 case _1dMat:
80 answer = give1dStressStiffMtrx(mode, gp, tStep);
81 break;
82 case _PlaneStrain:
83 answer = givePlaneStrainStiffMtrx(mode, gp, tStep);
84 break;
85 case _3dMat:
86 answer = give3dMaterialStiffnessMatrix(mode, gp, tStep);
87 break;
88 default:
89 OOFEM_ERROR( "unknown mode (%s)", __MaterialModeToString(mMode) );
90 }
91}
92
93void
94MisesMatGrad :: giveGradientDamageStiffnessMatrix_du(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
95{
96 MaterialMode mMode = gp->giveMaterialMode();
97 switch ( mMode ) {
98 case _1dMat:
99 give1dKappaMatrix(answer, mode, gp, tStep);
100 break;
101 case _PlaneStrain:
102 givePlaneStrainKappaMatrix(answer, mode, gp, tStep);
103 break;
104 case _3dMat:
105 give3dKappaMatrix(answer, mode, gp, tStep);
106 break;
107 default:
108 OOFEM_ERROR( "unknown mode (%s)", __MaterialModeToString(mMode) );
109 }
110}
111
112void
113MisesMatGrad :: giveGradientDamageStiffnessMatrix_ud(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
114{
115 MaterialMode mMode = gp->giveMaterialMode();
116 switch ( mMode ) {
117 case _1dMat:
118 give1dGprime(answer, mode, gp, tStep);
119 break;
120 case _PlaneStrain:
121 givePlaneStrainGprime(answer, mode, gp, tStep);
122 break;
123 case _3dMat:
124 give3dGprime(answer, mode, gp, tStep);
125 break;
126 default:
127 OOFEM_ERROR( "unknown mode (%s)", __MaterialModeToString(mMode) );
128 }
129}
130
131void
132MisesMatGrad :: giveGradientDamageStiffnessMatrix_dd_BB(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
133{
134 MaterialMode mMode = gp->giveMaterialMode();
135 switch ( mMode ) {
136 case _1dMat:
137 giveInternalLength(answer, mode, gp, tStep);
138 break;
139 case _PlaneStrain:
140 giveInternalLength(answer, mode, gp, tStep);
141 break;
142 case _3dMat:
143 giveInternalLength(answer, mode, gp, tStep);
144 break;
145 default:
146 OOFEM_ERROR( "unknown mode (%s)", __MaterialModeToString(mMode) );
147 }
148}
149
150
151
153MisesMatGrad :: give1dStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
154{
155 double E = this->linearElasticMaterial.give('E', gp);
156 if ( mode != TangentStiffness ) {
157 return {E};
158 }
159
160 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
161 double tempKappa = status->giveTempCumulativePlasticStrain();
162 // increment of cumulative plastic strain as an indicator of plastic loading
163 double dKappa = ( tempKappa - status->giveCumulativePlasticStrain() );
164 /********************************************************************/
165 double tempDamage = status->giveTempDamage();
166 double damage = status->giveDamage();
167 /*********************************************************************/
168 double nlKappa = status->giveNonlocalCumulatedStrain();
169 double kappa = mParam * nlKappa + ( 1. - mParam ) * tempKappa;
170 if ( dKappa <= 0.0 ) {
171 return {( 1. - tempDamage ) * E};
172 }
173
174
175 // === plastic loading ===
176 const FloatArray &stressVector = status->giveTempEffectiveStress();
177 double stress = stressVector.at(1);
178
179 auto tangent = ( 1. - tempDamage ) * E * H / ( E + H );
180 if ( tempDamage > damage ) {
181 tangent -= ( 1. - mParam ) * computeDamageParamPrime(kappa) * E / ( E + H ) * signum(stress) * stress;
182 }
183 return {tangent};
184}
185
186
188MisesMatGrad :: givePlaneStrainStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
189{
190 auto d = this->linearElasticMaterial.givePlaneStrainStiffMtrx(mode, gp, tStep);
191 if ( mode != TangentStiffness ) {
192 return d;
193 }
194
195 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
196 double tempKappa = status->giveTempCumulativePlasticStrain();
197 double kappa = status->giveCumulativePlasticStrain();
198 double dKappa = tempKappa - kappa;
199 double tempDamage = status->giveTempDamage();
200 double damage = status->giveDamage();
201
202 if ( dKappa <= 0.0 ) { // elastic loading - elastic stiffness plays the role of tangent stiffness
203 return d;
204 }
205
206 // === plastic loading ===
207 // yield stress at the beginning of the step
208 double sigmaY = this->giveS( gp, tStep) + H * kappa;
209 // trial deviatoric stress and its norm
210 StressVector trialStressDev(status->giveTrialStressDev(), _PlaneStrain);
211 double trialS = trialStressDev.computeStressNorm();
212 // volumetric stress
213 //double trialStressVol = status->giveTrialStressVol();
214 // one correction term
215 FloatMatrix stiffnessCorrection(4, 4);
216 stiffnessCorrection.beDyadicProductOf(trialStressDev, trialStressDev);
217 double factor = -2. * sqrt(6.) * G * G / trialS;
218 double factor1 = factor * sigmaY / ( ( H + 3. * G ) * trialS * trialS );
219 stiffnessCorrection.times(factor1);
220 d += FloatMatrixF<4,4>(stiffnessCorrection);
221 // another correction term
222 stiffnessCorrection.zero();
223 stiffnessCorrection.at(1, 1) = stiffnessCorrection.at(2, 2) = stiffnessCorrection.at(3, 3) = 2. / 3.;
224 stiffnessCorrection.at(1, 2) = stiffnessCorrection.at(1, 3) = stiffnessCorrection.at(2, 1) = -1. / 3.;
225 stiffnessCorrection.at(2, 3) = stiffnessCorrection.at(3, 1) = stiffnessCorrection.at(3, 2) = -1. / 3.;
226 stiffnessCorrection.at(4, 4) = 0.5;
227 double factor2 = factor * dKappa;
228 stiffnessCorrection.times(factor2);
229 d += FloatMatrixF<4,4>(stiffnessCorrection);
230 //influence of damage
231 d *= 1 - tempDamage;
232 if ( tempDamage > damage ) {
233 const FloatArray &effStress = status->giveTempEffectiveStress();
234 double nlKappa = status->giveNonlocalCumulatedStrain();
235 kappa = mParam * nlKappa + ( 1. - mParam ) * tempKappa;
236 double omegaPrime = computeDamageParamPrime(kappa);
237 double scalar = -omegaPrime *sqrt(6.) * G / ( 3. * G + H ) / trialS;
238 stiffnessCorrection.beDyadicProductOf(effStress, trialStressDev);
239 stiffnessCorrection.times( scalar * ( 1. - mParam ) );
240 d += FloatMatrixF<4,4>(stiffnessCorrection);
241 }
242 return d;
243}
244
245
247MisesMatGrad :: give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
248{
249 auto status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
250 auto d = this->linearElasticMaterial.give3dMaterialStiffnessMatrix(mode, gp, tStep);
251 // start from the elastic stiffness
252 if ( mode != TangentStiffness ) {
253 return d;
254 }
255
256 double tempKappa = status->giveTempCumulativePlasticStrain();
257 double kappa = status->giveCumulativePlasticStrain();
258 double dKappa = tempKappa - kappa;
259
260 if ( dKappa > 0.0 ) {
261 double tempDamage = status->giveTempDamage();
262 double damage = status->giveDamage();
263 double sigmaY = this->giveS(gp, tStep) + H * kappa;
264 // trial deviatoric stress and its norm
265 const FloatArrayF<6> trialStressDev = status->giveTrialStressDev();
266 /*****************************************************/
267 //double trialStressVol = status->giveTrialStressVol();
268 /****************************************************/
269 double trialS = computeStressNorm(trialStressDev);
270 // one correction term
271 double factor = -2. * sqrt(6.) * G * G / trialS;
272 double factor1 = factor * sigmaY / ( ( H + 3. * G ) * trialS * trialS );
273 d += factor1 * dyad(trialStressDev, trialStressDev);
274 // another correction term
275 d += factor * dKappa * I_dev6;
276 //influence of damage
277 d *= (1. - tempDamage);
278 if ( tempDamage > damage ) {
279 const FloatArrayF<6> effStress = status->giveTempEffectiveStress();
280 double nlKappa = status->giveNonlocalCumulatedStrain();
281 kappa = mParam * nlKappa + ( 1. - mParam ) * tempKappa;
282 double omegaPrime = computeDamageParamPrime(kappa);
283 double scalar = -omegaPrime *sqrt(6.) * G / ( 3. * G + H ) / trialS;
284 d += scalar * ( 1. - mParam ) * dyad(effStress, trialStressDev);
285 }
286 }
287 return d;
288}
289
290
291void
292MisesMatGrad :: give1dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
293{
294 answer.resize(1, 1);
295 answer.zero();
296 double E = linearElasticMaterial.give('E', gp);
297 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
298 double tempKappa = status->giveTempCumulativePlasticStrain();
299 double dKappa = tempKappa - status->giveCumulativePlasticStrain();
300 const FloatArray &effStress = status->giveTempEffectiveStress();
301 double stress = effStress.at(1);
302 if ( dKappa > 0 ) {
303 double trialS = signum(stress);
304 double factor = trialS * E / ( E + H );
305 answer.at(1, 1) = factor;
306 }
307}
308
309
310void
311MisesMatGrad :: givePlaneStrainKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
312{
313 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
314 StressVector trialStressDev(status->giveTrialStressDev(), _PlaneStrain);
315 double tempKappa = status->giveTempCumulativePlasticStrain();
316 double dKappa = tempKappa - status->giveCumulativePlasticStrain();
317 answer.resize(1, 4);
318 answer.zero();
319 if ( dKappa > 0 ) {
320 double trialS = trialStressDev.computeStressNorm();
321 answer.at(1, 1) = trialStressDev.at(1);
322 answer.at(1, 2) = trialStressDev.at(2);
323 answer.at(1, 3) = trialStressDev.at(3);
324 answer.at(1, 4) = trialStressDev.at(4);
325 double factor = sqrt(6.) * G / ( 3. * G + H ) / trialS;
326 answer.times(factor);
327 }
328}
329
330
331void
332MisesMatGrad :: give3dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
333{
334 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
335 const FloatArray &trialStressDev = status->giveTrialStressDev();
336 double tempKappa = status->giveTempCumulativePlasticStrain();
337 double dKappa = tempKappa - status->giveCumulativePlasticStrain();
338 answer.resize(1, 6);
339 answer.zero();
340 if ( dKappa > 0 ) {
341 double trialS = computeStressNorm(trialStressDev);
342 for ( int i = 1; i <= 6; i++ ) {
343 answer.at(1, i) = trialStressDev.at(i);
344 }
345
346 double factor = sqrt(6.) * G / ( 3. * G + H ) / trialS;
347 answer.times(factor);
348 }
349}
350
351
352void
353MisesMatGrad :: give1dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
354{
355 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
356 double damage, tempDamage;
357 double nlKappa, kappa;
358 double tempKappa = status->giveTempCumulativePlasticStrain();
359 double gPrime;
360 answer.resize(1, 1);
361 damage = status->giveDamage();
362 tempDamage = status->giveTempDamage();
363 nlKappa = status->giveNonlocalCumulatedStrain();
364 kappa = mParam * nlKappa + ( 1 - mParam ) * tempKappa;
365 if ( ( tempDamage - damage ) > 0 ) {
366 const FloatArray &tempEffStress = status->giveTempEffectiveStress();
367 answer.at(1, 1) = tempEffStress.at(1);
368 gPrime = computeDamageParamPrime(kappa);
369 answer.times(gPrime * mParam);
370 } else {
371 answer.zero();
372 }
373}
374
375void
376MisesMatGrad :: givePlaneStrainGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
377{
378 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
379 double damage, tempDamage;
380 double nlKappa, kappa;
381 answer.resize(4, 1);
382 answer.zero();
383 double tempKappa = status->giveTempCumulativePlasticStrain();
384 double gPrime;
385 damage = status->giveDamage();
386 tempDamage = status->giveTempDamage();
387 nlKappa = status->giveNonlocalCumulatedStrain();
388 kappa = mParam * nlKappa + ( 1. - mParam ) * tempKappa;
389 if ( ( tempDamage - damage ) > 0 ) {
390 const FloatArray &tempEffStress = status->giveTempEffectiveStress();
391 answer.at(1, 1) = tempEffStress.at(1);
392 answer.at(2, 1) = tempEffStress.at(2);
393 answer.at(3, 1) = tempEffStress.at(3);
394 answer.at(4, 1) = tempEffStress.at(4);
395 gPrime = computeDamageParamPrime(kappa);
396 answer.times(gPrime * mParam);
397 } else {
398 answer.zero();
399 }
400}
401
402void
403MisesMatGrad :: give3dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
404{
405 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
406 answer.resize(6, 1);
407 answer.zero();
408 double damage, tempDamage;
409 double nlKappa, kappa;
410 double gPrime;
411 double tempKappa = status->giveTempCumulativePlasticStrain();
412 damage = status->giveDamage();
413 tempDamage = status->giveTempDamage();
414 nlKappa = status->giveNonlocalCumulatedStrain();
415 kappa = mParam * nlKappa + ( 1. - mParam ) * tempKappa;
416 if ( ( tempDamage - damage ) > 0 ) {
417 const FloatArray &tempEffStress = status->giveTempEffectiveStress();
418 for ( int i = 1; i <= 6; i++ ) {
419 answer.at(i, 1) = tempEffStress.at(i);
420 }
421
422 gPrime = computeDamageParamPrime(kappa);
423 answer.times(gPrime * mParam);
424 } else {
425 answer.zero();
426 }
427}
428
429void
430MisesMatGrad :: giveInternalLength(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
431{
432 answer.resize(1, 1);
433 answer.at(1, 1) = L;
434}
435
436
437
438
439void
440MisesMatGrad :: giveRealStressVectorGradientDamage(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalCumulatedStrain, TimeStep *tStep)
441{
442 auto status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
443
444 this->initTempStatus(gp);
445
446 MisesMat :: performPlasticityReturn(totalStrain, gp, tStep);
447 status->letTempStrainVectorBe(totalStrain);
448 double tempDamage = computeDamage(gp, tStep);
449 const auto &tempEffStress = status->giveTempEffectiveStress();
450 answer1.beScaled(1.0 - tempDamage, tempEffStress);
451 answer2 = status->giveTempCumulativePlasticStrain();
452
453 status->setNonlocalCumulatedStrain(nonlocalCumulatedStrain);
454 status->setTempDamage(tempDamage);
455 status->letTempEffectiveStressBe(tempEffStress);
456 status->letTempStressVectorBe(answer1);
457}
458
459
460double
461MisesMatGrad :: computeCumPlastStrain(GaussPoint *gp, TimeStep *tStep) const
462{
463 auto status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
464 double localCumPlastStrain = status->giveTempCumulativePlasticStrain();
465 double nlCumPlastStrain = status->giveNonlocalCumulatedStrain();
466
467 return mParam * nlCumPlastStrain + ( 1 - mParam ) * localCumPlastStrain;
468}
469
470
471void
472MisesMatGrad :: giveNonlocalInternalForces_N_factor(double &answer, double nlDamageDrivingVariable, GaussPoint *gp, TimeStep *tStep)
473{
474 answer = nlDamageDrivingVariable;
475}
476
477void
478MisesMatGrad :: giveNonlocalInternalForces_B_factor(FloatArray &answer, const FloatArray &nlDamageDrivingVariable_grad, GaussPoint *gp, TimeStep *tStep)
479{
480 answer = nlDamageDrivingVariable_grad;
482}
483
484
485
486
487void
488MisesMatGrad :: computeLocalDamageDrivingVariable(double &answer, GaussPoint *gp, TimeStep *tStep)
489{
490 MisesMatGradStatus *status = static_cast< MisesMatGradStatus * >( this->giveStatus(gp) );
491 answer = status->giveTempCumulativePlasticStrain();
492}
493
494
495
496void
497MisesMatGrad :: initializeFrom(InputRecord &ir)
498{
499 MisesMat :: initializeFrom(ir);
500
502 if ( L < 0.0 ) {
503 L = 0.0;
504 }
505
506 mParam = 2.;
508}
509
510
511MisesMatGradStatus :: MisesMatGradStatus(GaussPoint *g) :
513{}
514
515
516void
517MisesMatGradStatus :: printOutputAt(FILE *file, TimeStep *tStep) const
518{
519 StructuralMaterialStatus :: printOutputAt(file, tStep);
520 fprintf(file, "status {");
521 fprintf(file, "kappa %f, damage %f ", this->kappa, this->damage);
522 fprintf(file, "}\n");
523}
524
525
526void
527MisesMatGradStatus :: initTempStatus()
528{
529 // MisesMatStatus::initTempStatus();
530 StructuralMaterialStatus :: initTempStatus();
531
532 if ( plasticStrain.giveSize() == 0 ) {
533 if ( gp->giveMaterialMode() == _1dMat ) {
534 plasticStrain.resize( StructuralMaterial :: giveSizeOfVoigtSymVector(_1dMat) );
535 } else if ( gp->giveMaterialMode() == _PlaneStrain ) {
536 plasticStrain.resize( StructuralMaterial :: giveSizeOfVoigtSymVector(_PlaneStrain) );
537 } else if ( gp->giveMaterialMode() == _PlaneStress ) {
538 plasticStrain.resize( StructuralMaterial :: giveSizeOfVoigtSymVector(_PlaneStress) );
539 } else if ( gp->giveMaterialMode() == _3dMat ) {
540 plasticStrain.resize( StructuralMaterial :: giveSizeOfVoigtSymVector(_3dMat) );
541 }
542
543 plasticStrain.zero();
544 }
545
549 trialStressD.clear();
550}
551
552
553void
554MisesMatGradStatus :: updateYourself(TimeStep *tStep)
555{
556 MisesMatStatus :: updateYourself(tStep);
557}
558} // end namespace oofem
#define E(a, b)
#define REGISTER_Material(class)
double & at(Index i)
Definition floatarray.h:202
void beScaled(double s, const FloatArray &b)
Definition floatarray.C:208
void times(double s)
Definition floatarray.C:834
void times(double f)
void resize(Index rows, Index cols)
Definition floatmatrix.C:79
void zero()
Zeroes all coefficient of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
double at(std::size_t i, std::size_t j) const
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition gausspoint.h:190
GaussPoint * gp
Associated integration point.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Definition material.C:206
virtual void initTempStatus(GaussPoint *gp) const
Definition material.C:221
double giveNonlocalCumulatedStrain() const
void givePlaneStrainKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
void give1dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
void giveInternalLength(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void give3dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void givePlaneStrainGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void give1dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void give3dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
double giveDamage() const
Definition misesmat.h:197
double damage
damage variable (initial).
Definition misesmat.h:182
double giveTempCumulativePlasticStrain() const
Definition misesmat.h:201
double giveTempDamage() const
Definition misesmat.h:198
double giveCumulativePlasticStrain() const
Definition misesmat.h:200
const FloatArray & giveTempEffectiveStress() const
Definition misesmat.h:203
FloatArray trialStressD
Deviatoric trial stress - needed for tangent stiffness.
Definition misesmat.h:167
FloatArray tempPlasticStrain
Plastic strain (final).
Definition misesmat.h:164
double kappa
Cumulative plastic strain (initial).
Definition misesmat.h:176
double tempDamage
damage variable (final).
Definition misesmat.h:185
const FloatArray & giveTrialStressDev() const
Definition misesmat.h:193
MisesMatStatus(GaussPoint *g)
Definition misesmat.C:672
double tempKappa
Cumulative plastic strain (final).
Definition misesmat.h:179
FloatArray plasticStrain
Plastic strain (initial).
Definition misesmat.h:161
IsotropicLinearElasticMaterial linearElasticMaterial
Reference to the basic elastic material.
Definition misesmat.h:80
double giveS(GaussPoint *gp, TimeStep *tStep) const
Definition misesmat.C:732
double G
Elastic shear modulus.
Definition misesmat.h:83
double computeDamage(GaussPoint *gp, TimeStep *tStep) const
Definition misesmat.C:472
double H
Hardening modulus.
Definition misesmat.h:89
double computeDamageParamPrime(double tempKappa) const
Definition misesmat.C:461
MisesMat(int n, Domain *d)
Definition misesmat.C:54
double computeStressNorm() const
static double computeStressNorm(const FloatArrayF< 6 > &stress)
#define OOFEM_ERROR(...)
Definition error.h:79
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Definition inputrecord.h:75
#define IR_GIVE_FIELD(__ir, __value, __id)
Definition inputrecord.h:67
#define _IFT_MisesMatGrad_m
#define _IFT_MisesMatGrad_l
FloatMatrixF< N, M > dyad(const FloatArrayF< N > &a, const FloatArrayF< M > &b)
Computes the dyadic product .
double signum(double i)
Returns the signum of given value (i = 0 returns 0, i < 0 returns -1, i > 0 returns 1).
Definition mathfem.C:327
const FloatMatrixF< 6, 6 > I_dev6
I_dev matrix in Voigt (stress) form.

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