92 Qtemp_comp.
at(3) = this->
knc*dJ.
at(3);
97 if (oldDamage < 0.99) {
104 Kstiff.
at(1,1) = this->
ks0;
105 Kstiff.
at(2,2) = this->
ks0;
106 Kstiff.
at(3,3) = this->
kn0;
110 Kstiff.
at(3,3) = this->
kn0;
112 Kstiff.
at(3,3) = this->
kn0/(1-oldDamage);
123 double Qn = Qtrial.
at(3);
139 double mu = this->
mu;
143 double S = (this->
GIc - pow(sigf,2)/(2*this->
kn0))/
sigf;
144 double gammaGf = gamma*(this->
GIIc - pow(gamma*sigf,2)/(2*this->
ks0))/(this->
GIc - pow(sigf,2)/(2*this->
kn0));
148 double Qn_M = 0.5*(Qn + fabs(Qn));
152 double loadFun = sigf*pow(Qt/(gamma*sigf),2) + (sigf/
gamma)*(gamma-mu)*pow((Qn_M/sigf),2) - 1/gamma*(gamma*sigf-mu*Qn);
165 if (loadFun/sigf < 0.0000001) {
168 Qtemp.times(1-oldDamage);
176 M.
at(1) = 2*Qt1/(pow(gamma,2)*
sigf);
177 M.
at(2) = 2*Qt2/(pow(gamma,2)*
sigf);
185 help.
times(S*dAlpha);
190 double loadFunDyn = loadFun;
192 const double errorTol = 0.0001;
193 for(
int iter = 1; fabs(loadFunDyn)/sigf > errorTol; iter++) {
199 OOFEM_ERROR(
"BilinearCZMaterialFagerstrom :: giveRealStressVector - no convergence in constitutive driver");
204 R.at(1) = dJElastic.
at(1) - (dJ.
at(1) - gammaGf*S*dAlpha*M.
at(1));
205 R.at(2) = dJElastic.
at(2) - (dJ.
at(2) - gammaGf*S*dAlpha*M.
at(2));
206 R.at(3) = dJElastic.
at(3) - (dJ.
at(3) - S*dAlpha*M.
at(3));
207 if (fabs(c_star)>0) {
227 Smat.at(1,1) = 1.0 + gammaGf*dAlpha*S*2*Kstiff.
at(1,1)/(pow(gamma,2)*
sigf);
228 Smat.at(2,2) = 1.0 + gammaGf*dAlpha*S*2*Kstiff.
at(2,2)/(pow(gamma,2)*
sigf);
231 Smat.at(3,3) = 1.0 + dAlpha*S*2*Kstiff.
at(3,3)/(
sigf);
236 Smat.at(1,4) = gammaGf*S*M.
at(1);
237 Smat.at(2,4) = gammaGf*S*M.
at(2);
238 Smat.at(3,4) = S*M.
at(3);
248 if ( fabs(c_star) > 0 ) {
249 Smat.at(4,1) = M.
at(1)*Kstiff.
at(1,1) + fac1*dJp.
at(1);
250 Smat.at(4,2) = M.
at(2)*Kstiff.
at(2,2) + fac1*dJp.
at(2);
251 Smat.at(4,3) = (2*(gamma-
mu)/(gamma*sigf)*Qn_M + mu/
gamma)*Kstiff.
at(3,3) + fac1*dJp.
at(3);
258 Smat.at(4,1) = M.
at(1)*Kstiff.
at(1,1);
259 Smat.at(4,2) = M.
at(2)*Kstiff.
at(2,2);
261 Smat.at(4,3) = (2*(gamma-
mu)/(gamma*sigf)*Qn_M + mu/
gamma)*Kstiff.
at(3,3);
270 inc.beProductOf(Smati,R);
272 dJElastic.
at(1) = dJElastic.
at(1) - inc.at(1);
273 dJElastic.
at(2) = dJElastic.
at(2) - inc.at(2);
274 dJElastic.
at(3) = dJElastic.
at(3) - inc.at(3);
276 dAlpha = dAlpha - inc.at(4);
278 Qtemp.at(1) = Qold.at(1) + Kstiff.
at(1,1)*dJElastic.
at(1);
279 Qtemp.at(2) = Qold.at(2) + Kstiff.
at(2,2)*dJElastic.
at(2);
280 Qtemp.at(3) = Qold.at(3) + Kstiff.
at(3,3)*dJElastic.
at(3);
284 Qt = sqrt(pow(Qt1,2) + pow(Qt2,2));
286 Qn_M = 0.5*(Qtemp.at(3)+fabs(Qtemp.at(3)));
288 M.
at(1) = 2*Qt1/(pow(gamma,2)*
sigf);
289 M.
at(2) = 2*Qt2/(pow(gamma,2)*
sigf);
293 loadFun = sigf*pow(Qt/(gamma*sigf),2) + (sigf/
gamma)*(gamma-mu)*pow((Qn_M/sigf),2) - 1/gamma*(gamma*sigf-mu*Qn);
297 if (oldDamage + dAlpha > 1) {
298 dAlpha = 1. - oldDamage;
311 alpha_v.
at(1) = Smati.
at(4,1);
312 alpha_v.
at(2) = Smati.
at(4,2);
313 alpha_v.
at(3) = Smati.
at(4,3);
317 Qtemp.times(1-oldDamage-dAlpha);
324 dAlpha = 1.0 - oldDamage;
332 Qtemp.at(1) = Qtemp.at(1) + Qtemp_comp.
at(1);
333 Qtemp.at(2) = Qtemp.at(2) + Qtemp_comp.
at(2);
334 Qtemp.at(3) = Qtemp.at(3) + Qtemp_comp.
at(3);
397 if ( this->
kn0 < 0.0 ) {
399 }
else if ( this->
ks0 < 0.0 ) {
401 }
else if ( this->
GIc < 0.0 ) {
403 }
else if ( this->
GIIc < 0.0 ) {
405 }
else if ( this->
gamma < 0.0 ) {
406 OOFEM_ERROR(
"gamma (%.2e) is below zero which is unphysical",
416 printf(
"-Rate parameters \n");
417 printf(
" c_star = %e \n", this->
c_star);
418 printf(
" m = %e \n", this->
m);
virtual ~IntMatBilinearCZFagerstromRate()
Destructor.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
void letTempFBe(FloatMatrix v)
Assigns tempFVector to given vector v.
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)
#define _IFT_IntMatBilinearCZFagerstrom_mu
IntMatBilinearCZFagerstromRate(int n, Domain *d)
Constructor.
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.
#define _IFT_IntMatBilinearCZFagerstrom_g1c
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
double m
Rate dependence exponent.
#define _IFT_IntMatBilinearCZFagerstrom_sigf
void printYourself()
Prints receiver state on stdout. Useful for debugging.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
#define _IFT_IntMatBilinearCZFagerstrom_kn
double giveTimeIncrement()
Returns solution step associated time increment.
virtual void giveFirstPKTraction_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &jump, const FloatMatrix &F, TimeStep *tStep)
void letTempAlphavBe(FloatArray v)
#define _IFT_IntMatBilinearCZFagerstrom_ks
#define _IFT_IntMatBilinearCZFagerstromRate_m
#define _IFT_IntMatBilinearCZFagerstrom_g2c
double computeSquaredNorm() const
Computes the square of the norm.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
#define _IFT_IntMatBilinearCZFagerstrom_knc
void letTempJumpBe(FloatArray v)
Assigns tempJump to given vector v.
void letTempMaterialJumpBe(FloatArray v)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
double c_star
Rate dependence coefficient.
#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()
void letTempFirstPKTractionBe(FloatArray v)
Assigns tempFirstPKTraction to given vector v.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
const FloatArray & giveEffectiveMandelTraction()
virtual int checkConsistency()
Allows programmer to test some internal data, before computation begins.
double computeNorm() const
Computes the norm (or length) of the vector.
void letTempDamageBe(double v)
void zero()
Zeroes all coefficients of receiver.
void times(double s)
Multiplies receiver with scalar.
Simple isotropic damage based model for 2d interface elements.
#define _IFT_IntMatBilinearCZFagerstromRate_cstar
void zero()
Zeroes all coefficient of receiver.
void letTempEffectiveMandelTractionBe(FloatArray v)
REGISTER_Material(DummyMaterial)
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.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void printYourself()
Prints receiver state on stdout. Useful for debugging.
const FloatArray & giveTempJump() const
Returns the const pointer to receiver's temporary jump.
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
Class representing integration point in finite element program.
void letTempDamageDevBe(bool v)
Class representing solution step.
void add(const FloatArray &src)
Adds array src to receiver.
void letTempInverseDefGradBe(FloatMatrix v)