70 return mode == _3dMat || mode == _PlaneStress || mode == _PlaneStrain || mode == _1dMat;
85 if ( mode == ElasticStiffness ) {
93 answer.
times(1.0 - tempDamage);
113 double f, equivStrain, tempKappa = 0.0, omega = 0.0;
137 tempKappa = equivStrain;
138 this->
initDamaged(tempKappa, reducedTotalStrainVector, gp);
144 tempKappa = equivStrain;
145 this->
initDamaged(tempKappa, reducedTotalStrainVector, gp);
147 if ( omega < status->giveDamage() ) {
152 OOFEM_ERROR(
"unsupported loading/unloading criterion");
161 reducedTotalStrainVector.
at(1) -= epsp;
164 if ( ( reducedTotalStrainVector.
giveSize() > 1 ) || ( reducedTotalStrainVector.
at(1) > 0. ) ) {
166 de.
times(1.0 - omega);
176 #ifdef keep_track_of_dissipated_energy 187 if ( mode == ElasticStiffness ) {
195 answer.
times(1.0 - tempDamage);
196 if ( mode == TangentStiffness ) {
198 if ( tempDamage > damage ) {
206 stress.
times( 1. / ( 1 - tempDamage ) );
214 correctionTerm.
times(-damagePrime);
216 answer.
add(correctionTerm);
227 if ( mode == ElasticStiffness ) {
235 answer.
times(1.0 - tempDamage);
245 if ( mode == ElasticStiffness ) {
253 answer.
times(1.0 - tempDamage);
265 if ( type == IST_DamageScalar ) {
270 }
else if ( type == IST_DamageTensor ) {
275 }
else if ( type == IST_PrincipalDamageTensor ) {
280 }
else if ( type == IST_DamageTensorTemp ) {
285 }
else if ( type == IST_PrincipalDamageTempTensor ) {
290 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
294 }
else if ( type == IST_CharacteristicLength ) {
298 }
else if (type == IST_CrackWidth) {
303 answer.
at(1) = status->
giveLe() * status->
giveDamage() * reducedTotalStrainVector.
at(maxStrain);
304 }
else if ( type == IST_CrackDirs ) {
308 }
else if ( type == IST_CrackVector ) {
312 #ifdef keep_track_of_dissipated_energy 313 }
else if ( type == IST_StressWorkDensity ) {
317 }
else if ( type == IST_DissWorkDensity ) {
320 }
else if ( type == IST_FreeEnergyDensity ) {
392 #ifdef keep_track_of_dissipated_energy 407 fprintf(file,
"status { ");
409 fprintf(file,
"kappa %f", this->
kappa);
410 }
else if ( this->
damage > 0.0 ) {
413 #ifdef keep_track_of_dissipated_energy 416 fprintf(file,
"stressW %f ", this->
stressWork);
420 fprintf(file,
"}\n");
431 #ifdef keep_track_of_dissipated_energy 444 #ifdef keep_track_of_dissipated_energy 477 #ifdef keep_track_of_dissipated_energy 510 #ifdef keep_track_of_dissipated_energy 524 #ifdef keep_track_of_dissipated_energy
enum oofem::IsotropicDamageMaterial::loaUnloCriterium llcriteria
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes derivative of the equivalent strain with regards to strain.
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
double giveDamage()
Returns the last equilibrated damage level.
double le
Characteristic element length, computed when damage initialized from direction of maximum positive pr...
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
GaussPoint * gp
Associated integration point.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
double tempDillatCoeff
Coefficient of thermal dilatation.
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 ...
double kappa
Scalar measure of the largest strain level ever reached in material.
double tempDamage
Non-equilibrated damage level of material.
FloatArray tempStrainVector
Temporary strain vector in reduced form (to find balanced state)
virtual double evaluatePermanentStrain(double kappa, double omega)
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *, TimeStep *)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
double & at(int i)
Coefficient access function.
int max(int i, int j)
Returns bigger value form two given decimals.
double damage
Damage level of material.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual ~IsotropicDamageMaterialStatus()
Destructor.
double tempStressWork
Non-equilibrated density of total work done by stresses on strain increments.
This class implements a structural material status information.
FloatArray stressVector
Equilibrated stress vector in reduced form.
double giveStressWork()
Returns the density of total work of stress on strain increments.
virtual double damageFunctionPrime(double kappa, GaussPoint *gp)
Returns the value of derivative of damage function wrt damage-driving variable kappa corresponding to...
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode)
Method for subtracting from reduced space strain vector its stress-independent parts (caused by tempe...
MaterialMode
Type representing material mode of integration point.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
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...
IsotropicDamageMaterial(int n, Domain *d)
Constructor.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
void computeWork(GaussPoint *gp)
Computes the increment of total stress work and of dissipated work.
void giveCrackVector(FloatArray &answer)
Returns crack vector stored in receiver. This is useful for plotting cracks as a vector field (paravi...
virtual void computeDamageParam(double &omega, double kappa, const FloatArray &strain, GaussPoint *gp)=0
Computes the value of damage parameter omega, based on given value of equivalent strain.
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
double giveLe()
Returns characteristic length stored in receiver.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
#define _IFT_IsotropicDamageMaterial_permstrain
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
double stressWork
Density of total work done by stresses on strain increments.
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
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 times(double f)
Multiplies receiver by factor f.
double giveKappa()
Returns the last equilibrated scalar measure of the largest strain level.
virtual ~IsotropicDamageMaterial()
Destructor.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
#define _IFT_IsotropicDamageMaterial_talpha
LinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
int giveIndexMaxElem(void)
Returns index (between 1 and Size) of maximum element in the array.
double giveTempKappa()
Returns the temp. scalar measure of the largest strain level.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
double tempDissWork
Non-equilibrated density of dissipated work.
Class representing vector of real numbers.
IsotropicDamageMaterialStatus(int n, Domain *d, GaussPoint *g)
Constructor.
FloatArray strainVector
Equilibrated strain vector in reduced form.
Implementation of matrix containing floating point numbers.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
IRResultType
Type defining the return values of InputRecord reading operations.
#define _IFT_IsotropicDamageMaterial_maxOmega
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
int permStrain
Indicator of the type of permanent strain formulation (0 = standard damage with no permanent strain) ...
double giveCrackAngle()
Returns crack angle stored in receiver.
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
double giveDissWork()
Returns the density of dissipated work.
double giveTempDamage()
Returns the temp. damage level.
double tempKappa
Non-equilibrated scalar measure of the largest strain level.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
void add(const FloatMatrix &a)
Adds matrix to the receiver.
void zero()
Zeroes all coefficients of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
virtual void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp)
Abstract service allowing to perform some initialization, when damage first appear.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
void times(double s)
Multiplies receiver with scalar.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
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.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
int giveSize() const
Returns the size of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
double crack_angle
Angle characterizing the crack direction.
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
virtual void computeEquivalentStrain(double &kappa, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)=0
Computes the equivalent strain measure from given strain vector (full form).
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
FloatArray tempStressVector
Temporary stress vector in reduced form (increments are used mainly in nonlinear analysis) ...
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
This class implements associated Material Status to IsotropicDamageMaterial.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
double dissWork
Density of dissipated work.
Class representing integration point in finite element program.
FloatArray crackVector
Crack orientation normalized to damage magnitude. This is useful for plotting cracks as a vector fiel...
Class representing solution step.
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
void resize(int s)
Resizes receiver towards requested size.