58 PlasticMaterial :: initializeFrom(ir);
62 k = value / sqrt(3.0);
81 PlasticMaterial :: giveInputRecord(input);
95std::unique_ptr<MaterialStatus>
103J2plasticMaterial :: ComputeStressSpaceHardeningVars(
GaussPoint *gp,
104 FloatArray *strainSpaceHardeningVariables)
const
116 StructuralMaterial :: giveVoigtSymVectorMask( mask, gp->
giveMaterialMode() );
122 for (
int i = 1; i <= isize; i++ ) {
125 answer->
at( mask.
at(i) ) = ( sqrt(2.) * 2. / 3. ) * this->
kinematicModuli * strainSpaceHardeningVariables->
at(i);
133 strainSpaceHardeningVariables->
at(rSize);
148 if ( stressVector != NULL ) {
150 helpVector = * stressVector;
151 helpVector.
add(backStress);
156 helpVector = * stressVector;
168J2plasticMaterial :: computeHardeningReducedModuli(
FloatMatrix &answer,
181 answer.
resize(size, size);
186 int ksize = StructuralMaterial :: giveSizeOfVoigtSymVector( gp->
giveMaterialMode() );
187 for (
int i = 1; i <= ksize; i++ ) {
205 double f, ax, ay, az, sx, sy, sz;
210 if ( stressVector != NULL ) {
212 helpVector = * stressVector;
213 helpVector.
add(backStress);
218 helpVector = * stressVector;
223 if ( fabs(f) < 1.e-6 ) {
227 ax = helpVector.
at(1);
228 ay = helpVector.
at(2);
229 az = helpVector.
at(3);
231 sx = ( 2. / 3. ) * ax - ( 1. / 3. ) * ay - ( 1. / 3. ) * az;
232 sy = ( 2. / 3. ) * ay - ( 1. / 3. ) * ax - ( 1. / 3. ) * az;
233 sz = ( 2. / 3. ) * az - ( 1. / 3. ) * ay - ( 1. / 3. ) * ax;
235 answer->
at(1) = 0.5 * sx / f;
236 answer->
at(2) = 0.5 * sy / f;
237 answer->
at(3) = 0.5 * sz / f;
238 answer->
at(4) = helpVector.
at(4) / f;
239 answer->
at(5) = helpVector.
at(5) / f;
240 answer->
at(6) = helpVector.
at(6) / f;
256 FloatArray *fullKinematicGradient, reducedKinematicGrad;
267 StructuralMaterial :: giveReducedSymVectorForm( reducedKinematicGrad, * fullKinematicGradient, gp->
giveMaterialMode() );
268 delete fullKinematicGradient;
270 kcount = reducedKinematicGrad.
giveSize();
274 for (
int i = 1; i <= kcount; i++ ) {
275 answer->
at(i) = reducedKinematicGrad.
at(i);
280 answer->
at(size) = sqrt(1. / 3.);
290J2plasticMaterial :: hasHardening()
const
297J2plasticMaterial :: computeReducedGradientMatrix(
FloatMatrix &answer,
300 const FloatArray &stressSpaceHardeningVars)
const
306 double f, f32, f12, ax, ay, az;
308 StructuralMaterial :: giveInvertedVoigtVectorMask( mask, gp->
giveMaterialMode() );
309 size = StructuralMaterial :: giveSizeOfVoigtSymVector( gp->
giveMaterialMode() ) +
312 answer.
resize(size, size);
316 if ( stressVector.
giveSize() != 0 ) {
320 helpVector = stressVector;
321 helpVector.
add(backStress);
323 helpVector = stressVector;
328 f32 = pow(f, 3. / 2.);
330 ax = helpVector.
at(1);
331 ay = helpVector.
at(2);
332 az = helpVector.
at(3);
334 df.
at(1) = ( 2. / 3. ) * ax - ( 1. / 3. ) * ay - ( 1. / 3. ) * az;
335 df.
at(2) = ( 2. / 3. ) * ay - ( 1. / 3. ) * ax - ( 1. / 3. ) * az;
336 df.
at(3) = ( 2. / 3. ) * az - ( 1. / 3. ) * ay - ( 1. / 3. ) * ax;
337 df.
at(4) = 2. * helpVector.
at(4);
338 df.
at(5) = 2. * helpVector.
at(5);
339 df.
at(6) = 2. * helpVector.
at(6);
341 for (
int i = 1; i <= 3; i++ ) {
342 if ( ( imask = mask.
at(i) ) == 0 ) {
346 for (
int j = i; j <= 3; j++ ) {
347 if ( ( jmask = mask.
at(j) ) == 0 ) {
352 answer.
at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j) + 0.5 * ( 1. / f12 ) * ( 4. / 6 );
354 answer.
at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j) + 0.5 * ( 1. / f12 ) * ( -2. / 6 );
355 answer.
at(jmask, imask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j) + 0.5 * ( 1. / f12 ) * ( -2. / 6 );
360 for (
int i = 1; i <= 3; i++ ) {
361 if ( ( imask = mask.
at(i) ) == 0 ) {
365 for (
int j = 4; j <= 6; j++ ) {
366 if ( ( jmask = mask.
at(j) ) == 0 ) {
370 answer.
at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j);
371 answer.
at(jmask, imask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j);
375 for (
int i = 4; i <= 6; i++ ) {
376 if ( ( imask = mask.
at(i) ) == 0 ) {
380 for (
int j = i; j <= 6; j++ ) {
381 if ( ( jmask = mask.
at(j) ) == 0 ) {
386 answer.
at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j) + 0.5 * ( 1. / f12 ) * 2.;
388 answer.
at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j);
389 answer.
at(jmask, imask) = -( 1. / 4. ) * ( 1. / f32 ) * df.
at(i) * df.
at(j);
410 reducedAnswer.
beProductOf(reducedModuli, strainIncrement);
411 StructuralMaterial :: giveFullSymVectorForm( answer, reducedAnswer, gp->
giveMaterialMode() );
426J2plasticMaterial :: computeJ2InvariantAt(
FloatArray *stressVector)
const
431 if ( stressVector == NULL ) {
435 v1 = ( ( stressVector->
at(1) - stressVector->
at(2) ) * ( stressVector->
at(1) - stressVector->
at(2) ) );
436 v2 = ( ( stressVector->
at(2) - stressVector->
at(3) ) * ( stressVector->
at(2) - stressVector->
at(3) ) );
437 v3 = ( ( stressVector->
at(3) - stressVector->
at(1) ) * ( stressVector->
at(3) - stressVector->
at(1) ) );
439 answer = ( 1. / 6. ) * ( v1 + v2 + v3 ) + stressVector->
at(4) * stressVector->
at(4) +
440 stressVector->
at(5) * stressVector->
at(5) + stressVector->
at(6) * stressVector->
at(6);
447J2plasticMaterial :: giveSizeOfFullHardeningVarsVector()
const
464J2plasticMaterial :: giveSizeOfReducedHardeningVarsVector(
GaussPoint *gp)
const
470 size += StructuralMaterial :: giveSizeOfVoigtSymVector( gp->
giveMaterialMode() );
483 const FloatArray &stressSpaceHardeningVars)
const
488 for (
int i = 1; i <= 6; i++ ) {
489 answer.
at(i) = stressSpaceHardeningVars.
at(i);
500J2plasticMaterial :: giveIsotropicHardeningVar(
FloatArray *stressSpaceHardeningVars)
const
506 return stressSpaceHardeningVars->
at(7);
508 return stressSpaceHardeningVars->
at(1);
#define REGISTER_Material(class)
Index giveSize() const
Returns the size of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void resize(Index rows, Index cols)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
double giveYoungsModulus() const
Returns Young's modulus.
double givePoissonsRatio() const
Returns Poisson's ratio.
int isotropicHardeningFlag
int hasHardening() const override
int giveSizeOfReducedHardeningVarsVector(GaussPoint *gp) const override
double computeJ2InvariantAt(FloatArray *answer) const
void giveStressBackVector(FloatArray &answer, const FloatArray &stressSpaceHardeningVars) const
int giveSizeOfFullHardeningVarsVector() const override
int kinematicHardeningFlag
FloatArray * ComputeStressGradient(GaussPoint *gp, FloatArray *stressVector, FloatArray *stressSpaceHardeningVars) const override
double giveIsotropicHardeningVar(FloatArray *stressSpaceHardeningVars) const
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
PlasticMaterial(int n, Domain *d)
#define _IFT_IsotropicLinearElasticMaterial_talpha
#define _IFT_IsotropicLinearElasticMaterial_n
#define _IFT_IsotropicLinearElasticMaterial_e
#define _IFT_J2plasticMaterial_ry
#define _IFT_J2plasticMaterial_khm
#define _IFT_J2plasticMaterial_ihm