84 Qtemp_comp.
at(3) = this->
knc*dJ.
at(3);
89 if (oldDamage < 0.99) {
97 Kstiff.
at(1,1) = this->
ks0;
98 Kstiff.
at(2,2) = this->
ks0;
99 Kstiff.
at(3,3) = this->
kn0;
105 double Qn = Qtrial.
at(3);
112 QtrialShear = Qtrial;
118 double mu = this->
mu;
120 double S = (this->
GIc - pow(sigf,2)/(2*this->
kn0))/
sigf;
121 double gammaGf = gamma*(this->
GIIc - pow(gamma*sigf,2)/(2*this->
ks0))/(this->
GIc - pow(sigf,2)/(2*this->
kn0));
123 double Qn_M = 0.5*(Qn + fabs(Qn));
124 double loadFun = sigf*pow(Qt/(gamma*sigf),2) + (sigf/
gamma)*(gamma-mu)*pow((Qn_M/sigf),2) - 1/gamma*(gamma*sigf-mu*Qn);
129 if ( loadFun/sigf < 1e-7 ) {
132 Qtemp.times(1-oldDamage);
140 M.
at(1) = 2*Qt1/(pow(gamma,2)*
sigf);
141 M.
at(2) = 2*Qt2/(pow(gamma,2)*
sigf);
146 dJElastic.
add(-S*dAlpha, M);
151 const double errorTol = 0.0001;
152 for(
int iter = 1; fabs(loadFun)/sigf > errorTol; iter++) {
155 OOFEM_ERROR(
"BilinearCZMaterialFagerstrom :: giveRealStressVector - no convergence in constitutive driver");
160 R.at(1) = dJElastic.
at(1) - (dJ.
at(1) - gammaGf*S*dAlpha*M.
at(1));
161 R.at(2) = dJElastic.
at(2) - (dJ.
at(2) - gammaGf*S*dAlpha*M.
at(2));
162 R.at(3) = dJElastic.
at(3) - (dJ.
at(3) - S*dAlpha*M.
at(3));
165 Smat.at(1,1) = 1.0 + gammaGf*dAlpha*S*2*Kstiff.
at(1,1)/(pow(gamma,2)*
sigf);
166 Smat.at(2,2) = 1.0 + gammaGf*dAlpha*S*2*Kstiff.
at(2,2)/(pow(gamma,2)*
sigf);
169 Smat.at(3,3) = 1.0 + dAlpha*S*2*Kstiff.
at(3,3)/(
sigf);
174 Smat.at(1,4) = gammaGf*S*M.
at(1);
175 Smat.at(2,4) = gammaGf*S*M.
at(2);
176 Smat.at(3,4) = S*M.
at(3);
178 Smat.at(4,1) = M.
at(1)*Kstiff.
at(1,1);
179 Smat.at(4,2) = M.
at(2)*Kstiff.
at(2,2);
181 Smat.at(4,3) = (2*(gamma-
mu)/(gamma*sigf)*Qn_M + mu/
gamma)*Kstiff.
at(3,3);
191 dJElastic.
at(1) -= inc.
at(1);
192 dJElastic.
at(2) -= inc.
at(2);
193 dJElastic.
at(3) -= inc.
at(3);
194 dAlpha = dAlpha - inc.
at(4);
196 Qtemp.at(1) = Qold.at(1) + Kstiff.
at(1,1)*dJElastic.
at(1);
197 Qtemp.at(2) = Qold.at(2) + Kstiff.
at(2,2)*dJElastic.
at(2);
198 Qtemp.at(3) = Qold.at(3) + Kstiff.
at(3,3)*dJElastic.
at(3);
202 Qt = sqrt(pow(Qt1,2) + pow(Qt2,2));
204 Qn_M = 0.5*(Qtemp.at(3)+fabs(Qtemp.at(3)));
206 M.
at(1) = 2*Qt1/(pow(gamma,2)*
sigf);
207 M.
at(2) = 2*Qt2/(pow(gamma,2)*
sigf);
211 loadFun = sigf*pow(Qt/(gamma*sigf),2) + (sigf/
gamma)*(gamma-mu)*pow((Qn_M/sigf),2) - 1/gamma*(gamma*sigf-mu*Qn);
215 if (oldDamage + dAlpha > 1) {
216 dAlpha = 1. - oldDamage;
229 alpha_v.
at(1) = Smati.
at(4,1);
230 alpha_v.
at(2) = Smati.
at(4,2);
231 alpha_v.
at(3) = Smati.
at(4,3);
235 Qtemp.times(1-oldDamage-dAlpha);
242 dAlpha = 1.0 - oldDamage;
250 Qtemp.add(Qtemp_comp);
286 Kstiff.
at(1,1) = this->
ks0;
287 Kstiff.
at(2,2) = this->
ks0;
288 Kstiff.
at(3,3) = this->
kn0;
291 if ( damage >= 1.0 ) {
295 Kstiff.
at(1,1) = 0.0;
296 Kstiff.
at(2,2) = 0.0;
297 Kstiff.
at(3,3) = this->
knc;
308 Kstiff.
at(3,3) = Kstiff.
at(3,3) + (this->
knc)/(1-damage);
313 answer.
times(1-damage);
329 Kstiff.
times((1-damage));
348 answer.
at(3,3) = answer.
at(3,3) + this->
knc;
366 if ( type == IST_DamageScalar ) {
401 if ( result !=
IRRT_OK )
return result;
404 if ( this->
kn0 < 0.0 ) {
407 }
else if ( this->
ks0 < 0.0 ) {
410 }
else if ( this->
GIc < 0.0 ) {
413 }
else if ( this->
GIIc < 0.0 ) {
416 }
else if ( this->
gamma < 0.0 ) {
417 OOFEM_WARNING(
"gamma (%.2e) is below zero which is unphysical",
450 printf(
"Parameters for BilinearCZMaterial: \n");
452 printf(
"-Strength paramters \n");
453 printf(
" sigf = %e \n", this->
sigf);
454 printf(
" GIc = %e \n", this->
GIc);
455 printf(
" GIIc = %e \n", this->
GIIc);
456 printf(
" gamma = sigfs/sigfn = %e \n", this->
gamma);
457 printf(
" mu = %e \n", this->
mu);
459 printf(
"-Stiffness parameters \n");
460 printf(
" kn0 = %e \n", this->
kn0);
461 printf(
" ks0 = %e \n", this->
ks0);
462 printf(
" knc = %e \n", this->
knc);
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
void letTempFBe(FloatMatrix v)
Assigns tempFVector to given vector v.
virtual void give3dStiffnessMatrix_dTdj(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
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.
void letTempIepBe(FloatMatrix v)
const FloatMatrix & giveTempIep()
#define _IFT_IntMatBilinearCZFagerstrom_mu
virtual void giveFirstPKTraction_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &jump, const FloatMatrix &F, TimeStep *tStep)
FloatArray tempMaterialJump
double & at(int i)
Coefficient access function.
double kn0
Material parameters.
void beSubMatrixOf(const FloatMatrix &src, int topRow, int bottomRow, int topCol, int bottomCol)
Assigns to the receiver the sub-matrix of another matrix.
void letTempdTdJBe(FloatMatrix &v)
#define _IFT_IntMatBilinearCZFagerstrom_g1c
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
const FloatMatrix & giveOlddTdJ()
#define _IFT_IntMatBilinearCZFagerstrom_sigf
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
virtual int checkConsistency()
Allows programmer to test some internal data, before computation begins.
void printYourself()
Prints receiver state on stdout. Useful for debugging.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
#define _IFT_IntMatBilinearCZFagerstrom_kn
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual ~IntMatBilinearCZFagerstrom()
Destructor.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
void letTempAlphavBe(FloatArray v)
#define _IFT_IntMatBilinearCZFagerstrom_ks
#define _IFT_IntMatBilinearCZFagerstrom_g2c
#define _IFT_IntMatBilinearCZFagerstrom_knc
void letTempJumpBe(FloatArray v)
Assigns tempJump to given vector v.
void times(double f)
Multiplies receiver by factor f.
void letTempMaterialJumpBe(FloatArray v)
const FloatArray & giveTempEffectiveMandelTraction()
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
This class implements a structural interface material status information.
#define _IFT_IntMatBilinearCZFagerstrom_gamma
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
double at(int i, int j) const
Coefficient access function.
const FloatArray & giveOldMaterialJump()
IntMatBilinearCZFagerstromStatus(int n, Domain *d, GaussPoint *g)
Constructor.
void letTempFirstPKTractionBe(FloatArray v)
Assigns tempFirstPKTraction to given vector v.
void subtract(const FloatMatrix &a)
Subtracts matrix from the receiver.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
IntMatBilinearCZFagerstrom(int n, Domain *d)
Constructor.
Class representing vector of real numbers.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
void letOldDamageDevBe(bool v)
const FloatArray & giveEffectiveMandelTraction()
double computeNorm() const
Computes the norm (or length) of the vector.
void letTempDamageBe(double v)
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void zero()
Zeroes all coefficients of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
FloatArray oldMaterialJump
void zero()
Zeroes all coefficient of receiver.
void letTempEffectiveMandelTractionBe(FloatArray v)
void beUnitMatrix()
Sets receiver to unity matrix.
REGISTER_Material(DummyMaterial)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
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.
This class implements associated Material Status for IntMatBilinearCZFagerstrom.
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...
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
const FloatArray & giveTempAlphav()
const FloatMatrix & giveTempInverseDefGrad()
FloatArray tempQEffective
virtual ~IntMatBilinearCZFagerstromStatus()
Destructor.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
void letTempDamageDevBe(bool v)
Class representing solution step.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void add(const FloatArray &src)
Adds array src to receiver.
void letTempInverseDefGradBe(FloatMatrix v)
void resize(int s)
Resizes receiver towards requested size.