OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
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 - 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 #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"
55 #include "../sm/Materials/structuralms.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
68  #include "mmashapefunctprojection.h"
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 
109 
110 namespace oofem {
111 #define IDM1_ITERATION_LIMIT 1.e-9
112 
118 {
119 public:
124 
125  // definition
126  virtual const char *giveClassName() const { return "IsotropicDamageMaterial1Status"; }
127 
129 };
130 
140 {
141 protected:
143  double e0;
145  double ef;
147  double wf;
148 
155  double gf;
156 
158  double gft;
159 
161  double ek;
162 
164  double wk;
165 
167  double sk;
168 
170  double c1, c2;
171 
178  EST_Mazars=0,
179  EST_Rankine_Smooth=1,
180  EST_ElasticEnergy=2,
181  EST_Mises=3,
182  EST_Rankine_Standard=4,
183  EST_ElasticEnergyPositiveStress=5,
184  EST_ElasticEnergyPositiveStrain=6,
185  EST_Griffith=7,
186  EST_Unknown = 100
187  };
190 
192  double k;
193 
195  double griff_n;
196 
199 
203  enum SofteningType { ST_Unknown, ST_Exponential, ST_Linear, ST_Mazars, ST_Smooth, ST_SmoothExtended, ST_Exponential_Cohesive_Crack, ST_Linear_Cohesive_Crack, ST_BiLinear_Cohesive_Crack, ST_Disable_Damage, ST_PowerExponential, ST_DoubleExponential, ST_Hordijk_Cohesive_Crack, ST_ModPowerExponential };
204 
207 
209  double At, Bt;
211  double md;
212 
214  double e1, e2, s1, nd;
217 
219  double ep, ft;
220 
222  double ps_alpha, ps_H;
223 
226 
229 
230 #ifdef IDM_USE_MMAClosestIPTransfer
231  static MMAClosestIPTransfer mapper;
233 #endif
234 #ifdef IDM_USE_MMAContainingElementProjection
235  static MMAContainingElementProjection mapper;
237 #endif
238 #ifdef IDM_USE_MMAShapeFunctProjection
239  static MMAShapeFunctProjection mapper;
241 #endif
242 #ifdef IDM_USE_MMALeastSquareProjection
243  static MMALeastSquareProjection mapper;
245 #endif
246 
247 public:
248 
250  IsotropicDamageMaterial1(int n, Domain *d);
252  virtual ~IsotropicDamageMaterial1();
253 
254  // identification and auxiliary functions
255  virtual const char *giveClassName() const { return "IsotropicDamageMaterial1"; }
256  virtual const char *giveInputRecordName() const { return _IFT_IsotropicDamageMaterial1_Name; }
258  virtual void giveInputRecord(DynamicInputRecord &input);
266  static void computeStrainInvariants(const FloatArray &strainVector, double &I1e, double &J2e);
267 
268  bool isCrackBandApproachUsed() { return ( this->softType == ST_Exponential_Cohesive_Crack || this->softType == ST_Linear_Cohesive_Crack || this->softType == ST_BiLinear_Cohesive_Crack || this->gf != 0. ); }
269  virtual void computeEquivalentStrain(double &kappa, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep);
270 
271  virtual void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep);
272  virtual void computeDamageParam(double &omega, double kappa, const FloatArray &strain, GaussPoint *gp);
282  void computeDamageParamForCohesiveCrack(double &omega, double kappa, GaussPoint *gp);
292  double damageFunction(double kappa, GaussPoint *gp);
313  double damageFunctionPrime(double kappa, GaussPoint *gp);
326  double complianceFunction(double kappa, GaussPoint *gp);
327 
328  double evaluatePermanentStrain(double kappa, double omega);
329 
331 
332  virtual int MMI_map(GaussPoint *gp, Domain *oldd, TimeStep *tStep);
333  virtual int MMI_update(GaussPoint *gp, TimeStep *tStep, FloatArray *estrain = NULL);
334  virtual int MMI_finish(TimeStep *tStep);
335 
336  virtual MaterialStatus *CreateStatus(GaussPoint *gp) const;
337  virtual MaterialStatus *giveStatus(GaussPoint *gp) const;
338 
339  virtual double give(int aProperty, GaussPoint *gp);
340 
341  virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) { return false; }
342 
343 protected:
352  virtual void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp);
353 };
354 } // end namespace oofem
355 #endif // idm1_h
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Definition: idm1.C:1467
The class implements the transfer of state variables based on Least square fit over old mesh integrat...
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode)
Returns true if stiffness matrix of receiver is symmetric Default implementation returns true...
Definition: idm1.h:341
Base class representing general isotropic damage model.
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
double md
Parameter used in "smooth damage law".
Definition: idm1.h:211
The class implements the closest integration point transfer of state variables.
double kappa
Scalar measure of the largest strain level ever reached in material.
double gf
Determines the softening -> corresponds to the initial fracture energy.
Definition: idm1.h:155
IsotropicDamageMaterial1Status(int n, Domain *d, GaussPoint *g)
Constructor.
Definition: idm1.C:1461
The class representing the general material model adaptive mapping interface.
SofteningType
Type characterizing the formula for the damage law.
Definition: idm1.h:203
int checkSnapBack
Check possible snap back flag.
Definition: idm1.h:216
virtual const char * giveClassName() const
Definition: idm1.h:126
This class implements associated Material Status to IsotropicDamageMaterial1.
Definition: idm1.h:117
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Definition: femcmpnn.C:77
MatResponseMode
Describes the character of characteristic material matrix.
double ef
Determines ductility -> corresponds to fracturing strain.
Definition: idm1.h:145
double griff_n
Parameter used in Griffith's criterion.
Definition: idm1.h:195
double k
Parameter used in Mises definition of equivalent strain.
Definition: idm1.h:192
EquivStrainType equivStrainType
Parameter specifying the definition of equivalent strain.
Definition: idm1.h:189
double wf
Determines ductility -> corresponds to crack opening in the cohesive crack model. ...
Definition: idm1.h:147
EquivStrainType
Type characterizing the algorithm used to compute equivalent strain measure.
Definition: idm1.h:177
double wk
Determines the softening for the bilinear law -> corresponds to the crack opening at the knee point...
Definition: idm1.h:164
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: matstatus.h:140
Abstract base class for all random materials.
Set of elements, boundaries, edges and/or nodes.
Definition: set.h:66
Set * sourceElemSet
Cached source element set used to map internal variables (adaptivity), created on demand...
Definition: idm1.h:228
virtual const char * giveClassName() const
Definition: idm1.h:255
Abstract base class for all random constitutive model statuses.
Abstract base class representing a material status information.
Definition: matstatus.h:84
Class representing vector of real numbers.
Definition: floatarray.h:82
FloatArray strainVector
Equilibrated strain vector in reduced form.
Definition: structuralms.h:69
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
The class implements the transfer of state variables based on projection using shape functions...
double e0
Equivalent strain at stress peak (or a similar parameter).
Definition: idm1.h:143
Class representing the general Input Record.
Definition: inputrecord.h:101
SofteningType softType
Parameter specifying the type of softening (damage law).
Definition: idm1.h:206
double sk
Determines the softening for the bilinear law -> corresponds to the stress at the knee point...
Definition: idm1.h:167
Class Interface.
Definition: interface.h:82
virtual ~IsotropicDamageMaterial1Status()
Destructor.
Definition: idm1.h:123
The class implements the transfer of internal variables based on containing element The element conta...
Class representing the a dynamic Input Record.
This class implements a simple local isotropic damage model for concrete in tension.
Definition: idm1.h:137
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
ElementCharSizeMethod ecsMethod
Method used for evaluation of characteristic element size.
Definition: idm1.h:225
double gft
Determines the softening for the bilinear law -> corresponds to the total fracture energy...
Definition: idm1.h:158
virtual const char * giveInputRecordName() const
Definition: idm1.h:256
the oofem namespace is to define a context or scope in which all oofem names are defined.
double ek
Determines the softening for the bilinear law -> corresponds to the strain at the knee point...
Definition: idm1.h:161
int damageLaw
Temporary parameter reading type of softening law, used in other isotropic damage material models...
Definition: idm1.h:198
This class implements associated Material Status to IsotropicDamageMaterial.
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define _IFT_IsotropicDamageMaterial1_Name
Definition: idm1.h:77
Class representing solution step.
Definition: timestep.h:80

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:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011