OOFEM 3.0
Loading...
Searching...
No Matches
rcm2.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 rcm2_h
36#define rcm2_h
37
38#include "material.h"
42#include "intarray.h"
43
45
46#define _IFT_RCM2Material_gf "gf"
47#define _IFT_RCM2Material_ft "ft"
49
50namespace oofem {
51// material contant's keys for give()
52#define pscm_Ee 300
53#define pscm_Et 301
54#define pscm_Gf 302
55#define pscm_Beta 303
56#define pscm_G 304
57#define pscm_Ft 305
58
59// crack statuses
60#define pscm_NONE 0
61#define pscm_OPEN 1
62#define pscm_SOFTENING 2
63#define pscm_RELOADING 3
64#define pscm_UNLOADING 4
65#define pscm_CLOSED 5
66
67#define pscm_NEW_CRACK 20
68#define pscm_NEW_FULLY_OPEN_CRACK 21
69#define pscm_REOPEN_CRACK 22
70
71#define rcm_SMALL_STRAIN 1.e-7
72#define rcm2_BIGNUMBER 1.e8
73
78{
79protected:
88
90
91 // FloatArray minEffStrainsForFullyOpenCrack;
92 // FloatArray *crackStrainVector, *crackStrainIncrementVector;
93 // charLengths and minEffStrainsForFullyOpenCrack are not temp,
94 // because they are set only if a new crack is created,
95 // if a new crack is created this is recognized based on value in
96 // tempCrackStatuses->at(i), so we need not create temp version
97 // of theese variables.
98 //
102
103public:
105
106 void printOutputAt(FILE *file, TimeStep *tStep) const override;
107
114
115 const IntArray & giveCrackMap() const { return crackMap; }
116 void letCrackMapBe(IntArray map) { crackMap = std :: move(map); }
117 virtual int isCrackActive(int i) const;
118 virtual int giveNumberOfActiveCracks() const;
119 virtual int giveNumberOfTempActiveCracks() const;
121
122 //double giveMinCrackStrainsForFullyOpenCrack (int icrack) {return minEffStrainsForFullyOpenCrack.at(icrack);}
123 //void setMinCrackStrainsForFullyOpenCrack (int icrack, double val) {minEffStrainsForFullyOpenCrack.at(icrack) = val;}
124
126 void letTempCrackDirsBe(FloatMatrix a) { tempCrackDirs = std :: move(a); }
127 //const FloatArray & giveTempMaxCrackStrain() { return tempMaxCrackStrains;}
128 double giveTempMaxCrackStrain(int icrack) { return tempMaxCrackStrains.at(icrack); }
129 void setTempMaxCrackStrain(int icrack, double val) { tempMaxCrackStrains.at(icrack) = val; }
131 int giveTempCrackStatus(int icrack) const { return tempCrackStatuses.at(icrack); }
132 void setTempCrackStatus(int icrack, int val) { tempCrackStatuses.at(icrack) = val; }
133
135 double giveCrackStrain(int icrack) const { return crackStrainVector.at(icrack); }
139
140 double giveCharLength(int icrack) const {
141 if ( icrack ) {
142 return charLengths.at(icrack);
143 } else {
144 return 0.0;
145 }
146 }
147 void setCharLength(int icrack, double val) { charLengths.at(icrack) = val; }
148
149 // query for non-tem variables (usefull for postprocessing)
152 int giveAlreadyCrack() const { return this->giveNumberOfActiveCracks(); }
153
154 const char *giveClassName() const override { return "RCM2MaterialStatus"; }
155
156 void initTempStatus() override;
157 void updateYourself(TimeStep *tStep) override;
158
159 void saveContext(DataStream &stream, ContextMode mode) override;
160 void restoreContext(DataStream &stream, ContextMode mode) override;
161};
162
176{
177protected:
179 double Gf = 0., Ft = 0.;
180 //double beta = 0.;
181
182public:
183 RCM2Material(int n, Domain * d);
184
185 bool hasMaterialModeCapability(MaterialMode mode) const override;
186
187 const char *giveClassName() const override { return "RCM2Material"; }
188
189 void initializeFrom(InputRecord &ir) override;
190
191 double give(int aProperty, GaussPoint *gp) const override;
192
194
195 FloatMatrixF<6,6> give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
196
198 const FloatArray &reducedStrain, TimeStep *tStep) const override;
199
201 {
202 FloatArray answer;
203 const_cast<RCM2Material*>(this)->giveRealStressVector(answer, gp, strain, tStep);
204 return answer;
205 }
207 {
208 FloatArray answer;
209 const_cast<RCM2Material*>(this)->giveRealStressVector(answer, gp, strain, tStep);
210 return answer;
211 }
213 {
214 FloatArray answer;
215 const_cast<RCM2Material*>(this)->giveRealStressVector(answer, gp, strain, tStep);
216 return answer;
217 }
219 {
220 FloatArray answer;
221 const_cast<RCM2Material*>(this)->giveRealStressVector(answer, gp, strain, tStep);
222 return answer;
223 }
225 {
226 FloatArray answer;
227 const_cast<RCM2Material*>(this)->giveRealStressVector(answer, gp, strain, tStep);
228 return answer;
229 }
231 {
232 FloatArray answer;
233 const_cast<RCM2Material*>(this)->giveRealStressVector(answer, gp, strain, tStep);
234 return answer;
235 }
236
237 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
238
239 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override { return std::make_unique<RCM2MaterialStatus>(gp); }
240
242 { return linearElasticMaterial->giveThermalDilatationVector(gp, tStep); }
243
244protected:
245
246 virtual void checkForNewActiveCracks(IntArray &answer, GaussPoint *gp, const FloatArray &,
247 const FloatArray &, FloatArray &, const FloatArray &) const;
248 virtual void updateCrackStatus(GaussPoint *gp, const FloatArray &crackStrain) const;
249
250 virtual void checkIfClosedCracks(GaussPoint *gp, FloatArray &crackStrainVector, IntArray &) const;
251 virtual int checkSizeLimit(GaussPoint *gp, double) const { return 0; }
252 virtual double giveNormalCrackingStress(GaussPoint *gp, double eps_cr, int i) const = 0;
253 virtual double giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i) const = 0;
254 virtual double computeStrength(GaussPoint *gp, double) const = 0;
255 virtual void updateStatusForNewCrack(GaussPoint *, int, double) const;
256 virtual double giveCharacteristicElementLength(GaussPoint *gp, const FloatArray &crackPlaneNormal) const;
257 virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp,
258 double effStrain, int i) const { return 1.e20; }
259
260 virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode,
261 GaussPoint *gp,
262 TimeStep *tStep) const;
263
265 MatResponseMode rMode,
266 GaussPoint *gp,
267 TimeStep *tStep) const;
268 /*
269 * void computeTrialStressIncrement (FloatArray& answer, GaussPoint *gp,
270 * const FloatArray& strainIncrement, TimeStep* tStep);
271 */
273 MatResponseMode rMode,
274 GaussPoint *gp, TimeStep *tStep) const;
275
277 FloatArray &, FloatMatrix &, TimeStep *) const;
279 bool reduce, MatResponseMode,
280 GaussPoint *, TimeStep *tStep,
281 const FloatMatrix &) const;
282 void updateActiveCrackMap(GaussPoint *gp, const IntArray *activatedCracks = NULL) const;
283 // Give3dMaterialStiffnessMatrix should return 3d material stiffness matrix
284 // taking into account possible failure or fracture of material
285 double giveResidualStrength() { return 0.01 * this->Ft; }
286
287
288 FloatMatrixF<3,3> givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
289 FloatMatrixF<4,4> givePlaneStrainStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
290 FloatMatrixF<1,1> give1dStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
291 FloatMatrixF<2,2> give2dBeamLayerStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
292 FloatMatrixF<5,5> givePlateLayerStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
293};
294} // end namespace oofem
295#endif // rcm2_h
virtual int giveNumberOfTempActiveCracks() const
Definition rcm2.C:1066
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
Definition rcm2.C:1010
const char * giveClassName() const override
Definition rcm2.h:154
const IntArray & giveCrackMap() const
Definition rcm2.h:115
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
void initTempStatus() override
Definition rcm2.C:1085
double giveCrackStrain(int icrack) const
Definition rcm2.h:135
virtual int giveNumberOfActiveCracks() const
Definition rcm2.C:1048
FloatArray crackStrainVector
Components of crack strain vector.
Definition rcm2.h:85
const FloatArray & getPrincipalStressVector() const
Definition rcm2.h:109
FloatArray principalStress
Definition rcm2.h:100
RCM2MaterialStatus(GaussPoint *g)
Definition rcm2.C:977
void updateYourself(TimeStep *tStep) override
Definition rcm2.C:1109
int giveTempAlreadyCrack() const
Definition rcm2.h:120
const FloatArray & getPrincipalStrainVector() const
Definition rcm2.h:108
const FloatArray & giveCrackStrainVector() const
Definition rcm2.h:134
void restoreContext(DataStream &stream, ContextMode mode) override
Definition rcm2.C:1182
void saveContext(DataStream &stream, ContextMode mode) override
Definition rcm2.C:1130
void setTempCrackStatus(int icrack, int val)
Definition rcm2.h:132
FloatArray oldPrincipalStrain
Definition rcm2.h:99
double giveTempMaxCrackStrain(int icrack)
Definition rcm2.h:128
const FloatMatrix & giveCrackDirs()
Definition rcm2.h:150
FloatMatrix crackDirs
Storing direction of cracks in columwise format.
Definition rcm2.h:87
double giveCharLength(int icrack) const
Definition rcm2.h:140
FloatMatrix tempCrackDirs
Definition rcm2.h:87
void letOldCrackStrainVectorBe(FloatArray a)
Definition rcm2.h:138
void setCharLength(int icrack, double val)
Definition rcm2.h:147
FloatArray charLengths
Definition rcm2.h:89
const FloatMatrix & giveTempCrackDirs()
Definition rcm2.h:125
FloatArray maxCrackStrains
Max crack strain reached.
Definition rcm2.h:83
void letCrackStrainVectorBe(FloatArray a)
Definition rcm2.h:137
FloatArray oldCrackStrainVector
Definition rcm2.h:85
const FloatArray & giveOldCrackStrainVector()
Definition rcm2.h:136
void letTempCrackDirsBe(FloatMatrix a)
Definition rcm2.h:126
IntArray tempCrackStatuses
Definition rcm2.h:81
int giveTempCrackStatus(int icrack) const
Definition rcm2.h:131
FloatArray oldPrincipalStress
Definition rcm2.h:100
const FloatArray & givePrevPrincStrainVector() const
Definition rcm2.h:110
void letPrincipalStressVectorBe(FloatArray pv)
Definition rcm2.h:113
void letCrackMapBe(IntArray map)
Definition rcm2.h:116
virtual int isCrackActive(int i) const
Definition rcm2.C:992
int giveAlreadyCrack() const
Definition rcm2.h:152
void setTempMaxCrackStrain(int icrack, double val)
Definition rcm2.h:129
FloatArray principalStrain
Definition rcm2.h:99
const IntArray & giveCrackStatus()
Definition rcm2.h:151
FloatArray tempMaxCrackStrains
Definition rcm2.h:83
const FloatArray & givePrevPrincStressVector() const
Definition rcm2.h:111
void letPrincipalStrainVectorBe(FloatArray pv)
Definition rcm2.h:112
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
Definition rcm2.C:594
virtual double giveNormalCrackingStress(GaussPoint *gp, double eps_cr, int i) const =0
virtual double giveCharacteristicElementLength(GaussPoint *gp, const FloatArray &crackPlaneNormal) const
Definition rcm2.C:423
void giveRealPrincipalStressVector3d(FloatArray &answer, GaussPoint *, FloatArray &, FloatMatrix &, TimeStep *) const
Definition rcm2.C:150
FloatArrayF< 6 > giveThermalDilatationVector(GaussPoint *gp, TimeStep *tStep) const override
Definition rcm2.h:241
void giveCrackedStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
Definition rcm2.C:706
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
Definition rcm2.h:206
LinearElasticMaterial * linearElasticMaterial
Definition rcm2.h:178
const char * giveClassName() const override
Definition rcm2.h:187
FloatMatrixF< 2, 2 > give2dBeamLayerStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
Definition rcm2.C:938
FloatArrayF< 2 > giveRealStressVector_2dBeamLayer(const FloatArrayF< 2 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
Definition rcm2.h:224
virtual double computeStrength(GaussPoint *gp, double) const =0
FloatArrayF< 5 > giveRealStressVector_PlateLayer(const FloatArrayF< 5 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
Definition rcm2.h:230
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
Definition rcm2.h:212
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
Definition rcm2.h:239
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
Definition rcm2.C:886
RCM2Material(int n, Domain *d)
Definition rcm2.C:48
double give(int aProperty, GaussPoint *gp) const override
Definition rcm2.C:792
virtual int checkSizeLimit(GaussPoint *gp, double) const
Definition rcm2.h:251
virtual void checkIfClosedCracks(GaussPoint *gp, FloatArray &crackStrainVector, IntArray &) const
Definition rcm2.C:500
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
Definition rcm2.C:830
void updateActiveCrackMap(GaussPoint *gp, const IntArray *activatedCracks=NULL) const
Definition rcm2.C:753
virtual double giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i) const =0
virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, double effStrain, int i) const
Definition rcm2.h:257
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
Definition rcm2.C:104
LinearElasticMaterial * giveLinearElasticMaterial() const
Definition rcm2.h:193
bool hasMaterialModeCapability(MaterialMode mode) const override
Definition rcm2.C:54
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
Definition rcm2.h:200
void giveNormalElasticStiffnessMatrix(FloatMatrix &answer, bool reduce, MatResponseMode, GaussPoint *, TimeStep *tStep, const FloatMatrix &) const
Definition rcm2.C:532
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
Definition rcm2.C:922
FloatArrayF< 1 > giveRealStressVector_1d(const FloatArrayF< 1 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
Definition rcm2.h:218
double giveResidualStrength()
Definition rcm2.h:285
void initializeFrom(InputRecord &ir) override
Definition rcm2.C:783
virtual void checkForNewActiveCracks(IntArray &answer, GaussPoint *gp, const FloatArray &, const FloatArray &, FloatArray &, const FloatArray &) const
Definition rcm2.C:332
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
Definition rcm2.C:904
virtual void updateCrackStatus(GaussPoint *gp, const FloatArray &crackStrain) const
Definition rcm2.C:429
FloatMatrixF< 5, 5 > givePlateLayerStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
Definition rcm2.C:957
virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep) const
Definition rcm2.C:83
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
Definition rcm2.C:875
virtual void updateStatusForNewCrack(GaussPoint *, int, double) const
Definition rcm2.C:406
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)
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