63 if ( tempKappa >= equivStrain ) {
68 tempKappa = equivStrain;
74 auto answer = (1.0 - omega) *
dot(de, jump);
87IsoInterfaceDamageMaterial :: give3dStiffnessMatrix_Eng(MatResponseMode rMode,
GaussPoint *gp,
TimeStep *tStep)
const
93 if ( rMode == ElasticStiffness ) {
98 if ( rMode == SecantStiffness ) {
113 double dom = -( -
e0 / un / un * exp( -(
ft /
gf ) * ( un -
e0 ) ) +
e0 / un * exp( -(
ft /
gf ) * ( un -
e0 ) ) * ( -(
ft /
gf ) ) );
116 auto se =
dot(answer, e);
117 answer.at(1, 1) -= se.at(1) * dom;
118 answer.at(2, 1) -= se.at(2) * dom;
131 if ( type == IST_DamageTensor ) {
136 }
else if ( type == IST_DamageTensorTemp ) {
141 }
else if ( type == IST_PrincipalDamageTensor ) {
145 }
else if ( type == IST_PrincipalDamageTempTensor ) {
149 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
154 return StructuralInterfaceMaterial :: giveIPValue(answer, gp, type, tStep);
162 StructuralInterfaceMaterial :: initializeFrom(ir);
184 StructuralInterfaceMaterial :: giveInputRecord(input);
199 double epsNplus =
macbra( jump.
at(1) );
200 double epsT2 = jump.
at(2) * jump.
at(2);
202 epsT2 += jump.
at(3) * jump.
at(3);
204 return sqrt(epsNplus * epsNplus +
beta * epsT2);
210 if ( kappa > this->
e0 ) {
211 return 1.0 - ( this->
e0 / kappa ) * exp( -(
ft /
gf ) * ( kappa -
e0 ) );
223IsoInterfaceDamageMaterialStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
225 StructuralInterfaceMaterialStatus :: printOutputAt(file, tStep);
226 fprintf(file,
"status { ");
227 if ( this->
damage > 0.0 ) {
228 fprintf(file,
"kappa %f, damage %f ", this->
kappa, this->
damage);
231 fprintf(file,
"}\n");
236IsoInterfaceDamageMaterialStatus :: initTempStatus()
238 StructuralInterfaceMaterialStatus :: initTempStatus();
244IsoInterfaceDamageMaterialStatus :: updateYourself(
TimeStep *tStep)
246 StructuralInterfaceMaterialStatus :: updateYourself(tStep);
255 StructuralInterfaceMaterialStatus :: saveContext(stream, mode);
269 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)
int giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
double damage
Damage level of material.
double giveTempKappa() const
Returns the temp. scalar measure of the largest strain level.
double giveDamage() const override
Returns the last equilibrated damage level.
double tempKappa
Non-equilibrated scalar measure of the largest equivalent displacement.
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
double tempDamage
Non-equilibrated damage level of material.
double giveTempDamage() const override
Returns the temp. damage level.
double giveKappa() const
Returns the last equilibrated scalar measure of the largest strain level.
double kappa
Scalar measure of the largest equivalent displacement ever reached in material.
double beta
Weight factor for the influence of shear component of displacement jump on equivalent strain.
FloatMatrixF< 3, 3 > give3dStiffnessMatrix_Eng(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const override
double kn
Elastic properties (normal moduli).
double computeEquivalentStrain(const FloatArrayF< 3 > &jump, GaussPoint *gp, TimeStep *tStep) const
double gf
Fracture energy.
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
double e0
Limit elastic deformation.
virtual double computeDamageParam(double kappa, const FloatArrayF< 3 > &strain, GaussPoint *gp) const
double ft
Tension strength.
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 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_IsoInterfaceDamageMaterial_ks
#define _IFT_IsoInterfaceDamageMaterial_ft
#define _IFT_IsoInterfaceDamageMaterial_gf
#define _IFT_IsoInterfaceDamageMaterial_kn
#define _IFT_IsoInterfaceDamageMaterial_maxOmega
#define _IFT_IsoInterfaceDamageMaterial_beta
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
double macbra(double x)
Returns the positive part of given float.
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
FloatMatrixF< N, N > diag(const FloatArrayF< N > &v)
double dot(const FloatArray &x, const FloatArray &y)
@ CIO_IOERR
General IO error.