Skip to content

Commit fb2ef97

Browse files
committed
improved hardening evolution in latticeframesteelplastic
1 parent 9d3d16f commit fb2ef97

2 files changed

Lines changed: 35 additions & 11 deletions

File tree

src/sm/Materials/LatticeMaterials/latticeframesteelplastic.C

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ namespace oofem {
8484

8585
numberOfSubIncrements = 10;
8686
IR_GIVE_OPTIONAL_FIELD(ir, this->numberOfSubIncrements, _IFT_LatticeFrameSteelPlastic_sub); // Macro
87+
88+
this->hardeningLength = 0.;
89+
IR_GIVE_OPTIONAL_FIELD(ir, this->hardeningLength, _IFT_LatticeFrameSteelPlastic_hlength); //length scale for hardening variable
90+
8791
hType = 0;
8892
IR_GIVE_OPTIONAL_FIELD(ir, this->hType, _IFT_LatticeFrameSteelPlastic_htype); //hardening type
8993

@@ -169,7 +173,7 @@ namespace oofem {
169173

170174
if ( this->hType == 0 ) {
171175
hardening = 1. + this->H * kappa;
172-
} else {
176+
} else {
173177
if ( kappa > h_eps.at(h_eps.giveSize() ) ) {
174178
OOFEM_ERROR("kappa outside range of specified hardening law/n");
175179
}
@@ -254,7 +258,8 @@ namespace oofem {
254258
m.at(2) = 2. * mx / ( pow(mx0Reduced, 2.) * pow(hardening, 2.) );
255259
m.at(3) = 2. * my / ( pow(my0Reduced, 2.) * pow(hardening, 2.) );
256260
m.at(4) = 2. * mz / ( pow(mz0Reduced, 2.) * pow(hardening, 2.) );
257-
m.at(5) = fabs(2. * nx / ( pow(nx0Reduced, 2.) * pow(hardening, 2.) ) );
261+
262+
m.at(5) = sqrt(pow(m.at(1), 2.) + pow(this->hardeningLength, 2.) * ( pow(m.at(2), 2.) + pow(m.at(3), 2.) + pow(m.at(4), 2.) ) );
258263

259264
return m;
260265
}
@@ -265,6 +270,8 @@ namespace oofem {
265270
FloatMatrixF < 5, 5 >
266271
LatticeFrameSteelPlastic::computeDMMatrix(const FloatArrayF < 4 > & stress, const double kappa, GaussPoint * gp, TimeStep * tStep) const
267272
{
273+
auto mVector = computeMVector(stress, kappa, gp, tStep);
274+
268275
FloatMatrixF < 5, 5 > dm;
269276

270277
double hardening = computeHardening(kappa);
@@ -304,21 +311,36 @@ namespace oofem {
304311
dm.at(3, 3) = 2. / ( pow(my0Reduced, 2.) * pow(hardening, 2.) );
305312
dm.at(3, 4) = 0;
306313
dm.at(3, 5) = -4. * stress.at(3) / ( pow(my0Reduced, 2.) * pow(hardening, 3.) ) * dHardeningDKappa;
307-
;
314+
308315

309316
dm.at(4, 1) = 0;
310317
dm.at(4, 2) = 0;
311318
dm.at(4, 3) = 0;
312319
dm.at(4, 4) = 2. / ( pow(mz0Reduced, 2.) * pow(hardening, 2.) );
313320
dm.at(4, 5) = -4. * stress.at(4) / ( pow(mz0Reduced, 2.) * pow(hardening, 3.) ) * dHardeningDKappa;
314-
;
315321

316-
dm.at(5, 1) = sgn(stress.at(1) ) * 2. / ( pow(nx0Reduced, 2.) * pow(hardening, 2.) );
317-
dm.at(5, 2) = 0.;
318-
dm.at(5, 3) = 0.;
319-
dm.at(5, 4) = 0.;
320-
dm.at(5, 5) = -4.0 * fabs(stress.at(1) ) / ( pow(nx0, 2) * pow(hardening, 3.) ) * dHardeningDKappa;
321322

323+
if ( this->hardeningLength == 0. ) {
324+
dm.at(5, 1) = sgn(stress.at(1) ) * dm.at(1, 1);
325+
dm.at(5, 2) = 0.0;
326+
dm.at(5, 3) = 0.0;
327+
dm.at(5, 4) = 0.0;
328+
dm.at(5, 5) = -4.0 * fabs(stress.at(1) ) / ( pow(nx0Reduced, 2.) * pow(hardening, 3.) ) * dHardeningDKappa;
329+
} else if ( fabs(mVector.at(5) ) > 1.e-14 ) {
330+
dm.at(5, 1) = mVector.at(1) * dm.at(1, 1) / mVector.at(5);
331+
dm.at(5, 2) = mVector.at(2) * dm.at(2, 2) * pow(hardeningLength, 2.) / mVector.at(5);
332+
dm.at(5, 3) = mVector.at(3) * dm.at(3, 3) * pow(hardeningLength, 2.) / mVector.at(5);
333+
dm.at(5, 4) = mVector.at(4) * dm.at(4, 4) * pow(hardeningLength, 2.) / mVector.at(5);
334+
335+
double term1 = mVector.at(1) * ( -4. * stress.at(1) / ( pow(nx0Reduced, 2.) * pow(hardening, 3.) ) ) * dHardeningDKappa;
336+
double term2 = mVector.at(2) * ( -4. * stress.at(2) / ( pow(mx0Reduced, 2.) * pow(hardening, 3.) ) ) * dHardeningDKappa;
337+
double term3 = mVector.at(3) * ( -4. * stress.at(3) / ( pow(my0Reduced, 2.) * pow(hardening, 3.) ) ) * dHardeningDKappa;
338+
double term4 = mVector.at(4) * ( -4. * stress.at(4) / ( pow(mz0Reduced, 2.) * pow(hardening, 3.) ) ) * dHardeningDKappa;
339+
340+
dm.at(5, 5) = ( term1 + pow(this->hardeningLength, 2.) * ( term2 + term3 + term4 ) ) / mVector.at(5);
341+
} else {
342+
OOFEM_ERROR("mVector.at(5) in computeDMMatrix should not be zero\n");
343+
}
322344
return dm;
323345
}
324346

@@ -563,7 +585,6 @@ namespace oofem {
563585
residuals.at(6) = computeYieldValue(tempStress, tempKappa, gp, tStep);
564586
}
565587
}
566-
567588
status->letTempReturnResultBe(LatticeFrameSteelPlastic::RR_Converged);
568589

569590
stress = tempStress;
@@ -669,7 +690,7 @@ namespace oofem {
669690
fprintf(file, "% .8e ", s);
670691
}
671692
fprintf(file, "kappa % .8e ", this->kappa);
672-
fprintf(file, "\n");
693+
fprintf(file, "\n");
673694
}
674695

675696

src/sm/Materials/LatticeMaterials/latticeframesteelplastic.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
#define _IFT_LatticeFrameSteelPlastic_sub "sub"
5858
#define _IFT_LatticeFrameSteelPlastic_plastic "plastic"
5959
#define _IFT_LatticeFrameSteelPlastic_h "h"
60+
#define _IFT_LatticeFrameSteelPlastic_hlength "hlength"
6061
#define _IFT_LatticeFrameSteelPlastic_htype "htype"
6162
#define _IFT_LatticeFrameSteelPlastic_h_eps "h_eps"
6263
#define _IFT_LatticeFrameSteelPlastic_h_function_eps "h(eps)"
@@ -146,6 +147,8 @@ class LatticeFrameSteelPlastic : public LatticeFrameElastic
146147
///maximum number Of SubIncrements
147148
double numberOfSubIncrements;
148149

150+
double hardeningLength;
151+
149152
/// type of hardening function
150153
int hType;
151154

0 commit comments

Comments
 (0)