64 return mode == _1dMat || mode == _PlaneStrain || mode == _3dMat;
168 double E = lmat->
give(
'E', gp);
170 if ( mode != TangentStiffness ) {
183 double kappa =
mParam * nlKappa + ( 1. -
mParam ) * tempKappa;
184 if ( dKappa <= 0.0 ) {
185 answer.
at(1, 1) = ( 1. - tempDamage ) * E;
192 double stress = stressVector.
at(1);
194 answer.
at(1, 1) = ( 1. - tempDamage ) * E *
H / ( E +
H );
195 if ( ( tempDamage - damage ) > 0 ) {
205 if ( mode != TangentStiffness ) {
212 double dKappa = tempKappa - kappa;
216 if ( dKappa <= 0.0 ) {
222 double sigmaY = this->
give(
's', gp, tStep) +
H * kappa;
231 double factor = -2. * sqrt(6.) *
G *
G / trialS;
232 double factor1 = factor * sigmaY / ( (
H + 3. *
G ) * trialS * trialS );
233 stiffnessCorrection.
times(factor1);
234 answer.
add(stiffnessCorrection);
236 stiffnessCorrection.
zero();
237 stiffnessCorrection.
at(1, 1) = stiffnessCorrection.
at(2, 2) = stiffnessCorrection.
at(3, 3) = 2. / 3.;
238 stiffnessCorrection.
at(1, 2) = stiffnessCorrection.
at(1, 3) = stiffnessCorrection.
at(2, 1) = -1. / 3.;
239 stiffnessCorrection.
at(2, 3) = stiffnessCorrection.
at(3, 1) = stiffnessCorrection.
at(3, 2) = -1. / 3.;
240 stiffnessCorrection.
at(4, 4) = 0.5;
241 double factor2 = factor * dKappa;
242 stiffnessCorrection.
times(factor2);
243 answer.
add(stiffnessCorrection);
245 answer.
times(1 - tempDamage);
246 if ( tempDamage > damage ) {
251 double scalar = -omegaPrime *sqrt(6.) *
G / ( 3. *
G +
H ) / trialS;
253 stiffnessCorrection.
times( scalar * ( 1. -
mParam ) );
254 answer.
add(stiffnessCorrection);
265 if ( mode != TangentStiffness ) {
271 double dKappa = tempKappa - kappa;
273 if ( dKappa > 0.0 ) {
276 double sigmaY = this->
give(
's', gp, tStep) +
H * kappa;
286 double factor = -2. * sqrt(6.) *
G *
G / trialS;
287 double factor1 = factor * sigmaY / ( (
H + 3. *
G ) * trialS * trialS );
288 stiffnessCorrection.
times(factor1);
289 answer.
add(stiffnessCorrection);
292 double factor2 = factor * dKappa;
293 stiffnessCorrection.
times(factor2);
294 answer.
add(stiffnessCorrection);
296 answer.
times(1. - tempDamage);
297 if ( tempDamage > damage ) {
302 double scalar = -omegaPrime *sqrt(6.) *
G / ( 3. *
G +
H ) / trialS;
304 stiffnessCorrection.
times( scalar * ( 1. -
mParam ) );
305 answer.
add(stiffnessCorrection);
317 double E = lmat->
give(
'E', gp);
322 double stress = effStress.
at(1);
324 double trialS =
signum(stress);
325 double factor = trialS * E / ( E +
H );
326 answer.
at(1, 1) = factor;
341 double trialS = trialStressDev.computeStressNorm();
342 answer.
at(1, 1) = trialStressDev.at(1);
343 answer.
at(1, 2) = trialStressDev.at(2);
344 answer.
at(1, 3) = trialStressDev.at(3);
345 answer.
at(1, 4) = trialStressDev.at(4);
346 double factor = sqrt(6.) *
G / ( 3. *
G +
H ) / trialS;
347 answer.
times(factor);
363 for (
int i = 1; i <= 6; i++ ) {
364 answer.
at(1, i) = trialStressDev.
at(i);
367 double factor = sqrt(6.) *
G / ( 3. *
G +
H ) / trialS;
368 answer.
times(factor);
377 double damage, tempDamage;
378 double nlKappa, kappa;
386 if ( ( tempDamage - damage ) > 0 ) {
388 answer.
at(1, 1) = tempEffStress.
at(1);
400 double damage, tempDamage;
401 double nlKappa, kappa;
410 if ( ( tempDamage - damage ) > 0 ) {
412 answer.
at(1, 1) = tempEffStress.
at(1);
413 answer.
at(2, 1) = tempEffStress.
at(2);
414 answer.
at(3, 1) = tempEffStress.
at(3);
415 answer.
at(4, 1) = tempEffStress.
at(4);
429 double damage, tempDamage;
430 double nlKappa, kappa;
437 if ( ( tempDamage - damage ) > 0 ) {
439 for (
int i = 1; i <= 6; i++ ) {
440 answer.
at(i, 1) = tempEffStress.
at(i);
471 answer1.
beScaled(1.0 - tempDamage, tempEffStress);
488 kappa =
mParam * nlCumPlastStrain + ( 1 -
mParam ) * localCumPlastStrain;
524 fprintf(file,
"status {");
525 fprintf(file,
"kappa %f, damage %f ", this->
kappa, this->
damage);
526 fprintf(file,
"}\n");
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
Gradient Mises maaterial status.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
virtual IRResultType initializeFrom(InputRecord *ir)
FloatArray plasticStrain
Plastic strain (initial).
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
void bePinvID()
Sets receiver to the inverse of scaling matrix P multiplied by the deviatoric projector ID...
This class implements an isotropic elastoplastic material with Mises yield condition, associated flow rule and linear isotropic hardening.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
GaussPoint * gp
Associated integration point.
FloatArray tempPlasticStrain
Plastic strain (final).
double H
Hardening modulus.
Specialization of a floating point array for representing a stress state.
double & at(int i)
Coefficient access function.
virtual void givePDGradMatrix_ku(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Left lower block.
void clear()
Clears receiver (zero size).
void letTempEffectiveStressBe(const FloatArray &values)
double giveCumulativePlasticStrain()
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
double computeDamage(GaussPoint *gp, TimeStep *tStep)
double giveTempCumulativePlasticStrain()
virtual void computeCumPlastStrain(double &kappa, GaussPoint *gp, TimeStep *tStep)
double nonlocalCumulatedStrain
virtual void givePDGradMatrix_kk(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Right lower block.
virtual void setNonlocalCumulatedStrain(double nonlocalCumulatedStrain)
MaterialMode
Type representing material mode of integration point.
void give1dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
MatResponseMode
Describes the character of characteristic material matrix.
This class is a abstract base class for all linear elastic material models in a finite element proble...
void givePlaneStrainKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
FloatArray trialStressD
Deviatoric trial stress - needed for tangent stiffness.
virtual void givePDGradMatrix_uu(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Left upper block.
virtual ~MisesMatGradStatus()
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
double computeStressNorm() const
Computes the norm of the stress tensor using engineering notation.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
MisesMatGrad(int n, Domain *d)
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
void beScaled(double s, const FloatArray &b)
Sets receiver to be .
FloatMatrix tempLeftCauchyGreen
Left Cauchy-Green deformation gradient (final).
const char * __MaterialModeToString(MaterialMode _value)
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
void giveInternalLength(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
const FloatArray & giveTrialStressDev()
void give1dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void givePlaneStrainGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
#define _IFT_MisesMatGrad_l
void times(double f)
Multiplies receiver by factor f.
Material interface for gradient material models.
void give3dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
static double computeStressNorm(const FloatArray &stress)
double at(int i, int j) const
Coefficient access function.
double computeDamageParamPrime(double tempKappa)
virtual double giveNonlocalCumulatedStrain()
void setTempDamage(double value)
Class representing vector of real numbers.
double kappa
Cumulative plastic strain (initial).
Implementation of matrix containing floating point numbers.
virtual double give(int aProperty, GaussPoint *gp, TimeStep *tStep)
IRResultType
Type defining the return values of InputRecord reading operations.
LinearElasticMaterial * giveLinearElasticMaterial()
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
virtual void givePDGradMatrix_uk(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Right upper block.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
const FloatArray & giveTempEffectiveStress()
void add(const FloatMatrix &a)
Adds matrix to the receiver.
virtual void givePDGradMatrix_LD(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Stress-based averaging.
void zero()
Zeroes all coefficients of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
void zero()
Zeroes all coefficient of receiver.
virtual void giveRealStressVectorGrad(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalCumulatedStrain, TimeStep *tStep)
gradient - based giveRealStressVector
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
double signum(double i)
Returns the signum of given value (i = 0 returns 0, i < 0 returns -1, i > 0 returns 1) ...
REGISTER_Material(DummyMaterial)
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
double G
Elastic shear modulus.
double tempKappa
Cumulative plastic strain (final).
void give3dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
Class representing integration point in finite element program.
#define _IFT_MisesMatGrad_m
Class representing solution step.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
FloatMatrix leftCauchyGreen
Left Cauchy-Green deformation gradient (initial).
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
MisesMatGradStatus(int n, Domain *d, GaussPoint *g)
void resize(int s)
Resizes receiver towards requested size.