57 double tempKappa = 0.0, omega = 0.0;
63 double f = equivJump - status->
giveKappa();
71 tempKappa = equivJump;
86 if ( jump.
at(1) >= 0 ) {
87 answer.
at(1) *= strength;
112IntMatIsoDamage :: give2dStiffnessMatrix_Eng(MatResponseMode rMode,
GaussPoint *gp,
TimeStep *tStep)
const
119 if ( rMode == ElasticStiffness ) {
124 FloatArray jump2d = {jump3d.at(1),jump3d.at(2)};
126 double un = jump2d.
at(1);
128 if ( rMode == SecantStiffness ) {
129 answer.at(2, 2) *= 1.0 - om;
132 answer.at(1, 1) *= 1.0 - om;
135 answer.at(2, 2) *= 1.0 - om;
138 answer.at(1, 1) *= 1.0 - om;
141 se.beProductOf(answer, jump2d);
142 double omega, omega_plus;
145 double dom = (omega_plus - omega)/ 1.0e-8;
148 double fac =
ft*(
e0 - un)/
gf;
149 dom =
e0*exp(fac) /(un*un + 1.0e-9) +
e0*
ft*exp(fac) / (
gf*un + 1.0e-9);
151 dom = -( -
e0 / (un * un+1.0e-9) * exp( -(
ft /
gf ) * ( un -
e0 ) ) +
e0 / (un+1.0e-9) * exp( -(
ft /
gf ) * ( un -
e0 ) ) * ( -(
ft /
gf ) ) );
153 answer.at(1, 2) -= se.at(1) * dom;
154 answer.at(2, 2) -= se.at(2) * dom;
164IntMatIsoDamage :: give3dStiffnessMatrix_Eng(MatResponseMode rMode,
GaussPoint *gp,
TimeStep *tStep)
const
171 if ( rMode == ElasticStiffness ) {
177 double un = jump3d.at(1);
179 if ( rMode == SecantStiffness ) {
182 answer.at(1, 1) *= 1.0 - om;
185 answer.at(2, 2) *= 1.0 - om;
186 answer.at(3, 3) *= 1.0 - om;
190 answer.at(1, 1) *= 1.0 - om;
193 answer.at(2, 2) *= 1.0 - om;
194 answer.at(3, 3) *= 1.0 - om;
204 if ( type == IST_DamageTensor ) {
209 }
else if ( type == IST_DamageTensorTemp ) {
214 }
else if ( type == IST_PrincipalDamageTensor ) {
218 }
else if ( type == IST_PrincipalDamageTempTensor ) {
222 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
227 return StructuralInterfaceMaterial :: giveIPValue(answer, gp, type, tStep);
235 StructuralInterfaceMaterial :: initializeFrom(ir);
255 StructuralInterfaceMaterial :: giveInputRecord(input);
268IntMatIsoDamage :: computeEquivalentJump(
const FloatArray &jump)
const
274IntMatIsoDamage :: computeDamageParam(
double kappa)
const
276 if ( kappa > this->
e0 ) {
277 return 1.0 - ( this->
e0 / kappa ) * exp( -(
ft /
gf ) * ( kappa -
e0 ) );
288IntMatIsoDamageStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
290 StructuralInterfaceMaterialStatus :: printOutputAt(file, tStep);
291 fprintf(file,
"status { ");
292 if ( this->
damage > 0.0 ) {
293 fprintf(file,
"kappa %f, damage %f ", this->
kappa, this->
damage);
296 fprintf(file,
"}\n");
301IntMatIsoDamageStatus :: initTempStatus()
303 StructuralInterfaceMaterialStatus :: initTempStatus();
309IntMatIsoDamageStatus :: updateYourself(
TimeStep *tStep)
311 StructuralInterfaceMaterialStatus :: updateYourself(tStep);
320 StructuralInterfaceMaterialStatus :: saveContext(stream, mode);
334 StructuralInterfaceMaterialStatus :: restoreContext(stream, mode);
#define REGISTER_Material(class)
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
double & at(std::size_t i)
void zero()
Zeroes all coefficients of receiver.
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
double giveKappa() const
Returns the last equilibrated scalar measure of the largest jump level.
double giveTempKappa() const
Returns the temp. scalar measure of the largest jump level.
double kappa
Scalar measure of the largest equivalent displacement ever reached in material.
double giveTempDamage() const override
Returns the temp. damage level.
double giveDamage() const override
Returns the last equilibrated damage level.
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
double damage
Damage level of material.
double tempDamage
Non-equilibrated damage level of material.
double tempKappa
Non-equilibrated scalar measure of the largest equivalent displacement.
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
FloatArrayF< 3 > giveEngTraction_3d(const FloatArrayF< 3 > &jump, GaussPoint *gp, TimeStep *tStep) const override
double kn
Elastic properties (normal moduli).
virtual double computeEquivalentJump(const FloatArray &jump) const
double e0
Limit elastic deformation.
virtual double computeDamageParam(double kappa) const
double ft
Tension strength.
double gf
Fracture energy.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
StructuralInterfaceMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralInterfaceMaterialStatus with number n, belonging to domain d and I...
const FloatArrayF< 3 > & giveTempJump() const
Returns the const pointer to receiver's temporary jump.
void letTempFirstPKTractionBe(const FloatArrayF< 3 > v)
Assigns tempFirstPKTraction to given vector v.
void letTempTractionBe(const FloatArrayF< 3 > v)
Assigns tempTraction to given vector v.
void letTempJumpBe(const FloatArrayF< 3 > v)
Assigns tempJump to given vector v.
StructuralInterfaceMaterial(int n, Domain *d)
#define _IFT_IntMatIsoDamage_gf
#define _IFT_IntMatIsoDamage_ft
#define _IFT_IntMatIsoDamage_ks
#define _IFT_IntMatIsoDamage_maxOmega
#define _IFT_IntMatIsoDamage_kn
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
FloatMatrixF< N, N > diag(const FloatArrayF< N > &v)
@ CIO_IOERR
General IO error.