55 MPSMaterialStatus(n, d, g, nunits), effectiveStressVector(), tempEffectiveStressVector()
70 #ifdef supplementary_info 120 fprintf(file,
"damage status { ");
122 fprintf(file,
"kappa %f", this->
kappa);
123 }
else if ( this->
damage > 0.0 ) {
126 fprintf(file,
"}\n");
244 return mode == _3dMat || mode == _PlaneStress || mode == _PlaneStrain || mode == _1dMat;
279 OOFEM_ERROR(
"Fracture energy at 28 days must be positive");
284 OOFEM_ERROR(
"Tensile strength at 28 days must be positive");
296 switch ( damageLaw ) {
315 OOFEM_ERROR(
"Softening type number %d is unknown", damageLaw);
343 double f, sigma1, kappa, tempKappa = 0.0, omega = 0.0;
357 #ifdef supplementary_info 370 if ( principalStress.
at(1) > 0.0 ) {
371 sigma1 = principalStress.
at(1);
374 kappa = sigma1 / this->
E;
382 #ifdef supplementary_info 383 double residualStrength = 0.;
393 residualStrength =
E * e0;
395 double gf, ef, wf = 0., Le;
400 wf = gf / this->
E / e0;
402 wf = 2. * gf / this->
E / e0;
410 residualStrength =
E * e0 * ( ef - tempKappa ) / ( ef - e0 );
412 residualStrength =
E * e0 * exp(-1. * ( tempKappa - e0 ) / ef);
414 OOFEM_ERROR(
"Unknown softening type for cohesive crack model.");
428 for (
int i = 1; i <= principalStress.
giveSize(); i++ ) {
429 crackPlaneNormal.
at(i) = principalDir.
at(i, 1);
431 this->
initDamaged(tempKappa, crackPlaneNormal, gp, tStep);
438 tempNominalStress = tempEffectiveStress;
442 tempNominalStress.
times(1. - omega);
443 answer.
add(tempNominalStress);
449 for (
int i = 1; i <= principalStress.
giveSize(); i++ ) {
450 if ( principalStress.
at(i) > 0. ) {
452 principalStress.
at(i) *= ( 1. - omega );
456 if ( mode == _PlaneStress ) {
467 if ( mode == _PlaneStress ) {
468 answer.
add(principalStress);
472 answer.
add(redFormStress);
474 answer.
add(principalStress);
478 answer.
add(tempEffectiveStress);
481 #ifdef supplementary_info 483 if ( ( omega == 0. ) || ( sigma1 <= 0 ) ) {
492 double strainWithoutTemperShrink = principalStrains.
at(1);
498 crackWidth = status->
giveCharLength() * omega * strainWithoutTemperShrink;
539 return this->
ft / this->
E;
559 double fractureEnergy, fractureEnergy28;
584 if (this->
gf28 > 0.) {
585 fractureEnergy28 = this->
gf28;
597 fractureEnergy = fractureEnergy28 * ftm / ftm28;
599 return fractureEnergy;
608 if (this->
ft28 > 0.) {
622 }
else if ( fcm <= 20. ) {
659 double e0 = this->
givee0(gp);
663 double gf = this->
givegf(gp);
668 wf = gf / this->
E / e0;
670 wf = 2. * gf / this->
E / e0;
685 minGf = this->
E * e0 * e0 * Le;
687 minGf = this->
E * e0 * e0 * Le / 2.;
692 OOFEM_WARNING(
"Material number %d, decrease e0, or increase Gf from %f to Gf=%f", this->
giveNumber(), gf, minGf);
700 omega = ( ef / kappa ) * ( kappa - e0 ) / ( ef - e0 );
714 help = omega * kappa / ef;
715 R = ( 1. - omega ) * kappa - e0 *exp(-help);
716 Lhs = kappa - e0 *exp(-help) * kappa / ef;
723 OOFEM_ERROR(
"Unknown softening type for cohesive crack model.");
727 OOFEM_ERROR(
"damage parameter is %f, which is greater than 1, snap-back problems", omega);
731 OOFEM_WARNING(
"damage parameter is %f, which is smaller than 0, snap-back problems", omega);
741 #ifdef supplementary_info 742 double residualStrength = 0.;
745 residualStrength =
E * e0;
749 residualStrength =
E * e0 * ( ef - kappa ) / ( ef - e0 );
751 residualStrength =
E * e0 * exp(-1. * ( kappa - e0 ) / ef);
753 OOFEM_ERROR(
"Unknown softening type for cohesive crack model.");
775 double e0 = this->
givee0(gp);
776 double gf = this->
givegf(gp);
784 wf = 2. * gf /
E / e0;
789 if ( ( kappa > e0 ) && ( status->
giveDamage() == 0. ) ) {
795 if ( gf != 0. && e0 >= ( wf / le ) ) {
796 OOFEM_WARNING(
"Fracturing strain %e is lower than the elastic strain e0=%e, possible snap-back. Element number %d, wf %e, le %e. Increase fracturing strain or decrease element size by at least %f", wf / le, e0, gp->
giveElement()->
giveLabel(), wf, le, e0/(wf/le) );
824 if ( mode == ElasticStiffness || ( mode == SecantStiffness && !this->
isotropic ) ) {
831 answer.
times(1.0 - tempDamage);
843 if ( mode == ElasticStiffness || ( mode == SecantStiffness && !this->
isotropic ) ) {
850 answer.
times(1.0 - tempDamage);
861 if ( mode == ElasticStiffness || ( mode == SecantStiffness && !this->
isotropic ) ) {
868 answer.
times(1.0 - tempDamage);
880 if ( mode == ElasticStiffness || ( mode == SecantStiffness && !this->
isotropic ) ) {
887 answer.
times(1.0 - tempDamage);
895 if ( type == IST_DamageScalar ) {
900 }
else if ( type == IST_DamageTensor ) {
905 }
else if ( type == IST_PrincipalDamageTensor ) {
910 }
else if ( type == IST_DamageTensorTemp ) {
915 }
else if ( type == IST_PrincipalDamageTempTensor ) {
920 }
else if ( type == IST_CharacteristicLength ) {
925 }
else if ( type == IST_CrackVector ) {
930 }
else if ( type == IST_CrackWidth ) {
935 }
else if ( type == IST_ResidualTensileStrength ) {
940 }
else if ( type == IST_TensileStrength ) {
949 }
else if ( type == IST_CrackIndex ) {
965 if (ft > 1.e-20 && principalStress.
at(1)>1.e-20){
966 answer.
at(1) = principalStress.
at(1)/
ft;
double computeEquivalentTime(GaussPoint *gp, TimeStep *tStep, int option)
Computes equivalent time at given time step and GP.
double giveDamage()
Returns the last equilibrated damage level.
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
#define _IFT_MPSDamMaterial_isotropic
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
#define _IFT_MPSDamMaterial_checkSnapBack
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
static void computePrincipalValues(FloatArray &answer, const FloatArray &s, stressStrainPrincMode mode)
Common functions for convenience.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
void letTempViscoelasticStressVectorBe(FloatArray v)
Assigns tempStressVector to given vector v.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
static void givePlaneStressVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 2d stress vector transformation matrix from standard vector transformation matrix...
void setCharLength(double length)
Sets characteristic length to given value.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
virtual bool isActivated(TimeStep *tStep)
double ft
Equivalent strain at stress peak (or a similar parameter).
GaussPoint * gp
Associated integration point.
MPSDamMaterialStatus(int n, Domain *d, GaussPoint *g, int nunits)
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 ...
For computing principal strains from engineering strains.
ElementCharSizeMethod ecsMethod
Method used for evaluation of characteristic element size.
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 ...
void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp, TimeStep *tStep)
Abstract service allowing to perform some initialization, when damage first appear.
double giveKappa()
Returns the last equilibrated scalar measure of the largest strain level.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
contextIOResultType storeYourself(DataStream &stream) const
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
Specialization of a floating point array for representing a stress state.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
double & at(int i)
Coefficient access function.
#define _IFT_MPSDamMaterial_gf
void computeDamageForCohesiveCrack(double &omega, double kappa, GaussPoint *gp)
computes the value of damage parameter omega, based on a given value of equivalent strain...
void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir) const
Computes principal values and directions of receiver vector.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
double giveEquivalentTime()
Returns equivalent time.
double giveTempThermalStrain(void)
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
double giveTempDamage()
Returns the temp. damage level.
Element * giveElement()
Returns corresponding element to receiver.
void setResidualTensileStrength(double src)
double kappa
Scalar measure of the largest strain level ever reached in material.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
MaterialMode
Type representing material mode of integration point.
#define _IFT_MPSDamMaterial_fib_s
MatResponseMode
Describes the character of characteristic material matrix.
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
#define _IFT_MPSDamMaterial_timedepfracturing
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
MPSDamMaterial(int n, Domain *d)
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
double giveCrackWidth(void)
double E
dummy Young's modulus
double lambda0
constant equal to one day in time units of analysis (eg. 86400 if the analysis runs in seconds) ...
double ft28
28-day value of tensile strength. Used only with "timedepfracturing"
void setCrackWidth(double src)
FloatArray effectiveStressVector
Equilibrated stress vector in reduced form.
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
void giveCrackVector(FloatArray &answer)
Returns crack vector stored in receiver. This is useful for plotting cracks as a vector field (paravi...
void setCrackVector(FloatArray cv)
Sets crack vector to given value. This is useful for plotting cracks as a vector field (paraview etc...
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
double const_gf
Determines the softening -> corresponds to the initial fracture energy.
int checkSnapBack
Check possible snap back flag.
This class implements the extended B3 model for concrete creep and shrinkage based on the microprestr...
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
double stiffnessFactor
scaling factor 1. for Pa, 1.e6 for MPa - only for empirical formulas - q1-q4 and ft and gf ...
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
double var_gf
hydration-degree dependent fracture energy
double tempDamage
Non-equilibrated damage level of material.
#define MPSDAMMAT_ITERATION_LIMIT
#define _IFT_MPSDamMaterial_ft
double gf28
28-day value of fracture energy. Used only with "timedepfracturing"
#define _IFT_MPSDamMaterial_ft28
void times(double f)
Multiplies receiver by factor f.
double giveTempAutogenousShrinkageStrain(void)
FloatArray crackVector
Crack orientation normalized to damage magnitude. This is useful for plotting cracks as a vector fiel...
contextIOResultType restoreYourself(DataStream &stream)
double giveTempDryingShrinkageStrain(void)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
#define _IFT_MPSDamMaterial_damageLaw
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
void resizeWithValues(int s, int allocChunk=0)
Checks size of receiver towards requested bounds.
double at(int i, int j) const
Coefficient access function.
#define _IFT_MPSDamMaterial_gf28
double givee0(GaussPoint *gp)
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
double giveResidualTensileStrength(void)
Abstract base class representing a material status information.
double giveCharLength()
Returns characteristic length stored in receiver.
Class representing vector of real numbers.
virtual double giveCharacteristicSize(GaussPoint *gp, FloatArray &normalToCrackPlane, ElementCharSizeMethod method)
Returns characteristic element size for a given integration point and given direction.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
Implementation of matrix containing floating point numbers.
double damage
Damage level of material.
IRResultType
Type defining the return values of InputRecord reading operations.
This class implements associated Material Status to MPSMaterial, which corresponds to a model for hum...
static void giveStressVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 3d stress vector transformation matrix from standard vector transformation matrix...
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
virtual double computeFractureEnergy(double equivalentTime)
virtual double computeTensileStrength(double equivalentTime)
void zero()
Zeroes all coefficients of receiver.
virtual double computeCreepFunction(double t, double t_prime, GaussPoint *gp, TimeStep *tStep)
Evaluation of the basic creep compliance function - can be used to compute elastic modulus in derived...
FloatArray tempEffectiveStressVector
Temporary stress vector in reduced form (increments are used mainly in nonlinear analysis) ...
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
void convertFromFullForm(const FloatArray &reducedform, MaterialMode mode)
Assign to receiver the reduced form of given vector.
void times(double s)
Multiplies receiver with scalar.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
void initDamagedFib(GaussPoint *gp, TimeStep *tStep)
double residTensileStrength
double tempKappa
Non-equilibrated scalar measure of the largest strain level.
Domain * giveDomain() const
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
int min(int i, int j)
Returns smaller value from two given decimals.
#define _IFT_MPSMaterial_fc
REGISTER_Material(DummyMaterial)
double castingTime
Casting time.
double givegf(GaussPoint *gp)
void computeDamage(double &omega, double kappa, GaussPoint *gp)
Computes the value of damage omega, based on given value of equivalent strain.
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.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
int nUnits
Number of (Maxwell or Kelvin) units in the rheologic chain.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
double charLength
Characteristic length.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
Class representing solution step.
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
void add(const FloatArray &src)
Adds array src to receiver.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
double var_e0
hydration-degree dependent equivalent strain at stress peak
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
void resize(int s)
Resizes receiver towards requested size.
SofteningType softType
Parameter specifying the type of softening (damage law).