OOFEM 3.0
Loading...
Searching...
No Matches
mplasticmaterial.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 mplasticmaterial_h
36#define mplasticmaterial_h
37
40#include "intarray.h"
41#include "floatarray.h"
42#include "floatmatrix.h"
44
45#include <vector>
46
47namespace oofem {
48class GaussPoint;
49
65{
66public:
68
69protected:
73
77
79 int state_flag = MPlasticMaterialStatus :: PM_Elastic;
80 int temp_state_flag = MPlasticMaterialStatus :: PM_Elastic;
81
86
87public:
88 MPlasticMaterialStatus(GaussPoint * g, int statusSize);
89
90 void printOutputAt(FILE *file, TimeStep *tStep) const override;
91
92 void initTempStatus() override;
93 void updateYourself(TimeStep *tStep) override;
94
95 void saveContext(DataStream &stream, ContextMode mode) override;
96 void restoreContext(DataStream &stream, ContextMode mode) override;
97
105
108
110 { plasticStrainVector = std :: move(v); }
117
118 int giveStateFlag() { return state_flag; }
121
124 const FloatArray &giveTempGamma() { return tempGamma; }
125 void setTempGamma(FloatArray v) { tempGamma = std :: move(v); }
126
127 // definition
128 const char *giveClassName() const override { return "MPlasticMaterialStatus"; }
129};
130
142{
143protected:
147 int nsurf = 0;
153
154public:
155 MPlasticMaterial(int n, Domain * d);
156 virtual ~MPlasticMaterial();
157
158 // identification and auxiliary functions
159 bool hasMaterialModeCapability(MaterialMode mode) const override;
160 const char *giveClassName() const override { return "MPlasticMaterial"; }
161
164
169 bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override { return true; }
170
171 FloatMatrixF<6,6> give3dMaterialStiffnessMatrix(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override;
172
173
175 const FloatArray &, TimeStep *tStep) const override;
176
178 {
179 FloatArray answer;
180 const_cast<MPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
181 return answer;
182 }
184 {
185 FloatArray answer;
186 const_cast<MPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
187 return answer;
188 }
190 {
191 FloatArray answer;
192 const_cast<MPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
193 return answer;
194 }
196 {
197 FloatArray answer;
198 const_cast<MPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
199 return answer;
200 }
201
202 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
203
204 // auxiliary functions
205 virtual int giveSizeOfFullHardeningVarsVector() const { return 0; }
206 virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const { return 0; }
207
208 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override;
209
210protected:
211 void closestPointReturn(FloatArray &answer, IntArray &activeConditionMap, FloatArray &gamma,
212 GaussPoint *gp,
213 const FloatArray &totalStrain, FloatArray &plasticStrainR,
214 FloatArray &strainSpaceHardeningVariables, TimeStep *tStep) const;
215
216 void cuttingPlaneReturn(FloatArray &answer, IntArray &activeConditionMap, FloatArray &gamma,
217 GaussPoint *gp,
218 const FloatArray &totalStrain, FloatArray &plasticStrainR,
219 FloatArray &strainSpaceHardeningVariables, TimeStep *tStep) const;
220
221 void computeGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &fullStressVector,
222 const FloatArray &fullStressSpaceHardeningVars) const;
223 void computeResidualVector(FloatArray &answer, GaussPoint *gp, const FloatArray &gamma,
224 const IntArray &activeConditionMap, const FloatArray &plasticStrainVectorR,
225 const FloatArray &strainSpaceHardeningVariables, std :: vector< FloatArray > &gradVec) const;
226 virtual FloatMatrix giveConsistentStiffnessMatrix(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const;
227
229 MatResponseMode mode,
230 GaussPoint *gp,
231 TimeStep *tStep) const;
232
234 GaussPoint *gp, const FloatMatrix &elasticModuliInverse,
235 const FloatMatrix &hardeningModuliInverse,
236 const FloatArray &gamma, const IntArray &activeConditionMap,
237 const FloatArray &fullStressVector,
238 const FloatArray &fullStressSpaceHardeningVars) const;
239 void computeDiagModuli(FloatMatrix &answer,
240 GaussPoint *gp, FloatMatrix &elasticModuliInverse,
241 FloatMatrix &hardeningModuliInverse) const ;
242
244 const FloatArray &strainSpaceHardeningVariables) const = 0;
245 virtual double computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector,
246 const FloatArray &stressSpaceHardeningVars) const = 0;
248 GaussPoint *gp,
249 const FloatArray &strainSpaceHardeningVariables,
250 TimeStep *tStep) const = 0;
251 virtual void computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector,
252 const FloatArray &stressSpaceHardeningVars) const = 0;
254 const FloatArray &stressVector,
255 const FloatArray &stressSpaceHardeningVars) const = 0;
256 virtual int hasHardening() const { return 0; }
257 virtual void computeReducedGradientMatrix(FloatMatrix &answer, int isurf,
258 GaussPoint *gp,
259 const FloatArray &stressVector,
260 const FloatArray &stressSpaceHardeningVars) const = 0;
261
262 virtual void computeTrialStressIncrement(FloatArray &answer, GaussPoint *gp,
263 const FloatArray &strainIncrement, TimeStep *tStep) const;
264 virtual void computeReducedElasticModuli(FloatMatrix &answer, GaussPoint *gp,
265 TimeStep *tStep) const;
266 //virtual void compute3dElasticModuli(FloatMatrix& answer, GaussPoint *gp,
267 // TimeStep *tStep) = 0;
268
269 // next functions overloaded from structural material level
270 FloatMatrixF<3,3> givePlaneStressStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override;
271 FloatMatrixF<4,4> givePlaneStrainStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override;
272 FloatMatrixF<1,1> give1dStressStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override;
273 FloatMatrixF<2,2> give2dBeamLayerStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override;
274 FloatMatrixF<5,5> givePlateLayerStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override;
275 FloatMatrixF<3,3> giveFiberStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override;
276};
277} // end namespace oofem
278#endif // mplasticmaterial_h
void restoreContext(DataStream &stream, ContextMode mode) override
const FloatArray & giveTempGamma()
void saveContext(DataStream &stream, ContextMode mode) override
MPlasticMaterialStatus(GaussPoint *g, int statusSize)
FloatArray gamma
Consistency parameter values (needed for algorithmic stiffness).
void letPlasticStrainVectorBe(FloatArray v)
void letTempStrainSpaceHardeningVarsVectorBe(FloatArray v)
void letStrainSpaceHardeningVarsVectorBe(FloatArray v)
void setTempActiveConditionMap(IntArray v)
const char * giveClassName() const override
void updateYourself(TimeStep *tStep) override
const FloatArray & givePlasticStrainVector() const
Returns the equilibrated strain vector.
const FloatArray & giveTempPlasticStrainVector() const
Returns the actual (temp) strain vector.
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
const FloatArray & givetempStrainSpaceHardeningVarsVector() const
Returns the actual (temp) hardening variable vector.
IntArray activeConditionMap
Active set of yield functions (needed for algorithmic stiffness).
const FloatArray & giveStrainSpaceHardeningVars() const
Returns the equilibrated hardening variable vector.
const IntArray & giveTempActiveConditionMap()
int state_flag
Yield function status indicator.
FloatArray strainSpaceHardeningVarsVector
Strain space hardening variables.
FloatArray plasticStrainVector
Plastic strain vector.
void letTempPlasticStrainVectorBe(FloatArray v)
virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const
bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const override
FloatArrayF< 1 > giveRealStressVector_1d(const FloatArrayF< 1 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
FloatMatrixF< 2, 2 > give2dBeamLayerStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
const char * giveClassName() const override
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
bool hasMaterialModeCapability(MaterialMode mode) const override
void cuttingPlaneReturn(FloatArray &answer, IntArray &activeConditionMap, FloatArray &gamma, GaussPoint *gp, const FloatArray &totalStrain, FloatArray &plasticStrainR, FloatArray &strainSpaceHardeningVariables, TimeStep *tStep) const
virtual void computeTrialStressIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &strainIncrement, TimeStep *tStep) const
FloatMatrixF< 3, 3 > giveFiberStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
void computeAlgorithmicModuli(FloatMatrix &answer, GaussPoint *gp, const FloatMatrix &elasticModuliInverse, const FloatMatrix &hardeningModuliInverse, const FloatArray &gamma, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &fullStressSpaceHardeningVars) const
void closestPointReturn(FloatArray &answer, IntArray &activeConditionMap, FloatArray &gamma, GaussPoint *gp, const FloatArray &totalStrain, FloatArray &plasticStrainR, FloatArray &strainSpaceHardeningVariables, TimeStep *tStep) const
virtual void computeReducedGradientMatrix(FloatMatrix &answer, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars) const =0
virtual void computeStressSpaceHardeningVars(FloatArray &answer, GaussPoint *gp, const FloatArray &strainSpaceHardeningVariables) const =0
virtual void computeReducedElasticModuli(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep) const
MPlasticMaterial(int n, Domain *d)
LinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
virtual void computeHardeningReducedModuli(FloatMatrix &answer, GaussPoint *gp, const FloatArray &strainSpaceHardeningVariables, TimeStep *tStep) const =0
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
virtual void computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars) const =0
virtual double computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars) const =0
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
functType
Type that allows to distinguish between yield function and loading function.
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
virtual void computeStressSpaceHardeningVarsReducedGradient(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars) const =0
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &, TimeStep *tStep) const override
int nsurf
Number of yield surfaces.
virtual int hasHardening() 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.
enum oofem::MPlasticMaterial::ReturnMappingAlgoType rmType
void computeGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &fullStressSpaceHardeningVars) const
ReturnMappingAlgoType
Protected type to determine the return mapping algorithm.
FloatMatrixF< 5, 5 > givePlateLayerStiffMtrx(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const override
void computeResidualVector(FloatArray &answer, GaussPoint *gp, const FloatArray &gamma, const IntArray &activeConditionMap, const FloatArray &plasticStrainVectorR, const FloatArray &strainSpaceHardeningVariables, std ::vector< FloatArray > &gradVec) const
virtual void giveElastoPlasticStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
virtual FloatMatrix giveConsistentStiffnessMatrix(MatResponseMode, GaussPoint *gp, TimeStep *tStep) const
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
enum oofem::MPlasticMaterial::plastType plType
void computeDiagModuli(FloatMatrix &answer, GaussPoint *gp, FloatMatrix &elasticModuliInverse, FloatMatrix &hardeningModuliInverse) const
virtual int giveSizeOfFullHardeningVarsVector() 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