66 double f, equivJump, tempKappa = 0.0, omega = 0.0;
80 tempKappa = equivJump;
93 answer = {
kn * jump.
at(1),
ks * jump.
at(2) * strength,
ks * jump.
at(3) * strength};
95 if ( jump.
at(1) >= 0 ) {
96 answer.
at(1) *= strength;
127 answer.
at(1, 1) =
kn;
128 answer.
at(2, 2) =
ks;
130 if ( rMode == ElasticStiffness ) {
137 double un = jump2d.
at(1);
139 if ( rMode == SecantStiffness ) {
140 answer.
at(2, 2) *= 1.0 - om;
143 answer.
at(1, 1) *= 1.0 - om;
148 answer.
at(2, 2) *= 1.0 - om;
151 answer.
at(1, 1) *= 1.0 - om;
154 se.beProductOf(answer, jump2d);
155 double omega, omega_plus;
158 double dom = (omega_plus - omega)/ 1.0e-8;
161 double fac =
ft*(
e0 - un)/
gf;
162 dom =
e0*exp(fac) /(un*un + 1.0e-9) +
e0*
ft*exp(fac) / (
gf*un + 1.0e-9);
165 dom = -( -
e0 / (un * un+1.0e-9) * exp( -(
ft /
gf ) * ( un -
e0 ) ) +
e0 / (un+1.0e-9) * exp( -(
ft /
gf ) * ( un -
e0 ) ) * ( -(
ft /
gf ) ) );
167 answer.
at(1, 2) -= se.at(1) * dom;
168 answer.
at(2, 2) -= se.at(2) * dom;
185 answer.
at(1, 1) =
kn;
186 answer.
at(2, 2) =
ks;
187 answer.
at(3, 3) =
ks;
189 if ( rMode == ElasticStiffness ) {
195 double un = jump3d.
at(1);
197 if ( rMode == SecantStiffness ) {
199 answer.
at(2, 2) *= 1.0 - om;
200 answer.
at(3, 3) *= 1.0 - om;
203 answer.
at(1, 1) *= 1.0 - om;
209 answer.
at(2, 2) *= 1.0 - om;
210 answer.
at(3, 3) *= 1.0 - om;
213 answer.
at(1, 1) *= 1.0 - om;
224 if ( type == IST_DamageTensor ) {
229 }
else if ( type == IST_DamageTensorTemp ) {
234 }
else if ( type == IST_PrincipalDamageTensor ) {
238 }
else if ( type == IST_PrincipalDamageTempTensor ) {
242 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
298 if ( kappa > this->
e0 ) {
299 omega = 1.0 - ( this->
e0 / kappa ) * exp( -(
ft /
gf ) * ( kappa -
e0 ) );
321 fprintf(file,
"status { ");
322 if ( this->
damage > 0.0 ) {
323 fprintf(file,
"kappa %f, damage %f ", this->
kappa, this->
damage);
326 fprintf(file,
"}\n");
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
#define _IFT_IntMatIsoDamage_maxOmega
double giveKappa()
Returns the last equilibrated scalar measure of the largest jump level.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
double & at(int i)
Coefficient access function.
int max(int i, int j)
Returns bigger value form two given decimals.
double gf
Fracture energy.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual ~IntMatIsoDamageStatus()
Destructor.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
double kn
Elastic properties (normal moduli).
double tempKappa
Non-equilibrated scalar measure of the largest equivalent displacement.
double giveDamage()
Returns the last equilibrated damage level.
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.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
double tempDamage
Non-equilibrated damage level of material.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
IntMatIsoDamage(int n, Domain *d)
Constructor.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual void computeDamageParam(double &omega, double kappa)
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 giveTempDamage()
Returns the temp. damage level.
double e0
Limit elastic deformation.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual void computeEquivalentJump(double &kappa, const FloatArray &jump)
Computes the equivalent jump measure from given jump vector (full form).
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
void letTempJumpBe(FloatArray v)
Assigns tempJump to given vector v.
IntMatIsoDamageStatus(int n, Domain *d, GaussPoint *g)
Constructor.
double kappa
Scalar measure of the largest equivalent displacement ever reached in material.
This class implements a structural interface material status information.
#define _IFT_IntMatIsoDamage_ks
virtual void give2dStiffnessMatrix_Eng(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
double at(int i, int j) const
Coefficient access function.
virtual void give3dStiffnessMatrix_Eng(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
virtual void giveEngTraction_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &jump, TimeStep *tStep)
void letTempFirstPKTractionBe(FloatArray v)
Assigns tempFirstPKTraction to given vector v.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
Class representing vector of real numbers.
virtual void giveFirstPKTraction_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &jump, const FloatMatrix &F, TimeStep *tStep)
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
virtual ~IntMatIsoDamage()
Destructor.
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
void zero()
Zeroes all coefficients of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
double ft
Tension strength.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void zero()
Zeroes all coefficient of receiver.
int min(int i, int j)
Returns smaller value from two given decimals.
double giveTempKappa()
Returns the temp. scalar measure of the largest jump level.
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
REGISTER_Material(DummyMaterial)
void letTempTractionBe(FloatArray v)
Assigns tempTraction to given vector v.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
Abstract base class for all "structural" interface models.
the oofem namespace is to define a context or scope in which all oofem names are defined.
#define _IFT_IntMatIsoDamage_gf
double damage
Damage level of material.
const FloatArray & giveTempJump() const
Returns the const pointer to receiver's temporary jump.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
#define _IFT_IntMatIsoDamage_ft
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
#define _IFT_IntMatIsoDamage_kn
Class representing integration point in finite element program.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Class representing solution step.
This class implements the InterfaceMaterialStatus associated with IntMatIsoDamage.
void resize(int s)
Resizes receiver towards requested size.