58 RankineMat :: initializeFrom(ir);
72 int formulationType = 0;
74 if ( formulationType == 0 ) {
76 }
else if ( formulationType == 2 ) {
85RankineMatGrad :: hasMaterialModeCapability(MaterialMode mode)
const
87 return mode == _PlaneStress;
105 if ( mode == ElasticStiffness ) {
126 double overNonlocalCumulatedStrain =
mParam * nonlocalCumulatedStrain + ( 1. -
mParam ) * tempLocalCumulatedStrain;
128 gprime *= ( 1. -
mParam );
148 if ( mode != TangentStiffness ) {
161 double overNonlocalCumulatedStrain =
mParam * nonlocalCumulatedStrain + ( 1. -
mParam ) * tempCumulatedStrain;
163 answer.
at(1, 1) = tempEffStress.at(1);
164 answer.
at(2, 1) = tempEffStress.at(2);
165 answer.
at(3, 1) = tempEffStress.at(3);
185 if ( mode != TangentStiffness ) {
191 if ( dKappa <= 0. ) {
203 double Estar =
E / ( 1. -
nu *
nu );
204 double aux = Estar / ( H + Estar );
206 eta.
at(2) =
nu * aux;
211 double denom =
E * dkap1 + H * ( 1. -
nu ) * ( dkap1 + dkap2 );
212 eta.
at(1) =
E * dkap1 / denom;
213 eta.
at(2) =
E * dkap2 / denom;
228 answer.
at(1, 1) = etaglob.
at(1);
229 answer.
at(1, 2) = etaglob.
at(2);
230 answer.
at(1, 3) = etaglob.
at(3);
237 answer.
times(1. / iA);
262 if ( mode != TangentStiffness ) {
268 if ( dKappa <= 0. ) {
280 double Estar =
E / ( 1. -
nu *
nu );
281 double aux = Estar / ( H + Estar );
283 eta.
at(2) =
nu * aux;
288 double denom =
E * dkap1 + H * ( 1. -
nu ) * ( dkap1 + dkap2 );
289 eta.
at(1) =
E * dkap1 / denom;
290 eta.
at(2) =
E * dkap2 / denom;
305 answer.
at(1, 1) = etaglob.
at(1);
306 answer.
at(1, 2) = etaglob.
at(2);
307 answer.
at(1, 3) = etaglob.
at(3);
311 answer.
times(LocalCumulatedStrain - NonLocalCumulatedStrain);
314 answer.
times( 1. / ( iA * iA ) );
318 answer.
times(iAPrime * gPrime);
343 if ( mode != TangentStiffness ) {
349 if ( dKappa <= 0. ) {
361 double Estar =
E / ( 1. -
nu *
nu );
362 double aux = Estar / ( H + Estar );
364 eta.
at(2) =
nu * aux;
369 double denom =
E * dkap1 + H * ( 1. -
nu ) * ( dkap1 + dkap2 );
370 eta.
at(1) =
E * dkap1 / denom;
371 eta.
at(2) =
E * dkap2 / denom;
390 answer.
times( iBPrime * gPrime * ( 1. -
mParam ) );
416 answer.
at(1, 1) += 1. / iA;
418 if ( mode == TangentStiffness ) {
425 answer.
at(1, 1) += iAPrime / iA / iA * gPrime *
mParam * ( LocalCumulatedStrain - NonLocalCumulatedStrain );
490RankineMatGrad :: givePlaneStressStiffMtrx(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
510 double overNonlocalCumulatedStrain =
mParam * nonlocalCumulatedStrain + ( 1. -
mParam ) * tempLocalCumulatedStrain;
512 gprime *= ( 1. -
mParam );
526RankineMatGrad :: giveNonlocalInternalForces_N_factor(
double &answer,
double nlDamageDrivingVariable,
GaussPoint *gp,
TimeStep *tStep)
532 answer = NonLocalCumulatedStrain - LocalCumulatedStrain;
536 answer = answer / iA;
544 answer = nlDamageDrivingVariable_grad;
568 RankineMat :: performPlasticityReturn(gp, totalStrain);
572 answer1.
beScaled(1.0 - tempDamage, tempEffStress);
580#ifdef keep_track_of_dissipated_energy
595 double nlCumPlastStrain = status->giveNonlocalCumulatedStrain();
596 return mParam * nlCumPlastStrain + ( 1. -
mParam ) * localCumPlastStrain;
600RankineMatGrad :: giveNonlocalCumPlasticStrain(
GaussPoint *gp)
610 if ( type == IST_CumPlasticStrain_2 ) {
614 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
619 return RankineMat :: giveIPValue(answer, gp, type, tStep);
625RankineMatGrad :: computeEikonalInternalLength_a(
GaussPoint *gp)
634RankineMatGrad :: computeEikonalInternalLength_b(
GaussPoint *gp)
644RankineMatGrad :: computeEikonalInternalLength_aPrime(
GaussPoint *gp)
653RankineMatGrad :: computeEikonalInternalLength_bPrime(
GaussPoint *gp)
689RankineMatGradStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
691 StructuralMaterialStatus :: printOutputAt(file, tStep);
693 fprintf(file,
"status {");
695#ifdef keep_track_of_dissipated_energy
698 fprintf(file,
" }\n");
703RankineMatGradStatus :: initTempStatus()
706 StructuralMaterialStatus :: initTempStatus();
709 if (
gp->giveMaterialMode() == _PlaneStress ) {
710 plasticStrain.resize( StructuralMaterial :: giveSizeOfVoigtSymVector(_PlaneStress) );
711 }
else if (
gp->giveMaterialMode() == _3dMat ) {
712 plasticStrain.resize( StructuralMaterial :: giveSizeOfVoigtSymVector(_3dMat) );
728RankineMatGradStatus :: updateYourself(
TimeStep *tStep)
730 RankineMatStatus :: updateYourself(tStep);
#define REGISTER_Material(class)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beScaled(double s, const FloatArray &b)
static FloatMatrix fromArray(const FloatArray &vector, bool transpose=false)
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.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
double at(std::size_t i, std::size_t j) const
void beUnitMatrix()
Sets receiver to unity matrix.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
GradientDamageMaterialExtensionInterface(Domain *d)
virtual double giveTempLocalDamageDrivingVariable()
virtual double giveTempNonlocalDamageDrivingVariable()
const FloatArray & giveTempNonlocalDamageDrivingVariableGrad() const
GaussPoint * gp
Associated integration point.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initTempStatus(GaussPoint *gp) const
virtual double giveNonlocalCumulatedStrain()
void setKappa_hat(double kap)
void setKappa_nl(double kap)
virtual void setNonlocalCumulatedStrain(double nonlocalCumulatedStrain)
double computeEikonalInternalLength_b(GaussPoint *gp)
double computeEikonalInternalLength_bPrime(GaussPoint *gp)
double computeEikonalInternalLength_aPrime(GaussPoint *gp)
double giveNonlocalCumPlasticStrain(GaussPoint *gp)
int giveDimension(GaussPoint *gp)
LinearElasticMaterial * giveLinearElasticMaterial()
double computeCumPlastStrain(GaussPoint *gp, TimeStep *tStep) const override
GradientDamageFormulationType gradientDamageFormulationType
double computeEikonalInternalLength_a(GaussPoint *gp)
void computeWork_PlaneStress(GaussPoint *gp, double gf)
double giveTempDamage() const
FloatArray tempPlasticStrain
Plastic strain (final).
FloatArray plasticStrain
Plastic strain (initial).
double giveDamage() const
void setTempDamage(double value)
double tempKappa
Cumulative plastic strain (final).
double giveTempCumulativePlasticStrain() const
const FloatArray & giveTempEffectiveStress() const
double tempDamage
Damage (final).
double giveDKappa(int i) const
void letTempEffectiveStressBe(FloatArray values)
double stressWork
Density of total work done by stresses on strain increments.
double kappa
Cumulative plastic strain (initial).
double giveCumulativePlasticStrain() const
double damage
Damage (initial).
RankineMatStatus(GaussPoint *g)
double dissWork
Density of dissipated work.
double computeDamage(GaussPoint *gp, TimeStep *tStep) const
double computeDamageParamPrime(double tempKappa) const
double evalPlasticModulus(const double kappa) const
RankineMat(int n, Domain *d)
FloatMatrixF< 3, 3 > evaluatePlaneStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep, double gprime) const
double sig0
Initial (uniaxial) yield stress.
double nu
Poisson's ratio.
void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir) const override
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
static FloatMatrixF< 3, 3 > givePlaneStressVectorTranformationMtrx(const FloatMatrixF< 2, 2 > &base, bool transpose=false)
#define OOFEM_WARNING(...)
#define _IFT_RankineMatGrad_m
#define _IFT_RankineMatGrad_L
#define _IFT_RankineMatGrad_negligibleDamage
#define _IFT_RankineMatGrad_formulationType