OOFEM 3.0
Loading...
Searching...
No Matches
perfectlyplasticmaterial.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 perfectlyplasticmaterial_h
36#define perfectlyplasticmaterial_h
37
40#include "floatarray.h"
41#include "floatmatrix.h"
43
44namespace oofem {
63{
64protected:
65 FloatArray plasticStrainVector; // reduced form to save memory
69
70public:
72
73 void printOutputAt(FILE *file, TimeStep *tStep) const override;
74
75 int setTempYieldFlag(int i) { return temp_yield_flag = i; }
77 int giveYieldFlag() { return yield_flag; }
78
79 void saveContext(DataStream &stream, ContextMode mode) override;
80 void restoreContext(DataStream &stream, ContextMode mode) override;
81
82 void initTempStatus() override;
83 void updateYourself(TimeStep *tStep) override;
84
89
90 const char *giveClassName() const override { return "PerfectlyPlasticMaterialStatus"; }
91};
92
114{
115protected:
119
120public:
121
123
127
129 const FloatArray &reducedStrain, TimeStep *tStep) const override;
130
132 {
133 FloatArray answer;
134 const_cast<PerfectlyPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
135 return answer;
136 }
138 {
139 FloatArray answer;
140 const_cast<PerfectlyPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
141 return answer;
142 }
144 {
145 FloatArray answer;
146 const_cast<PerfectlyPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
147 return answer;
148 }
150 {
151 FloatArray answer;
152 const_cast<PerfectlyPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
153 return answer;
154 }
156 {
157 FloatArray answer;
158 const_cast<PerfectlyPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
159 return answer;
160 }
162 {
163 FloatArray answer;
164 const_cast<PerfectlyPlasticMaterial*>(this)->giveRealStressVector(answer, gp, strain, tStep);
165 return answer;
166 }
167
168 // can be moved to parent classes
169 virtual void updateIfFailure(GaussPoint *gp,
170 FloatArray *stressVector3d,
171 FloatArray *PlasticStrainVector3d) const { }
172
173 bool hasMaterialModeCapability(MaterialMode mode) const override;
174 const char *giveClassName() const override { return "PerfectlyPlasticMaterial"; }
175 void initializeFrom(InputRecord &ir) override;
177
178 double give(int aProperty, GaussPoint *gp) const override;
179
180 FloatMatrixF<6,6> give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
181
182 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
183 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override;
184
185protected:
186 // two functions used to initialize and updating temporary variables in
187 // gps status. These variables are used to control process, when
188 // we try to find equilibrium state
189
190 virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer,
191 MatResponseMode mode, GaussPoint *gp,
192 TimeStep *tStep) const;
194 MatResponseMode mode, GaussPoint *gp,
195 TimeStep *tStep) const ;
196
197 FloatMatrixF<3,3> givePlaneStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
198 FloatMatrixF<4,4> givePlaneStrainStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
199 FloatMatrixF<1,1> give1dStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
200 FloatMatrixF<2,2> give2dBeamLayerStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
201 FloatMatrixF<5,5> givePlateLayerStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
202
204 const FloatArray &strainIncrement, TimeStep *tStep) const;
206 GaussPoint *gp,
207 FloatArray *currentStressVector,
208 FloatArray *currentPlasticStrainVector,
209 FloatArray *strainIncrement3d,
210 TimeStep *tStep,
211 double &lambda) const;
212
214 FloatArray *stressVector3d,
215 FloatArray *plasticVector3d) const;
216 //
217 // yield(YC-like functions) and loading(LC-like functions) criteria specific section
218 //
219
220 virtual double computeYCValueAt(GaussPoint *gp, FloatArray *, FloatArray *) const { return -1.0; }
221 virtual FloatArray *GiveYCStressGradient(GaussPoint *gp, FloatArray *, FloatArray *) const { return NULL; }
222 virtual FloatArray *GiveLCStressGradient(GaussPoint *gp, FloatArray *, FloatArray *) const { return NULL; }
223 virtual FloatArray *GiveYCPlasticStrainGradient(GaussPoint *gp, FloatArray *, FloatArray *) const { return NULL; }
224 virtual FloatArray *GiveLCPlasticStrainGradient(GaussPoint *gp, FloatArray *, FloatArray *) const { return NULL; }
225 //virtual FloatArray* GiveHardeningGradient (GaussPoint *gp,FloatArray *,FloatArray *) {return NULL;}
226 virtual void updateTempYC(GaussPoint *gp, FloatArray *, FloatArray *) const { }
227 virtual void updateTempLC(GaussPoint *gp, FloatArray *, FloatArray *) const { }
228 //virtual int updateYieldStatus(GaussPoint* gp, FloatArray* strainIncrementIn3d);
229};
230} // end namespace oofem
231#endif // perfectlyplasticmaterial_h
const FloatArray & givePlasticStrainIncrementVector() const
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
void saveContext(DataStream &stream, ContextMode mode) override
const char * giveClassName() const override
void updateYourself(TimeStep *tStep) override
void restoreContext(DataStream &stream, ContextMode mode) override
const FloatArray & givePlasticStrainVector() const
virtual void updateTempYC(GaussPoint *gp, FloatArray *, FloatArray *) const
virtual void updateIfFailure(GaussPoint *gp, FloatArray *stressVector3d, FloatArray *PlasticStrainVector3d) const
FloatArray * GiveStressCorrectionBackToYieldSurface(GaussPoint *gp, FloatArray *stressVector3d, FloatArray *plasticVector3d) const
void computePlasticStiffnessAt(FloatMatrix &answer, GaussPoint *gp, FloatArray *currentStressVector, FloatArray *currentPlasticStrainVector, FloatArray *strainIncrement3d, TimeStep *tStep, double &lambda) const
void initializeFrom(InputRecord &ir) override
virtual FloatArray * GiveYCPlasticStrainGradient(GaussPoint *gp, FloatArray *, FloatArray *) const
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
LinearElasticMaterial * linearElasticMaterial
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
const char * giveClassName() const override
virtual void updateTempLC(GaussPoint *gp, FloatArray *, FloatArray *) const
bool hasMaterialModeCapability(MaterialMode mode) const override
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
FloatArrayF< 2 > giveRealStressVector_2dBeamLayer(const FloatArrayF< 2 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) 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 mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 5 > giveRealStressVector_PlateLayer(const FloatArrayF< 5 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
virtual FloatArray * GiveYCStressGradient(GaussPoint *gp, FloatArray *, FloatArray *) const
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
virtual FloatArray * GiveLCStressGradient(GaussPoint *gp, FloatArray *, FloatArray *) const
virtual double computeYCValueAt(GaussPoint *gp, FloatArray *, FloatArray *) const
virtual FloatArray * GiveLCPlasticStrainGradient(GaussPoint *gp, FloatArray *, FloatArray *) const
virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
double give(int aProperty, GaussPoint *gp) const override
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
FloatMatrixF< 5, 5 > givePlateLayerStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
LinearElasticMaterial * giveLinearElasticMaterial() const
void computeTrialStressIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &strainIncrement, TimeStep *tStep) 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