OOFEM 3.0
Loading...
Searching...
No Matches
idm1.h
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#ifndef idm1_h
36#define idm1_h
37
42//#define IDM_USE_MMAClosestIPTransfer
43#define IDM_USE_MMAContainingElementProjection
44//#define IDM_USE_MMAShapeFunctProjection
45//#define IDM_USE_MMALeastSquareProjection
46
47/*
48 * Selects the use of mapped strain or projected strain from element.
49 */
50#define IDM_USE_MAPPEDSTRAIN
51
52#include "material.h"
56#include "randommaterialext.h"
58
59#ifdef IDM_USE_MMAClosestIPTransfer
60 #include "mmaclosestiptransfer.h"
61#endif
62
63#ifdef IDM_USE_MMAContainingElementProjection
65#endif
66
67#ifdef IDM_USE_MMAShapeFunctProjection
69#endif
70
71#ifdef IDM_USE_MMALeastSquareProjection
73#endif
74
76
77#define _IFT_IsotropicDamageMaterial1_Name "idm1"
78#define _IFT_IsotropicDamageMaterial1_e0 "e0"
79#define _IFT_IsotropicDamageMaterial1_ef "ef"
80#define _IFT_IsotropicDamageMaterial1_wf "wf"
81#define _IFT_IsotropicDamageMaterial1_equivstraintype "equivstraintype"
82#define _IFT_IsotropicDamageMaterial1_damageLaw "damlaw"
83#define _IFT_IsotropicDamageMaterial1_k "k"
84#define _IFT_IsotropicDamageMaterial1_md "md"
85#define _IFT_IsotropicDamageMaterial1_ecsm "ecsm"
86#define _IFT_IsotropicDamageMaterial1_At "at"
87#define _IFT_IsotropicDamageMaterial1_Bt "bt"
88#define _IFT_IsotropicDamageMaterial1_ft "ft"
89#define _IFT_IsotropicDamageMaterial1_wkwf "wkwf"
90#define _IFT_IsotropicDamageMaterial1_e1ef "e1ef"
91#define _IFT_IsotropicDamageMaterial1_skft "skft"
92#define _IFT_IsotropicDamageMaterial1_s1 "s1"
93#define _IFT_IsotropicDamageMaterial1_sk "sk"
94#define _IFT_IsotropicDamageMaterial1_wk "wk"
95#define _IFT_IsotropicDamageMaterial1_e1 "e1"
96#define _IFT_IsotropicDamageMaterial1_ek "ek"
97#define _IFT_IsotropicDamageMaterial1_gf "gf"
98#define _IFT_IsotropicDamageMaterial1_gft "gft"
99#define _IFT_IsotropicDamageMaterial1_ep "ep"
100#define _IFT_IsotropicDamageMaterial1_e2 "e2"
101#define _IFT_IsotropicDamageMaterial1_nd "nd"
102#define _IFT_IsotropicDamageMaterial1_checkSnapBack "checksnapback"
103#define _IFT_IsotropicDamageMaterial1_n "griff_n"
104#define _IFT_IsotropicDamageMaterial1_c1 "c1"
105#define _IFT_IsotropicDamageMaterial1_c2 "c2"
106#define _IFT_IsotropicDamageMaterial1_alphaps "alphaps"
107#define _IFT_IsotropicDamageMaterial1_h "h"
108#define _IFT_IsotropicDamageMaterial1_w_k "w_k"
109#define _IFT_IsotropicDamageMaterial1_w_r "w_r"
110#define _IFT_IsotropicDamageMaterial1_w_f "w_f"
111#define _IFT_IsotropicDamageMaterial1_f_k "f_k"
112#define _IFT_IsotropicDamageMaterial1_f_r "f_r"
114
115namespace oofem {
116#define IDM1_ITERATION_LIMIT 1.e-9
117
123{
124public:
127
128 const char *giveClassName() const override { return "IsotropicDamageMaterial1Status"; }
129
131};
132
142{
143protected:
145 double e0 = 0.;
147 double ef = 0.;
149 double wf = 0.;
150
157 double gf = 0.;
158
160 double gft = 0.;
161
163 double ek = 0.;
164
166 double wk = 0.;
167
169 double sk = 0.;
170
172 double c1 = 3., c2 = 6.93; // default value of Hordijk parameter
173
175 double w_k = 0., w_r = 0., w_f = 0., f_k = 0., f_r = 0.;
176
193
195
197 double k = 0.;
198
200 double griff_n = 8.;
201
203 int damageLaw = 0;
204
209
212
214 double At = 0., Bt = 0.;
216 double md = 1.;
217
219 double e1 = 0., e2 = 0., s1 = 0., nd = 0.;
222
224 double ep = 0., ft = 0.;
225
227 double ps_alpha = 0., ps_H = 0.;
228
231
233 Set *sourceElemSet = nullptr;
234
235#ifdef IDM_USE_MMAClosestIPTransfer
238#endif
239#ifdef IDM_USE_MMAContainingElementProjection
242#endif
243#ifdef IDM_USE_MMAShapeFunctProjection
246#endif
247#ifdef IDM_USE_MMALeastSquareProjection
250#endif
251
252public:
257
258 const char *giveClassName() const override { return "IsotropicDamageMaterial1"; }
259 const char *giveInputRecordName() const override { return _IFT_IsotropicDamageMaterial1_Name; }
260 void initializeFrom(InputRecord &ir) override;
261 void giveInputRecord(DynamicInputRecord &input) override;
269 static void computeStrainInvariants(const FloatArray &strainVector, double &I1e, double &J2e);
270
271 bool isCrackBandApproachUsed() const { return ( this->softType == ST_Exponential_Cohesive_Crack || this->softType == ST_Linear_Cohesive_Crack || this->softType == ST_BiLinear_Cohesive_Crack || this->softType == ST_Trilinear_Cohesive_Crack || this->gf != 0. ); }
272 double computeEquivalentStrain(const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const override;
273
274 void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const override;
275 double computeDamageParam(double kappa, const FloatArray &strain, GaussPoint *gp) const override;
285 double computeDamageParamForCohesiveCrack(double kappa, GaussPoint *gp) const;
295 double damageFunction(double kappa, GaussPoint *gp) const;
316 double damageFunctionPrime(double kappa, GaussPoint *gp) const override;
329 double complianceFunction(double kappa, GaussPoint *gp) const;
330
331 double evaluatePermanentStrain(double kappa, double omega) const override;
332
334
335 int MMI_map(GaussPoint *gp, Domain *oldd, TimeStep *tStep) override;
336 int MMI_update(GaussPoint *gp, TimeStep *tStep, FloatArray *estrain = nullptr) override;
337 int MMI_finish(TimeStep *tStep) override;
338
339 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override;
340 MaterialStatus *giveStatus(GaussPoint *gp) const override;
341
342 double give(int aProperty, GaussPoint *gp) const override;
343
344 bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override { return false; }
345
346 void restoreContext(DataStream &stream, ContextMode mode) override;
347 void saveContext(DataStream &stream, ContextMode mode) override;
348protected:
357 void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp) const override;
358};
359} // end namespace oofem
360#endif // idm1_h
Interface * giveInterface(InterfaceType it) override
Definition idm1.C:1497
const char * giveClassName() const override
Definition idm1.h:128
IsotropicDamageMaterial1Status(GaussPoint *g)
Constructor.
Definition idm1.C:1492
SofteningType softType
Parameter specifying the type of softening (damage law).
Definition idm1.h:211
double e0
Equivalent strain at stress peak (or a similar parameter).
Definition idm1.h:145
IsotropicDamageMaterial1(int n, Domain *d)
Constructor.
Definition idm1.C:70
double wf
Determines ductility -> corresponds to crack opening in the cohesive crack model.
Definition idm1.h:149
static MMAContainingElementProjection mapper
Mapper used to map internal variables in adaptivity.
Definition idm1.h:241
double computeEquivalentStrain(const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const override
Definition idm1.C:436
double md
Parameter used in "smooth damage law".
Definition idm1.h:216
Interface * giveInterface(InterfaceType it) override
Definition idm1.C:1348
double ek
Determines the softening for the bilinear law -> corresponds to the strain at the knee point.
Definition idm1.h:163
void initializeFrom(InputRecord &ir) override
Definition idm1.C:86
void saveContext(DataStream &stream, ContextMode mode) override
Definition idm1.C:1358
int MMI_map(GaussPoint *gp, Domain *oldd, TimeStep *tStep) override
Definition idm1.C:1403
double griff_n
Parameter used in Griffith's criterion.
Definition idm1.h:200
const char * giveInputRecordName() const override
Definition idm1.h:259
double wk
Determines the softening for the bilinear law -> corresponds to the crack opening at the knee point.
Definition idm1.h:166
double computeDamageParam(double kappa, const FloatArray &strain, GaussPoint *gp) const override
Definition idm1.C:796
void giveInputRecord(DynamicInputRecord &input) override
Definition idm1.C:352
double ps_alpha
Parameters used by the model with permanent strain.
Definition idm1.h:227
virtual ~IsotropicDamageMaterial1()
Destructor.
Definition idm1.C:78
double k
Parameter used in Mises definition of equivalent strain.
Definition idm1.h:197
double evaluatePermanentStrain(double kappa, double omega) const override
Definition idm1.C:1141
MaterialStatus * giveStatus(GaussPoint *gp) const override
Definition idm1.C:1392
static void computeStrainInvariants(const FloatArray &strainVector, double &I1e, double &J2e)
Definition idm1.C:786
bool isCrackBandApproachUsed() const
Definition idm1.h:271
EquivStrainType equivStrainType
Parameter specifying the definition of equivalent strain.
Definition idm1.h:194
double computeDamageParamForCohesiveCrack(double kappa, GaussPoint *gp) const
Definition idm1.C:808
bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override
Definition idm1.h:344
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
Definition idm1.C:1386
ElementCharSizeMethod ecsMethod
Method used for evaluation of characteristic element size.
Definition idm1.h:230
Set * sourceElemSet
Cached source element set used to map internal variables (adaptivity), created on demand.
Definition idm1.h:233
void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp) const override
Definition idm1.C:1168
double c1
Parameters used in Hordijk's softening law.
Definition idm1.h:172
double sk
Determines the softening for the bilinear law -> corresponds to the stress at the knee point.
Definition idm1.h:169
double w_k
Parameters used in Trilinear_Cohesive_Crack softening law.
Definition idm1.h:175
void restoreContext(DataStream &stream, ContextMode mode) override
Definition idm1.C:1372
int MMI_update(GaussPoint *gp, TimeStep *tStep, FloatArray *estrain=nullptr) override
Definition idm1.C:1466
double damageFunctionPrime(double kappa, GaussPoint *gp) const override
Definition idm1.C:1024
double At
Parameters used in Mazars damage law.
Definition idm1.h:214
double ef
Determines ductility -> corresponds to fracturing strain.
Definition idm1.h:147
const char * giveClassName() const override
Definition idm1.h:258
double give(int aProperty, GaussPoint *gp) const override
Definition idm1.C:1324
int damageLaw
Temporary parameter reading type of softening law, used in other isotropic damage material models.
Definition idm1.h:203
double damageFunction(double kappa, GaussPoint *gp) const
Definition idm1.C:954
double gft
Determines the softening for the bilinear law -> corresponds to the total fracture energy.
Definition idm1.h:160
int MMI_finish(TimeStep *tStep) override
Definition idm1.C:1485
int checkSnapBack
Check possible snap back flag.
Definition idm1.h:221
void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const override
Definition idm1.C:568
double e1
Parameters used if softType = 7 (extended smooth damage law).
Definition idm1.h:219
double ep
auxiliary input variablesfor softType == ST_SmoothExtended
Definition idm1.h:224
double complianceFunction(double kappa, GaussPoint *gp) const
Definition idm1.C:1134
IsotropicDamageMaterialStatus(GaussPoint *g)
Constructor.
IsotropicDamageMaterial(int n, Domain *d)
Constructor.
#define _IFT_IsotropicDamageMaterial1_Name
Definition idm1.h:77
long ContextMode
Definition contextmode.h:43

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