OOFEM 3.0
Loading...
Searching...
No Matches
plasticmaterial.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 plasticmaterial_h
36#define plasticmaterial_h
37
40#include "floatarray.h"
41#include "floatmatrix.h"
43#include "matstatmapperint.h"
44
45namespace oofem {
46class GaussPoint;
47
53{
54protected:
58
62
66
68 double gamma = 0., temp_gamma = 0.;
69
70public:
71 PlasticMaterialStatus(GaussPoint * g, int statusSize);
72
73 void printOutputAt(FILE *file, TimeStep *tStep) const override;
74
75 void initTempStatus() override;
76 void updateYourself(TimeStep *tStep) override;
77
78 void saveContext(DataStream &stream, ContextMode mode) override;
79 void restoreContext(DataStream &stream, ContextMode mode) override;
80
85
90
91 int giveStateFlag() const { return state_flag; }
92 int giveTempStateFlag() const { return temp_state_flag; }
93 double givePlasticConsistencyPrameter() const { return gamma; }
96
98
99 const char *giveClassName() const override { return "PlasticMaterialStatus"; }
100
102 void copyStateVariables(const MaterialStatus &iStatus) override;
103 void addStateVariables(const MaterialStatus &iStatus) override;
104};
105
117{
118protected:
121
122public:
123 PlasticMaterial(int n, Domain * d);
124 virtual ~PlasticMaterial();
125
126 // identification and auxiliary functions
127 bool hasMaterialModeCapability(MaterialMode mode) const override;
128 const char *giveClassName() const override { return "PlasticMaterial"; }
129
132
133 FloatMatrixF<6,6> give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
134
136 const FloatArray &reducedStrain, TimeStep *tStep) const override;
137
139 {
140 FloatArray answer;
141 const_cast<PlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
142 return answer;
143 }
145 {
146 FloatArray answer;
147 const_cast<PlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
148 return answer;
149 }
151 {
152 FloatArray answer;
153 const_cast<PlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
154 return answer;
155 }
157 {
158 FloatArray answer;
159 const_cast<PlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
160 return answer;
161 }
163 {
164 FloatArray answer;
165 const_cast<PlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
166 return answer;
167 }
169 {
170 FloatArray answer;
171 const_cast<PlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
172 return answer;
173 }
175 {
176 FloatArray answer;
177 const_cast<PlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
178 return answer;
179 }
180
181
182 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
183
184 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override;
185
186protected:
187 // add here some auxiliary functions if needed
189 FloatArray *fullStressSpaceHardeningVars) const;
191 FloatArray *plasticStrainVectorR,
192 FloatArray *strainSpaceHardeningVariables,
193 FloatArray *gradientVectorR) const;
194 virtual FloatMatrix giveConsistentStiffnessMatrix(MatResponseMode,
195 GaussPoint *gp,
196 TimeStep *tStep) const;
197
199 GaussPoint *gp, FloatMatrix &elasticModuliInverse,
200 FloatMatrix &hardeningModuliInverse,
201 double Gamma, const FloatArray &fullStressVector,
202 const FloatArray &fullStressSpaceHardeningVars) const;
203 void computeDiagModuli(FloatMatrix &answer,
204 GaussPoint *gp, FloatMatrix &elasticModuliInverse,
205 FloatMatrix &hardeningModuliInverse) const;
206
208 FloatArray *strainSpaceHardeningVariables) const
209 { return NULL; }
210 virtual double computeYieldValueAt(GaussPoint *gp, FloatArray *stressVector,
211 FloatArray *stressSpaceHardeningVars) const { return 0.; }
213 GaussPoint *gp,
214 FloatArray *strainSpaceHardeningVariables,
215 TimeStep *tStep) const = 0;
217 FloatArray *stressSpaceHardeningVars) const { return NULL; }
219 FloatArray *stressVector,
220 FloatArray *stressSpaceHardeningVars) const
221 { return NULL; }
222 virtual int hasHardening() const { return 0; }
224 GaussPoint *gp,
225 const FloatArray &stressVector,
226 const FloatArray &stressSpaceHardeningVars) const = 0;
227
228 virtual void computeTrialStressIncrement(FloatArray &answer, GaussPoint *gp,
229 const FloatArray &strainIncrement, TimeStep *tStep) const;
230 virtual void computeReducedElasticModuli(FloatMatrix &answer, GaussPoint *gp,
231 TimeStep *tStep) const;
233 TimeStep *tStep) const = 0;
234
235 // auxiliary functions
236 virtual int giveSizeOfFullHardeningVarsVector() const { return 0; }
237 virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const { return 0; }
238
240
241 // next functions overloaded rom structural material level
242 FloatMatrixF<3,3> givePlaneStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
243
244 FloatMatrixF<4,4> givePlaneStrainStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
245
246 FloatMatrixF<1,1> give1dStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
247
248 FloatMatrixF<2,2> give2dBeamLayerStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
249
250 FloatMatrixF<5,5> givePlateLayerStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
251
252 FloatMatrixF<3,3> giveFiberStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
253};
254} // end namespace oofem
255#endif // plasticmaterial_h
void letPlasticStrainVectorBe(FloatArray v)
void restoreContext(DataStream &stream, ContextMode mode) override
FloatArray tempStrainSpaceHardeningVarsVector
const FloatArray & giveTempPlasticStrainVector() const
const FloatArray & givePlasticStrainVector() const
PlasticMaterialStatus(GaussPoint *g, int statusSize)
int state_flag
Yield function status indicator.
void letTempPlasticStrainVectorBe(FloatArray v)
void updateYourself(TimeStep *tStep) override
FloatArray strainSpaceHardeningVarsVector
Strain space hardening variables.
void letTempPlasticConsistencyPrameterBe(double v)
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
double givePlasticConsistencyPrameter() const
void copyStateVariables(const MaterialStatus &iStatus) override
Functions for MaterialStatusMapperInterface.
const FloatArray & giveStrainSpaceHardeningVars() const
const FloatArray & givetempStrainSpaceHardeningVarsVector() const
void saveContext(DataStream &stream, ContextMode mode) override
FloatArray plasticStrainVector
Plastic strain vector (reduced form).
double giveTempPlasticConsistencyPrameter() const
void letTempStrainSpaceHardeningVarsVectorBe(FloatArray v)
void letStrainSpaceHardeningVarsVectorBe(FloatArray v)
double gamma
Plastic consistency parameter.
void addStateVariables(const MaterialStatus &iStatus) override
const char * giveClassName() const override
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
FloatArray * ComputeGradientVector(GaussPoint *gp, FloatArray *fullStressVector, FloatArray *fullStressSpaceHardeningVars) const
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
LinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
virtual int giveSizeOfFullHardeningVarsVector() const
PlasticMaterial(int n, Domain *d)
FloatArrayF< 1 > giveRealStressVector_1d(const FloatArrayF< 1 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
bool hasMaterialModeCapability(MaterialMode mode) const override
virtual void computeHardeningReducedModuli(FloatMatrix &answer, GaussPoint *gp, FloatArray *strainSpaceHardeningVariables, TimeStep *tStep) const =0
friend class PlasticMaterialStatus
virtual void computeTrialStressIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &strainIncrement, TimeStep *tStep) const
FloatArrayF< 3 > giveRealStressVector_Fiber(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
FloatMatrixF< 3, 3 > giveFiberStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void computeConsistentModuli(FloatMatrix &answer, GaussPoint *gp, FloatMatrix &elasticModuliInverse, FloatMatrix &hardeningModuliInverse, double Gamma, const FloatArray &fullStressVector, const FloatArray &fullStressSpaceHardeningVars) const
virtual int hasHardening() const
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
virtual FloatArray * ComputeStressSpaceHardeningVarsReducedGradient(GaussPoint *gp, FloatArray *stressVector, FloatArray *stressSpaceHardeningVars) const
virtual double computeYieldValueAt(GaussPoint *gp, FloatArray *stressVector, FloatArray *stressSpaceHardeningVars) const
virtual FloatArray * ComputeStressGradient(GaussPoint *gp, FloatArray *stressVector, FloatArray *stressSpaceHardeningVars) const
FloatMatrixF< 5, 5 > givePlateLayerStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void computeDiagModuli(FloatMatrix &answer, GaussPoint *gp, FloatMatrix &elasticModuliInverse, FloatMatrix &hardeningModuliInverse) 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 void computeReducedGradientMatrix(FloatMatrix &answer, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars) const =0
virtual FloatMatrix giveConsistentStiffnessMatrix(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 2 > giveRealStressVector_2dBeamLayer(const FloatArrayF< 2 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
const char * giveClassName() const override
virtual void compute3dElasticModuli(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep) const =0
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
virtual void computeReducedElasticModuli(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< 2, 2 > give2dBeamLayerStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArray * ComputeResidualVector(GaussPoint *gp, double Gamma, FloatArray *plasticStrainVectorR, FloatArray *strainSpaceHardeningVariables, FloatArray *gradientVectorR) const
FloatArrayF< 5 > giveRealStressVector_PlateLayer(const FloatArrayF< 5 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
virtual FloatArray * ComputeStressSpaceHardeningVars(GaussPoint *gp, FloatArray *strainSpaceHardeningVariables) const
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