OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
j2mat.C
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 - 2013 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 #include "j2mat.h"
37 #include "gausspoint.h"
38 #include "floatmatrix.h"
39 #include "floatarray.h"
40 #include "intarray.h"
41 #include "mathfem.h"
42 #include "classfactory.h"
43 
44 namespace oofem {
45 REGISTER_Material(J2Mat);
46 
48 {
49  //
50  // constructor
51  //
54  this->nsurf = 1;
55 }
56 
58 { }
59 
62 {
63  IRResultType result; // Required by IR_GIVE_FIELD macro
64  double value;
65 
67  if ( result != IRRT_OK ) return result;
68 
70  if ( result != IRRT_OK ) return result;
71 
72  IR_GIVE_FIELD(ir, value, _IFT_J2Mat_ry);
73  k = value / sqrt(3.0);
74 
75  kinematicModuli = 0.0;
77 
78  isotropicModuli = 0.0;
80 
81  if ( fabs(kinematicModuli) > 1.e-12 ) {
83  }
84 
85  if ( fabs(isotropicModuli) > 1.e-12 ) {
87  }
88 
89  int rma = 0;
91  if ( rma == 0 ) {
92  this->rmType = mpm_ClosestPoint;
93  } else {
94  this->rmType = mpm_CuttingPlane;
95  }
96 
97 
98  return IRRT_OK;
99 }
100 
101 
104 {
105  return new MPlasticMaterial2Status(1, this->giveDomain(), gp, this->giveSizeOfReducedHardeningVarsVector(gp));
106 }
107 
108 int
110 {
111  /* Returns the size of hardening variables vector */
112  int size = 0;
113 
114  if ( kinematicHardeningFlag ) {
115  size += 6; /* size of full stress vector */
116  }
117 
118  if ( isotropicHardeningFlag ) {
119  size += 1; /* scalar value */
120  }
121 
122  return size;
123 }
124 
125 int
127 {
128  /* Returns the size of hardening variables vector */
129  int size = 0;
130 
131  if ( kinematicHardeningFlag ) {
133  }
134 
135  if ( isotropicHardeningFlag ) {
136  size += 1; /* scalar value */
137  }
138 
139  return size;
140 }
141 
142 
143 double
144 J2Mat :: computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector,
145  const FloatArray &strainSpaceHardeningVars)
146 {
147  double f;
148  FloatArray helpVector, backStress;
149 
150  if ( this->kinematicHardeningFlag ) {
151  if ( stressVector.isNotEmpty() ) {
152  helpVector = stressVector;
153  this->giveStressBackVector(backStress, gp, strainSpaceHardeningVars);
154  helpVector.add(backStress);
155  } else {
156  return -k;
157  }
158  } else {
159  helpVector = stressVector;
160  }
161 
162  f = sqrt( this->computeJ2InvariantAt(helpVector) );
163  return f + sqrt(1. / 3.) * this->giveIsotropicHardeningVar(gp, strainSpaceHardeningVars) - this->k;
164 }
165 
166 
167 void
168 J2Mat :: computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector,
169  const FloatArray &strainSpaceHardeningVars)
170 {
171  /* stress gradient of yield function in full stress - strain space */
172 
173  double f, ax, ay, az, sx, sy, sz;
174  FloatArray helpVector, backStress;
175 
176  answer.resize(6);
177  answer.zero();
178  if ( this->kinematicHardeningFlag ) {
179  if ( stressVector.isNotEmpty() ) {
180  this->giveStressBackVector(backStress, gp, strainSpaceHardeningVars);
181  helpVector = stressVector;
182  helpVector.add(backStress);
183  } else {
184  return;
185  }
186  } else {
187  helpVector = stressVector;
188  }
189 
190  f = sqrt( this->computeJ2InvariantAt(helpVector) );
191  // check for yield value zero value
192  if ( fabs(f) < 1.e-6 ) {
193  return;
194  }
195 
196  ax = helpVector.at(1);
197  ay = helpVector.at(2);
198  az = helpVector.at(3);
199 
200  sx = ( 2. / 3. ) * ax - ( 1. / 3. ) * ay - ( 1. / 3. ) * az;
201  sy = ( 2. / 3. ) * ay - ( 1. / 3. ) * ax - ( 1. / 3. ) * az;
202  sz = ( 2. / 3. ) * az - ( 1. / 3. ) * ay - ( 1. / 3. ) * ax;
203 
204  answer.at(1) = 0.5 * sx / f;
205  answer.at(2) = 0.5 * sy / f;
206  answer.at(3) = 0.5 * sz / f;
207  answer.at(4) = helpVector.at(4) / f;
208  answer.at(5) = helpVector.at(5) / f;
209  answer.at(6) = helpVector.at(6) / f;
210 }
211 
212 
213 void
215  const FloatArray &stress, const FloatArray &dlambda,
216  const FloatArray &dplasticStrain, const IntArray &activeConditionMap)
217 {
218  int size = this->giveSizeOfReducedHardeningVarsVector(gp);
219  answer.resize(size);
220 
221  if ( this->kinematicHardeningFlag ) {
222  int sizer = dplasticStrain.giveSize();
223  double coeff = sqrt(2.) * ( 2. / 3. );
224  for ( int i = 1; i <= sizer; i++ ) {
225  answer.at(i) = dplasticStrain.at(i) * coeff;
226  }
227  }
228 
229  if ( isotropicHardeningFlag ) {
230  answer.at(size) = sqrt(1. / 3.) * dlambda.at(1);
231  }
232 }
233 
234 
235 void
236 J2Mat :: computeKGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, FloatArray &fullStressVector,
237  const FloatArray &strainSpaceHardeningVariables)
238 {
239  int kcount = 0, size = this->giveSizeOfReducedHardeningVarsVector(gp);
240  FloatArray reducedKinematicGrad;
241 
242  if ( !hasHardening() ) {
243  answer.clear();
244  return;
245  }
246 
247  answer.resize(size);
248 
249  /* kinematic hardening variables first */
250  if ( this->kinematicHardeningFlag ) {
251  this->computeReducedStressGradientVector(reducedKinematicGrad, ftype, isurf, gp, fullStressVector, strainSpaceHardeningVariables);
252  kcount = reducedKinematicGrad.giveSize();
253  for ( int i = 1; i <= kcount; i++ ) {
254  answer.at(i) = ( -1.0 ) * this->kinematicModuli * reducedKinematicGrad.at(i);
255  }
256  }
257 
258  if ( this->isotropicHardeningFlag ) {
259  answer.at(size) = ( -1.0 ) * this->isotropicModuli;
260  }
261 }
262 
263 void
265  const FloatArray &fullStressVector,
266  const FloatArray &strainSpaceHardeningVars,
267  const FloatArray &gamma)
268 {
270  answer.resize(giveSizeOfReducedHardeningVarsVector(gp), rsize);
271  answer.zero();
272 
273  if ( this->kinematicHardeningFlag ) {
274  double coeff = sqrt(2.) * ( 2. / 3. ) * gamma.at(1);
275  FloatMatrix h;
276 
277  this->computeReducedSSGradientMatrix(h, 1, gp, fullStressVector, strainSpaceHardeningVars);
278  for ( int i = 1; i <= rsize; i++ ) {
279  for ( int j = 1; j <= rsize; j++ ) {
280  answer.at(i, j) = coeff * h.at(i, j);
281  }
282  }
283  }
284 }
285 
286 void
288  const IntArray &activeConditionMap,
289  const FloatArray &fullStressVector,
290  const FloatArray &strainSpaceHardeningVars,
291  const FloatArray &gamma)
292 {
293  int size = this->giveSizeOfReducedHardeningVarsVector(gp);
294  answer.resize(size, 1);
295 
296  if ( this->kinematicHardeningFlag ) {
297  int rsize;
298  FloatArray loadGradSigVec;
299  this->computeReducedStressGradientVector(loadGradSigVec, loadFunction, 1, gp, fullStressVector,
300  strainSpaceHardeningVars);
301  rsize = loadGradSigVec.giveSize();
302  for ( int i = 1; i <= rsize; i++ ) {
303  answer.at(i, 1) = loadGradSigVec.at(i);
304  }
305 
306  answer.times( sqrt(2.) * ( 2. / 3. ) );
307  }
308 
309  if ( isotropicHardeningFlag ) {
310  answer.at(size, 1) = sqrt(1. / 3.);
311  }
312 }
313 
314 
315 void
316 J2Mat :: computeReducedSSGradientMatrix(FloatMatrix &gradientMatrix, int isurf, GaussPoint *gp, const FloatArray &fullStressVector,
317  const FloatArray &strainSpaceHardeningVars)
318 {
319  int size;
320  int imask, jmask;
321  FloatArray helpVector, backStress, df(6);
322  IntArray mask;
323  double f, f32, f12, ax, ay, az;
324 
327 
328  gradientMatrix.resize(size, size);
329  gradientMatrix.zero();
330 
331 
332  if ( fullStressVector.giveSize() != 0 ) {
333  /* kinematic hardening variables first */
334  if ( this->kinematicHardeningFlag ) {
335  this->giveStressBackVector(backStress, gp, strainSpaceHardeningVars);
336  helpVector = fullStressVector;
337  helpVector.add(backStress);
338  } else {
339  helpVector = fullStressVector;
340  }
341 
342  f = this->computeJ2InvariantAt(helpVector);
343  f12 = sqrt(f);
344  f32 = pow(f, 3. / 2.);
345 
346  ax = helpVector.at(1);
347  ay = helpVector.at(2);
348  az = helpVector.at(3);
349 
350  df.at(1) = ( 2. / 3. ) * ax - ( 1. / 3. ) * ay - ( 1. / 3. ) * az;
351  df.at(2) = ( 2. / 3. ) * ay - ( 1. / 3. ) * ax - ( 1. / 3. ) * az;
352  df.at(3) = ( 2. / 3. ) * az - ( 1. / 3. ) * ay - ( 1. / 3. ) * ax;
353  df.at(4) = 2. * helpVector.at(4);
354  df.at(5) = 2. * helpVector.at(5);
355  df.at(6) = 2. * helpVector.at(6);
356 
357  for ( int i = 1; i <= 3; i++ ) {
358  if ( ( imask = mask.at(i) ) == 0 ) {
359  continue;
360  }
361 
362  for ( int j = i; j <= 3; j++ ) {
363  if ( ( jmask = mask.at(j) ) == 0 ) {
364  continue;
365  }
366 
367  if ( i == j ) {
368  gradientMatrix.at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j) + 0.5 * ( 1. / f12 ) * ( 4. / 6 );
369  } else {
370  gradientMatrix.at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j) + 0.5 * ( 1. / f12 ) * ( -2. / 6 );
371  gradientMatrix.at(jmask, imask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j) + 0.5 * ( 1. / f12 ) * ( -2. / 6 );
372  }
373  }
374  }
375 
376  for ( int i = 1; i <= 3; i++ ) {
377  if ( ( imask = mask.at(i) ) == 0 ) {
378  continue;
379  }
380 
381  for ( int j = 4; j <= 6; j++ ) {
382  if ( ( jmask = mask.at(j) ) == 0 ) {
383  continue;
384  }
385 
386  gradientMatrix.at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j);
387  gradientMatrix.at(jmask, imask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j);
388  }
389  }
390 
391  for ( int i = 4; i <= 6; i++ ) {
392  if ( ( imask = mask.at(i) ) == 0 ) {
393  continue;
394  }
395 
396  for ( int j = i; j <= 6; j++ ) {
397  if ( ( jmask = mask.at(j) ) == 0 ) {
398  continue;
399  }
400 
401  if ( i == j ) {
402  gradientMatrix.at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j) + 0.5 * ( 1. / f12 ) * 2.;
403  } else {
404  gradientMatrix.at(imask, jmask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j);
405  gradientMatrix.at(jmask, imask) = -( 1. / 4. ) * ( 1. / f32 ) * df.at(i) * df.at(j);
406  }
407  }
408  }
409  }
410 }
411 
412 
413 void
414 J2Mat :: computeReducedSKGradientMatrix(FloatMatrix &gradientMatrix, int i, GaussPoint *gp, const FloatArray &fullStressVector,
415  const FloatArray &strainSpaceHardeningVariables)
416 {
417  // something will be here for k1 vector
419  FloatMatrix helpMat;
421  gradientMatrix.zero();
422 
423  if ( this->kinematicHardeningFlag ) {
424  int kcount;
425  this->computeReducedSSGradientMatrix(helpMat, i, gp, fullStressVector, strainSpaceHardeningVariables);
426  helpMat.times( ( -1.0 ) * this->kinematicModuli );
427  kcount = helpMat.giveNumberOfRows();
428  for ( int ii = 1; ii <= kcount; ii++ ) {
429  for ( int j = 1; j <= kcount; j++ ) {
430  gradientMatrix.at(ii, j) = helpMat.at(ii, j);
431  }
432  }
433  }
434 }
435 
436 
437 int
439 {
440  return ( this->kinematicHardeningFlag || this->isotropicHardeningFlag );
441 }
442 
443 
444 double
446 {
447  double answer;
448  double v1, v2, v3;
449 
450  if ( stressVector.isEmpty() ) {
451  return 0.0;
452  }
453 
454  v1 = ( ( stressVector.at(1) - stressVector.at(2) ) * ( stressVector.at(1) - stressVector.at(2) ) );
455  v2 = ( ( stressVector.at(2) - stressVector.at(3) ) * ( stressVector.at(2) - stressVector.at(3) ) );
456  v3 = ( ( stressVector.at(3) - stressVector.at(1) ) * ( stressVector.at(3) - stressVector.at(1) ) );
457 
458  answer = ( 1. / 6. ) * ( v1 + v2 + v3 ) + stressVector.at(4) * stressVector.at(4) +
459  stressVector.at(5) * stressVector.at(5) + stressVector.at(6) * stressVector.at(6);
460 
461  return answer;
462 }
463 
464 
465 void
467  const FloatArray &strainSpaceHardeningVars)
468 {
469  /* returns part of hardening vector corresponding to kinematic hardening */
470  if ( this->kinematicHardeningFlag ) {
471  IntArray mask;
472  int isize;
473 
474  answer.resize(6);
476  isize = mask.giveSize();
477  //int rSize = this->giveSizeOfReducedHardeningVarsVector(gp);
478 
479  /* kinematic hardening variables are first */
480  for ( int i = 1; i <= isize; i++ ) {
481  answer.at( mask.at(i) ) = ( -1.0 ) * this->kinematicModuli * strainSpaceHardeningVars.at(i);
482  }
483  } else {
484  answer.clear();
485  return;
486  }
487 }
488 
489 
490 double
491 J2Mat :: giveIsotropicHardeningVar(GaussPoint *gp, const FloatArray &strainSpaceHardeningVars)
492 {
493  /* returns value in hardening vector corresponding to isotropic hardening */
494  if ( !isotropicHardeningFlag ) {
495  return 0.;
496  } else {
497  int rSize = this->giveSizeOfReducedHardeningVarsVector(gp);
498 
499  return ( -1.0 ) * this->isotropicModuli * strainSpaceHardeningVars.at(rSize);
500  }
501 }
502 } // end namespace oofem
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition: gausspoint.h:191
static int giveVoigtSymVectorMask(IntArray &answer, MaterialMode mmode)
The same as giveVoigtVectorMask but returns a mask corresponding to a symmetric second order tensor...
Class and object Domain.
Definition: domain.h:115
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: j2mat.C:61
virtual void computeReducedHardeningVarsSigmaGradient(FloatMatrix &answer, GaussPoint *gp, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVars, const FloatArray &gamma)
Computes derivative of vector with respect to stress.
Definition: j2mat.C:264
int nsurf
Number of yield surfaces.
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
void computeReducedStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &strainSpaceHardeningVariables)
int kinematicHardeningFlag
Definition: j2mat.h:60
void clear()
Clears receiver (zero size).
Definition: floatarray.h:206
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
double isotropicModuli
Definition: j2mat.h:61
#define _IFT_J2Mat_ry
Definition: j2mat.h:43
This class implements associated Material Status to MPlasticMaterial.
Class implementing an array of integers.
Definition: intarray.h:61
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
functType
Type that allows to distinguish between yield function and loading function.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void computeReducedSSGradientMatrix(FloatMatrix &gradientMatrix, int i, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
Computes second derivative of loading function with respect to stress.
Definition: j2mat.C:316
This class implements an isotropic linear elastic material in a finite element problem.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
Definition: j2mat.C:103
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
double giveIsotropicHardeningVar(GaussPoint *gp, const FloatArray &strainSpaceHardeningVars)
Definition: j2mat.C:491
enum oofem::MPlasticMaterial2::ReturnMappingAlgoType rmType
bool isEmpty() const
Returns true if receiver is empty.
Definition: floatarray.h:222
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
static double computeJ2InvariantAt(const FloatArray &stressVector)
Definition: j2mat.C:445
virtual void computeKGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
Computes the derivative of yield/loading function with respect to vector.
Definition: j2mat.C:236
double k
Definition: j2mat.h:62
Abstract base class representing a material status information.
Definition: matstatus.h:84
virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *gp) const
Definition: j2mat.C:126
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
virtual double computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector, const FloatArray &strainSpaceHardeningVars)
Computes the value of yield function.
Definition: j2mat.C:144
J2Mat(int n, Domain *d)
Definition: j2mat.C:47
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
Class representing the general Input Record.
Definition: inputrecord.h:101
#define _IFT_J2Mat_ihm
Definition: j2mat.h:45
#define _IFT_J2Mat_rma
Definition: j2mat.h:46
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
void giveStressBackVector(FloatArray &answer, GaussPoint *gp, const FloatArray &strainSpaceHardeningVars)
Definition: j2mat.C:466
virtual void computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &strainSpaceHardeningVars)
Computes the stress gradient of yield/loading function (df/d_sigma).
Definition: j2mat.C:168
static void giveInvertedVoigtVectorMask(IntArray &answer, MaterialMode mmode)
Gives the inverted version of giveVoigtVectorMask.
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
Domain * giveDomain() const
Definition: femcmpnn.h:100
virtual void computeReducedSKGradientMatrix(FloatMatrix &gradientMatrix, int i, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
Computes second derivative of loading function with respect to stress and hardening vars...
Definition: j2mat.C:414
double kinematicModuli
Definition: j2mat.h:61
REGISTER_Material(DummyMaterial)
int isotropicHardeningFlag
Definition: j2mat.h:60
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
int giveSize() const
Definition: intarray.h:203
virtual void computeReducedHardeningVarsLamGradient(FloatMatrix &answer, GaussPoint *gp, int actSurf, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVars, const FloatArray &gamma)
computes derivative of vector with respect to lambda vector
Definition: j2mat.C:287
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
the oofem namespace is to define a context or scope in which all oofem names are defined.
bool isNotEmpty() const
Returns true if receiver is not empty.
Definition: floatarray.h:220
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
virtual int giveSizeOfFullHardeningVarsVector()
Definition: j2mat.C:109
virtual int hasHardening()
Indicates, whether receiver model has hardening/softening behavior or behaves according to perfect pl...
Definition: j2mat.C:438
int giveNumberOfRows() const
Returns number of rows of receiver.
Definition: floatmatrix.h:156
#define _IFT_J2Mat_khm
Definition: j2mat.h:44
Class representing integration point in finite element program.
Definition: gausspoint.h:93
This class represents a base class for non-associated multisurface plasticity.
void add(const FloatArray &src)
Adds array src to receiver.
Definition: floatarray.C:156
virtual ~J2Mat()
Definition: j2mat.C:57
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
virtual void computeStrainHardeningVarsIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &stress, const FloatArray &dlambda, const FloatArray &dplasticStrain, const IntArray &activeConditionMap)
Computes the increment of strain-space hardening variables.
Definition: j2mat.C:214

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011