OOFEM 3.0
Loading...
Searching...
No Matches
druckerPragerPlasticitySM.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 druckerpragerplasticitysm_h
36#define druckerpragerplasticitysm_h
37
38#include "floatarray.h"
39#include "floatmatrix.h"
40
44
46
47#define _IFT_DruckerPragerPlasticitySM_Name "druckerprager"
48#define _IFT_DruckerPragerPlasticitySM_iys "iys"
49#define _IFT_DruckerPragerPlasticitySM_alpha "alpha"
50#define _IFT_DruckerPragerPlasticitySM_alphapsi "alphapsi"
51#define _IFT_DruckerPragerPlasticitySM_ht "ht"
52#define _IFT_DruckerPragerPlasticitySM_hm "hm"
53#define _IFT_DruckerPragerPlasticitySM_kc "kc"
54#define _IFT_DruckerPragerPlasticitySM_lys "lys"
55#define _IFT_DruckerPragerPlasticitySM_yieldtol "yieldtol"
56#define _IFT_DruckerPragerPlasticitySM_newtoniter "newtoniter"
58
59namespace oofem {
66{
67public:
70
71protected:
75
79
81 double kappa = 0.;
82 double tempKappa = 0.;
83
85 int state_flag = DruckerPragerPlasticitySMStatus :: DP_Elastic;
86 int temp_state_flag = DruckerPragerPlasticitySMStatus :: DP_Elastic;
87
88public:
91
92 void initTempStatus() override;
93 void updateYourself(TimeStep *tStep) override;
94 void printOutputAt(FILE *file, TimeStep *tStep) const override;
95
96 void saveContext(DataStream &stream, ContextMode mode) override;
97 void restoreContext(DataStream &stream, ContextMode mode) override;
98
99 const char *giveClassName() const override { return "DruckerPragerPlasticitySMStatus"; }
100
106 {
107 auto plasticStrain = plasticStrainDeviator;
108 plasticStrain[0] += volumetricPlasticStrain;
109 plasticStrain[1] += volumetricPlasticStrain;
110 plasticStrain[2] += volumetricPlasticStrain;
111 return plasticStrain;
112 }
113
127 double giveKappa() const { return kappa; }
132 int giveStateFlag() const { return state_flag; }
133
139 {
140 auto plasticStrain = tempPlasticStrainDeviator;
141 plasticStrain[0] += tempVolumetricPlasticStrain;
142 plasticStrain[1] += tempVolumetricPlasticStrain;
143 plasticStrain[2] += tempVolumetricPlasticStrain;
144 return plasticStrain;
145 }
146
160 double giveTempKappa() const { return tempKappa; }
165 int giveTempStateFlag() const { return temp_state_flag; }
166
181 void letTempKappaBe(double v) { tempKappa = v; }
187};
188
194{
195public:
198
199protected:
207 double kappaC = 0.;
209 double hardeningModulus = 0.;
211 double limitYieldStress = 0.;
215 double alpha = 0.;
217 double alphaPsi = 0.;
219 double kFactor = 0.;
220
223
225 double yieldTol = 0.;
227 int newtonIter = 0;
228
229public:
232
233 void initializeFrom(InputRecord &ir) override;
234
235 const char *giveClassName() const override { return "DruckerPragerPlasticitySM"; }
236 const char *giveInputRecordName() const override { return _IFT_DruckerPragerPlasticitySM_Name; }
237
239 TimeStep *tStep) const override;
240
241 FloatMatrixF<6,6> give3dMaterialStiffnessMatrix(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override;
242
249 void performLocalStressReturn(GaussPoint *gp, const FloatArrayF<6> &strain) const;
257 bool checkForVertexCase(double eM, double gM, double kM, double trialStressJTwo, double volumetricStress, double tempKappa) const;
264 void performRegularReturn(double eM, double gM, double kM, double trialStressJTwo, FloatArrayF<6> &stressDeviator, double &volumetricStress, double &tempKappa) const;
271 void performVertexReturn(double eM, double gM, double kM, double trialStressJTwo, FloatArrayF<6> &stressDeviator, double &volumetricStress, double &tempKappa, double volumetricElasticTrialStrain, double kappa) const;
280 double computeYieldValue(double meanStress,
281 double JTwo,
282 double kappa,
283 double eM) const;
290 virtual double computeYieldStressInShear(double kappa, double eM) const;
291
298 virtual double computeYieldStressPrime(double kappa, double eM) const;
299
307 FloatMatrixF<6,6> giveRegAlgorithmicStiffMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const;
315 FloatMatrixF<6,6> giveVertexAlgorithmicStiffMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const;
316
317 int giveIPValue(FloatArray &answer,
318 GaussPoint *gp,
320 TimeStep *tStep) override;
321
322 bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override { return false; }
323
325 {
326 return LEMaterial.giveThermalDilatationVector(gp, tStep);
327 }
328
329 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override;
330
331 double predictRelativeComputationalCost(GaussPoint *gp) override;
332 double predictRelativeRedistributionCost(GaussPoint *gp) override { return 1.0; }
333};
334} // end namespace oofem
335#endif // druckerpragerplasticitysm_h
void restoreContext(DataStream &stream, ContextMode mode) override
state_flag_values
Values of history variable state_flag.
DruckerPragerPlasticitySMStatus(GaussPoint *gp)
Constructor.
const FloatArrayF< 6 > & giveTempPlasticStrainDeviator() const
double volumetricPlasticStrain
Volumetric plastic strain.
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
void saveContext(DataStream &stream, ContextMode mode) override
int state_flag
Indicates the state (i.e. elastic, yielding, vertex, unloading) of the Gauss point.
void updateYourself(TimeStep *tStep) override
const FloatArrayF< 6 > & givePlasticStrainDeviator() const
void letTempPlasticStrainDeviatorBe(const FloatArrayF< 6 > &v)
FloatArrayF< 6 > plasticStrainDeviator
Deviatoric of plastic strain.
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
const char * giveClassName() const override
DruckerPragerPlasticitySM(int n, Domain *d)
Constructor.
double initialYieldStress
Parameter of all three laws, this is the initial value of the yield stress in pure shear.
void initializeFrom(InputRecord &ir) override
double computeYieldValue(double meanStress, double JTwo, double kappa, double eM) const
int newtonIter
Maximum number of iterations for stress return.
void performVertexReturn(double eM, double gM, double kM, double trialStressJTwo, FloatArrayF< 6 > &stressDeviator, double &volumetricStress, double &tempKappa, double volumetricElasticTrialStrain, double kappa) const
double kFactor
Scalar factor between rate of plastic multiplier and rate of hardening variable.
FloatArrayF< 6 > giveThermalDilatationVector(GaussPoint *gp, TimeStep *tStep) const override
virtual double computeYieldStressPrime(double kappa, double eM) const
FloatMatrixF< 6, 6 > giveVertexAlgorithmicStiffMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override
double limitYieldStress
Parameter of the exponential hardening law.
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
double predictRelativeComputationalCost(GaussPoint *gp) override
double hardeningModulus
Hardening modulus normalized with the elastic modulus, parameter of the linear hardening/softening la...
bool checkForVertexCase(double eM, double gM, double kM, double trialStressJTwo, double volumetricStress, double tempKappa) const
FloatMatrixF< 6, 6 > giveRegAlgorithmicStiffMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
double alpha
Friction coefficient, parameter of the yield criterion.
state_flag_values
Values of history variable state_flag.
double alphaPsi
Dilatancy coefficient, parameter of the flow rule.
double predictRelativeRedistributionCost(GaussPoint *gp) override
void performLocalStressReturn(GaussPoint *gp, const FloatArrayF< 6 > &strain) const
double kappaC
Parameter of the exponential laws.
const char * giveInputRecordName() const override
void performRegularReturn(double eM, double gM, double kM, double trialStressJTwo, FloatArrayF< 6 > &stressDeviator, double &volumetricStress, double &tempKappa) const
IsotropicLinearElasticMaterial LEMaterial
Associated linear elastic material.
virtual double computeYieldStressInShear(double kappa, double eM) const
GaussPoint * gp
Associated integration point.
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)
#define _IFT_DruckerPragerPlasticitySM_Name
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