OOFEM 3.0
Loading...
Searching...
No Matches
isodamagemodel.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 isodamagemodel_h
36#define isodamagemodel_h
37
38// this turns on or off a bunch of internal variables
39// that allow tracing the distribution of dissipated energy
40// (can be turned off if such information is not needed)
41#define keep_track_of_dissipated_energy
42
43#include "material.h"
47
49
50#define _IFT_IsotropicDamageMaterial_talpha "talpha"
51#define _IFT_IsotropicDamageMaterial_maxOmega "maxomega"
52#define _IFT_IsotropicDamageMaterial_permstrain "ps"
54
55namespace oofem {
56class GaussPoint;
57
63{
64protected:
66 double kappa = 0.;
68 double tempKappa = 0.;
70 double damage = 0.;
72 double tempDamage = 0.;
78 double le = 0.;
80 double crack_angle = -1000.0;
83
84#ifdef keep_track_of_dissipated_energy
86 double stressWork = 0.;
88 double tempStressWork = 0.;
90 double dissWork = 0.;
92 double tempDissWork = 0.;
93#endif
94
95public:
98
99 void printOutputAt(FILE *file, TimeStep *tStep) const override;
100
102 double giveKappa() const { return kappa; }
104 double giveTempKappa() const { return tempKappa; }
106 void setTempKappa(double newKappa) { tempKappa = newKappa; }
108 double giveDamage() const { return damage; }
110 double giveTempDamage() const { return tempDamage; }
112 void setTempDamage(double newDamage) { tempDamage = newDamage; }
113
115 double giveLe() const { return le; }
117 void setLe(double ls) { le = ls; }
119 double giveCrackAngle() const { return crack_angle; }
121 void setCrackAngle(double ca) { crack_angle = ca; }
125 void setCrackVector(const FloatArrayF<3> &cv) { crackVector = cv; }
126
127#ifdef keep_track_of_dissipated_energy
129 double giveStressWork() const { return stressWork; }
131 double giveTempStressWork() const { return tempStressWork; }
133 void setTempStressWork(double w) { tempStressWork = w; }
135 double giveDissWork() const { return dissWork; }
137 double giveTempDissWork() const { return tempDissWork; }
139 void setTempDissWork(double w) { tempDissWork = w; }
142#endif
143
144 const char *giveClassName() const override { return "IsotropicDamageMaterialModelStatus"; }
145
146 void initTempStatus() override;
147 void updateYourself(TimeStep *tStep) override;
148
149 void saveContext(DataStream &stream, ContextMode mode) override;
150 void restoreContext(DataStream &stream, ContextMode mode) override;
151};
152
153
161{
162protected:
164 double tempDillatCoeff = 0.;
165
167 double maxOmega = 0.999999;
168
170 int permStrain = 0;
171
181
182public:
186 virtual ~IsotropicDamageMaterial();
187
188 bool hasMaterialModeCapability(MaterialMode mode) const override;
189 const char *giveClassName() const override { return "IsotropicDamageMaterial"; }
190
193
194 FloatMatrixF<6,6> give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
195
197 const FloatArray &reducedStrain, TimeStep *tStep) const override;
198
200 {
201 FloatArray answer;
202 const_cast<IsotropicDamageMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
203 return answer;
204 }
206 {
207 FloatArray answer;
208 const_cast<IsotropicDamageMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
209 return answer;
210 }
211 FloatArray giveRealStressVector_StressControl(const FloatArray &strain, const IntArray &strainControl, GaussPoint *gp, TimeStep *tStep) const override
212 {
213 FloatArray answer;
214 const_cast<IsotropicDamageMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
215 return answer;
216 }
218 {
219 FloatArray answer;
220 const_cast<IsotropicDamageMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
221 return answer;
222 }
224 {
225 FloatArray answer;
226 const_cast<IsotropicDamageMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
227 return answer;
228 }
229
230 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
231
233 virtual double evaluatePermanentStrain(double kappa, double omega) const { return 0.; }
234
243 double give(int aProperty, GaussPoint *gp) const override;
251 virtual double computeEquivalentStrain(const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const = 0;
258 virtual void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const { OOFEM_ERROR("not implemented"); }
266 virtual double computeDamageParam(double kappa, const FloatArray &strain, GaussPoint *gp) const = 0;
267
268 void initializeFrom(InputRecord &ir) override;
269 void giveInputRecord(DynamicInputRecord &input) override;
270
271 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override { return std::make_unique<IsotropicDamageMaterialStatus>(gp); }
272
273 FloatMatrixF<1,1> give1dStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp,
274 TimeStep *tStep) const override;
275
276 void saveContext(DataStream &stream, ContextMode mode) override;
277 void restoreContext(DataStream &stream, ContextMode mode) override;
278
279protected:
286 virtual void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp) const { }
287
296 virtual double damageFunctionPrime(double kappa, GaussPoint *gp) const {
297 OOFEM_ERROR("not implemented");
298 }
299
300 FloatMatrixF<3,3> givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp,TimeStep *tStep) const override;
301 FloatMatrixF<4,4> givePlaneStrainStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
302
303};
304} // end namespace oofem
305#endif // isodamagemodel_h
GaussPoint * gp
Associated integration point.
double stressWork
Density of total work done by stresses on strain increments.
double damage
Damage level of material.
double giveStressWork() const
Returns the density of total work of stress on strain increments.
double kappa
Scalar measure of the largest strain level ever reached in material.
IsotropicDamageMaterialStatus(GaussPoint *g)
Constructor.
void restoreContext(DataStream &stream, ContextMode mode) override
double giveKappa() const
Returns the last equilibrated scalar measure of the largest strain level.
void saveContext(DataStream &stream, ContextMode mode) override
void updateYourself(TimeStep *tStep) override
double tempDissWork
Non-equilibrated density of dissipated work.
FloatArrayF< 3 > giveCrackVector() const
Returns crack vector stored in receiver. This is useful for plotting cracks as a vector field (paravi...
void computeWork(GaussPoint *gp)
Computes the increment of total stress work and of dissipated work.
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
double giveTempDissWork() const
Returns the density of temp dissipated work.
double giveLe() const
Returns characteristic length stored in receiver.
double giveTempStressWork() const
Returns the temp density of total work of stress on strain increments.
double giveTempKappa() const
Returns the temp. scalar measure of the largest strain level.
const char * giveClassName() const override
double giveDamage() const
Returns the last equilibrated damage level.
double giveTempDamage() const
Returns the temp. damage level.
FloatArrayF< 3 > crackVector
Crack orientation normalized to damage magnitude. This is useful for plotting cracks as a vector fiel...
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
double giveCrackAngle() const
Returns crack angle stored in receiver.
double tempDamage
Non-equilibrated damage level of material.
double giveDissWork() const
Returns the density of dissipated work.
double crack_angle
Angle characterizing the crack direction.
void setLe(double ls)
Sets characteristic length to given value.
void setCrackAngle(double ca)
Sets crack angle to given value.
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
double dissWork
Density of dissipated work.
void setCrackVector(const FloatArrayF< 3 > &cv)
Sets crack vector to given value. This is useful for plotting cracks as a vector field (paraview etc....
void setTempDissWork(double w)
Sets the density of dissipated work to given value.
double tempStressWork
Non-equilibrated density of total work done by stresses on strain increments.
double tempKappa
Non-equilibrated scalar measure of the largest strain level.
void setTempStressWork(double w)
Sets the density of total work of stress on strain increments to given value.
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
virtual void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp) const
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
void giveInputRecord(DynamicInputRecord &input) override
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 1 > giveRealStressVector_1d(const FloatArrayF< 1 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
double tempDillatCoeff
Coefficient of thermal dilatation.
int permStrain
Indicator of the type of permanent strain formulation (0 = standard damage with no permanent strain).
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
virtual double computeDamageParam(double kappa, const FloatArray &strain, GaussPoint *gp) const =0
FloatArrayF< 6 > giveThermalDilatationVector(GaussPoint *gp, TimeStep *tStep) const override
enum oofem::IsotropicDamageMaterial::loaUnloCriterium llcriteria
virtual double evaluatePermanentStrain(double kappa, double omega) const
bool hasMaterialModeCapability(MaterialMode mode) const override
double give(int aProperty, GaussPoint *gp) const override
void initializeFrom(InputRecord &ir) override
virtual ~IsotropicDamageMaterial()
Destructor.
virtual double computeEquivalentStrain(const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const =0
FloatArray giveRealStressVector_StressControl(const FloatArray &strain, const IntArray &strainControl, GaussPoint *gp, TimeStep *tStep) const override
Iteratively calls giveRealStressVector_3d to find the stress controlled equal to zero·
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
virtual void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
virtual double damageFunctionPrime(double kappa, GaussPoint *gp) const
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
IsotropicDamageMaterial(int n, Domain *d)
Constructor.
void saveContext(DataStream &stream, ContextMode mode) override
LinearElasticMaterial * giveLinearElasticMaterial() const
Returns reference to undamaged (bulk) material.
void restoreContext(DataStream &stream, ContextMode mode) override
const char * giveClassName() const override
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)
#define OOFEM_ERROR(...)
Definition error.h:79
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