OOFEM 3.0
Loading...
Searching...
No Matches
dustmat.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 dustmat_h
36#define dustmat_h
37
38#include "floatarray.h"
39#include "floatmatrix.h"
43
45
46#define _IFT_DustMaterial_Name "dustmat"
47#define _IFT_DustMaterial_alpha "alpha"
48#define _IFT_DustMaterial_beta "beta"
49#define _IFT_DustMaterial_lambda "lambda"
50#define _IFT_DustMaterial_theta "theta"
51#define _IFT_DustMaterial_ft "ft"
52#define _IFT_DustMaterial_hardeningType "hardeningtype"
53#define _IFT_DustMaterial_mStiff "mstiff"
54#define _IFT_DustMaterial_rEll "rell"
55#define _IFT_DustMaterial_x0 "x0"
56#define _IFT_DustMaterial_newtonTol "newtontol"
57#define _IFT_DustMaterial_newtonIter "newtoniter"
58#define _IFT_DustMaterial_wHard "whard"
59#define _IFT_DustMaterial_dHard "dhard"
61
62namespace oofem {
69{
70public:
79
80protected:
84
86 double q = 0;
87 double tempQ = 0;
88
90 double bulkModulus = 0;
92 double shearModulus = 0;
94 double youngsModulus = 0;
95
97 int stateFlag = 0;
99
100public:
102 DustMaterialStatus(GaussPoint * gp, double q0);
103
104 void initTempStatus() override;
105 void updateYourself(TimeStep *tStep) override;
106 void printOutputAt(FILE *file, TimeStep *tStep) const override;
107
108 void saveContext(DataStream &stream, ContextMode mode) override;
109 void restoreContext(DataStream &stream, ContextMode mode) override;
110
111 const char *giveClassName() const override { return "DustMaterialStatus"; }
112
122 double giveVolumetricPlasticStrain() const { return ( plasticStrain.at(1) + plasticStrain.at(2) + plasticStrain.at(3) ) / 3.0; }
127 double giveQ() const { return q; }
132 int giveStateFlag() const { return stateFlag; }
133
143 double giveTempQ() const { return tempQ; }
148 int giveTempStateFlag() const { return tempStateFlag; }
149
159 void letTempQBe(double v) { tempQ = v; }
165
175 void letQBe(double v) { q = v; }
176
181 void setBulkModulus(double v) { bulkModulus = v; }
186 void setShearModulus(double v) { shearModulus = v; }
191 void setYoungsModulus(double v) { youngsModulus = v; }
196 double giveBulkModulus() const { return bulkModulus; }
201 double giveShearModulus() const { return shearModulus; }
206 double giveYoungsModulus() const { return youngsModulus; }
207};
208
231{
232protected:
235
237 double alpha = 0.;
239 double beta = 0.;
241 double lambda = 0.;
243 double theta = 0.;
245 double ft = 0.;
247 double rEll = 0.;
251 double mStiff = 0.;
253 double x0 = 0.;
255 double q0 = 0.;
257 double wHard = 0.;
259 double dHard = 0.;
261 double newtonTol = 0.;
263 int newtonIter = 0;
264
270 double functionFe(double i1) const;
276 double functionFeDI1(double i1) const;
282 double functionFeDI1DI1(double i1) const;
290 double functionFc(double rho, double i1, double q) const;
296 double functionX(double q) const;
302 double functionXDQ(double q) const;
309 double yieldFunction1(double rho, double i1) const;
317 double yieldFunction2(double rho, double i1, double q) const;
323 double yieldFunction3(double i1) const;
328 void solveQ0(double &answer) const;
335 void computeAndSetBulkAndShearModuli(double &bulkModulus, double &shearModulus, GaussPoint *gp) const;
341 void performStressReturn(GaussPoint *gp, const FloatArrayF<6> &strain) const;
350 FloatArrayF<6> computePlastStrainDirM1(const FloatArrayF<6> &stressDeviator, double rho, double i1, double q) const;
359 FloatArrayF<6> computePlastStrainDirM2(const FloatArrayF<6> &stressDeviator, double rho, double i1, double q) const;
368 FloatArrayF<6> computePlastStrainDirM3(const FloatArrayF<6> &stressDeviator, double rho, double i1, double q) const;
375 double functionH(double q, double tempQ) const;
381 double functionHDQ(double tempQ) const;
390 double functionI1(double q, double tempQ, double i1, double bulkModulus) const;
397 double functionI1DQ(double tempQ, double bulkModulus) const;
404 void performF1return(double i1, double rho, GaussPoint *gp) const;
411 void performF2return(double i1, double rho, GaussPoint *gp) const;
418 void computeQFromPlastVolEps(double &answer, double q, double deltaVolumetricPlasticStrain) const;
426 double computeDeltaGamma2(double tempQ, double q, double i1, double bulkModulus) const;
434 double computeDeltaGamma2DQ(double tempQ, double q, double i1, double bulkModulus) const;
444 double fTempR2(double tempQ, double q, double i1, double rho, double bulkModulus, double shearModulus) const;
445
446public:
448 DustMaterial(int n, Domain * d);
449
450 void initializeFrom(InputRecord &ir) override;
451
452 const char *giveClassName() const override { return "DustMaterial"; }
453 const char *giveInputRecordName() const override { return _IFT_DustMaterial_Name; }
454
455 FloatArrayF<6> giveRealStressVector_3d(const FloatArrayF<6> &strain, GaussPoint *gp, TimeStep *tStep) const override;
456
457 FloatMatrixF<6,6> give3dMaterialStiffnessMatrix(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
458
459 int setIPValue(const FloatArray &value, GaussPoint *gp, InternalStateType type) override;
460
461 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
462
463 bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override { return false; }
464
466 {
467 return LEMaterial.giveThermalDilatationVector(gp, tStep);
468 }
469
470 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override;
471
472 double giveQ0() const { return q0; }
473};
474} // end namespace oofem
475#endif // dustmat_h
void letTempQBe(double v)
Definition dustmat.h:159
double shearModulus
Current shear modulus.
Definition dustmat.h:92
double giveVolumetricPlasticStrain() const
Definition dustmat.h:122
const FloatArrayF< 6 > & giveTempPlasticStrain() const
Definition dustmat.h:138
FloatArrayF< 6 > plasticStrain
Plastic strain.
Definition dustmat.h:82
double giveTempQ() const
Definition dustmat.h:143
stateFlagValues
Values of history variable stateFlag.
Definition dustmat.h:72
void saveContext(DataStream &stream, ContextMode mode) override
Definition dustmat.C:121
void letPlasticStrainBe(const FloatArrayF< 6 > &v)
Definition dustmat.h:170
void letQBe(double v)
Definition dustmat.h:175
void letTempPlasticStrainBe(const FloatArray &v)
Definition dustmat.h:154
void restoreContext(DataStream &stream, ContextMode mode) override
Definition dustmat.C:128
const FloatArrayF< 6 > & givePlasticStrain() const
Definition dustmat.h:117
void setYoungsModulus(double v)
Definition dustmat.h:191
int giveStateFlag() const
Definition dustmat.h:132
int giveTempStateFlag() const
Definition dustmat.h:148
double q
Hardening parameter q.
Definition dustmat.h:86
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
Definition dustmat.C:84
double giveBulkModulus() const
Definition dustmat.h:196
void setShearModulus(double v)
Definition dustmat.h:186
double youngsModulus
Current Young's modulus.
Definition dustmat.h:94
void updateYourself(TimeStep *tStep) override
Definition dustmat.C:74
double bulkModulus
Current bulk modulus.
Definition dustmat.h:90
FloatArrayF< 6 > tempPlasticStrain
Definition dustmat.h:83
double giveYoungsModulus() const
Definition dustmat.h:206
void initTempStatus() override
Definition dustmat.C:64
double giveQ() const
Definition dustmat.h:127
DustMaterialStatus(GaussPoint *gp, double q0)
Constructor.
Definition dustmat.C:52
void setBulkModulus(double v)
Definition dustmat.h:181
double giveShearModulus() const
Definition dustmat.h:201
void letTempStateFlagBe(int v)
Definition dustmat.h:164
int stateFlag
Indicates the state (i.e. elastic, yielding, unloading) of the Gauss point.
Definition dustmat.h:97
const char * giveClassName() const override
Definition dustmat.h:111
void solveQ0(double &answer) const
Definition dustmat.C:582
double functionFe(double i1) const
Definition dustmat.C:528
int setIPValue(const FloatArray &value, GaussPoint *gp, InternalStateType type) override
Definition dustmat.C:479
DustMaterial(int n, Domain *d)
Constructor.
Definition dustmat.C:140
double newtonTol
Tollerance for iterative methods.
Definition dustmat.h:261
double yieldFunction2(double rho, double i1, double q) const
Definition dustmat.C:558
double x0
Parameter determining shape of yield surface (param X0 in original publication).
Definition dustmat.h:253
double functionI1DQ(double tempQ, double bulkModulus) const
Definition dustmat.C:680
double giveQ0() const
Definition dustmat.h:472
double functionX(double q) const
Definition dustmat.C:570
double computeDeltaGamma2(double tempQ, double q, double i1, double bulkModulus) const
Definition dustmat.C:686
bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override
Definition dustmat.h:463
double yieldFunction1(double rho, double i1) const
Definition dustmat.C:552
double dHard
Parameter determining hardening law (parameter D in original publication).
Definition dustmat.h:259
int hardeningType
Parameter determining hardening type.
Definition dustmat.h:249
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
Definition dustmat.C:494
double alpha
Parameter determining shape of yield surface.
Definition dustmat.h:237
FloatArrayF< 6 > computePlastStrainDirM1(const FloatArrayF< 6 > &stressDeviator, double rho, double i1, double q) const
Definition dustmat.C:619
void performStressReturn(GaussPoint *gp, const FloatArrayF< 6 > &strain) const
Definition dustmat.C:243
const char * giveInputRecordName() const override
Definition dustmat.h:453
void performF2return(double i1, double rho, GaussPoint *gp) const
Definition dustmat.C:398
double theta
Parameter determining shape of yield surface.
Definition dustmat.h:243
double q0
Parameter determining shape of yield surface.
Definition dustmat.h:255
double functionHDQ(double tempQ) const
Definition dustmat.C:660
double beta
Parameter determining shape of yield surface.
Definition dustmat.h:239
double wHard
Parameter determining hardening law (parameter W in original publication).
Definition dustmat.h:257
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
Definition dustmat.C:522
double rEll
Parameter determining shape of yield surface (param R in original publication).
Definition dustmat.h:247
double functionH(double q, double tempQ) const
Definition dustmat.C:646
double functionI1(double q, double tempQ, double i1, double bulkModulus) const
Definition dustmat.C:674
void computeQFromPlastVolEps(double &answer, double q, double deltaVolumetricPlasticStrain) const
Definition dustmat.C:436
double functionFeDI1(double i1) const
Definition dustmat.C:534
int newtonIter
Maximum number of iterations for iterative methods.
Definition dustmat.h:263
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 dustmat.C:220
double fTempR2(double tempQ, double q, double i1, double rho, double bulkModulus, double shearModulus) const
Definition dustmat.C:707
void initializeFrom(InputRecord &ir) override
Definition dustmat.C:147
double mStiff
Parameter increasing stiffness (parameter M in original publication).
Definition dustmat.h:251
IsotropicLinearElasticMaterial LEMaterial
Pointer for linear elastic material.
Definition dustmat.h:234
double lambda
Parameter determining shape of yield surface.
Definition dustmat.h:241
double computeDeltaGamma2DQ(double tempQ, double q, double i1, double bulkModulus) const
Definition dustmat.C:693
double ft
Parameter determining shape of yield surface (param T in original publication).
Definition dustmat.h:245
FloatArrayF< 6 > computePlastStrainDirM2(const FloatArrayF< 6 > &stressDeviator, double rho, double i1, double q) const
Definition dustmat.C:627
double functionXDQ(double q) const
Definition dustmat.C:576
FloatArrayF< 6 > computePlastStrainDirM3(const FloatArrayF< 6 > &stressDeviator, double rho, double i1, double q) const
Definition dustmat.C:636
double functionFc(double rho, double i1, double q) const
Definition dustmat.C:546
void computeAndSetBulkAndShearModuli(double &bulkModulus, double &shearModulus, GaussPoint *gp) const
Definition dustmat.C:601
const char * giveClassName() const override
Definition dustmat.h:452
double yieldFunction3(double i1) const
Definition dustmat.C:564
FloatArrayF< 6 > giveThermalDilatationVector(GaussPoint *gp, TimeStep *tStep) const override
Definition dustmat.h:465
void performF1return(double i1, double rho, GaussPoint *gp) const
Definition dustmat.C:354
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
Definition dustmat.C:461
double functionFeDI1DI1(double i1) const
Definition dustmat.C:540
GaussPoint * gp
Associated integration point.
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)
#define _IFT_DustMaterial_Name
Definition dustmat.h:46
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