85 Qtemp_comp.
at(3) = this->
knc*dJ.
at(3);
90 if (oldDamage < 0.99) {
98 Kstiff.
at(1,1) = this->
ks0;
99 Kstiff.
at(2,2) = this->
ks0;
100 Kstiff.
at(3,3) = this->
kn0;
110 double Qn = Qtrial.
at(3);
117 QtrialShear = Qtrial;
127 double mu = this->
mu;
130 double Qn_M = 0.5*(Qn + fabs(Qn));
133 double loadFun = sigf*pow(Qt/(gamma*sigf),2) + sigf*(1-c)*pow((Qn_M/sigf),2) + sigf*c*(Qn/sigf) -
sigf;
141 if (loadFun/sigf < 0.0000001) {
144 Qtemp.times(1-oldDamage);
151 C1 = (pow((Qt/gamma),2)+(1-c)*pow(Qn_M,2))/(pow(sigf,2));
158 xi = (-C2 + sqrt(pow(C2,2)+4*C1))/(2*C1);
161 xi = (sigf*gamma/Qt)*sqrt(1-c*Qn/sigf);
163 OOFEM_ERROR(
"Inconsistent cohesive model specification, 1-c*Qn/sigf = %e", 1 - c*Qn / sigf);
168 Qn = 0.5*((1+xi)-(1-xi)*
sgn(Qn))*Qn;
169 Qn_M = 0.5*(Qn + fabs(Qn));
171 double beta = pow(Qt,2)*Kstiff.
at(3,3)/(pow(Qn_M,2)*Kstiff.
at(1,1) + pow(Qt,2)*Kstiff.
at(3,3));
173 double G_beta = beta*(this->
GIIc - pow(gamma*sigf,2)/(2*this->
ks0)) + (1-beta)*(this->
GIc - pow(sigf,2)/(2*this->
kn0));
176 double eta = (pow(Qn_M,2) + pow(Qt,2)*Kstiff.
at(3,3)/Kstiff.
at(1,1))/(G_beta*sigf);
178 dAlpha = (1/xi-1)*sigf/(2*Kstiff.
at(3,3))*eta;
180 if ( oldDamage + dAlpha > 1 ) {
181 dAlpha = 1-oldDamage;
188 if ( Qt_trial > 0 ) {
189 Qt1 = Qt*QtrialShear.
at(1)/Qt_trial;
190 Qt2 = Qt*QtrialShear.
at(2)/Qt_trial;
199 Mstar.at(1) = 2*Qt1*this->
kn0/Kstiff.
at(1,1)/(
sigf);
200 Mstar.at(2) = 2*Qt2*this->
kn0/Kstiff.
at(2,2)/(
sigf);
201 Mstar.at(3) = 2*Qn_M/
sigf;
203 M.
at(1) = 2*Qt1/(pow(gamma,2)*
sigf);
204 M.
at(2) = 2*Qt2/(pow(gamma,2)*
sigf);
205 M.
at(3) = 2*(1-c)/(sigf)*Qn_M + c;
210 Smat.at(1,1) = 1.0 + dAlpha*(1/eta)*2*this->
kn0/(sigf);
211 Smat.at(2,2) = 1.0 + dAlpha*(1/eta)*2*this->
kn0/(sigf);
214 Smat.at(3,3) = 1.0 + dAlpha*(1/eta)*2*Kstiff.
at(3,3)/(
sigf);
219 Smat.at(1,4) = (1/eta)*Mstar.at(1);
220 Smat.at(2,4) = (1/eta)*Mstar.at(2);
221 Smat.at(3,4) = (1/eta)*Mstar.at(3);
223 Smat.at(4,1) = M.
at(1)*Kstiff.
at(1,1);
224 Smat.at(4,2) = M.
at(2)*Kstiff.
at(2,2);
225 Smat.at(4,3) = M.
at(3)*Kstiff.
at(3,3);
244 alpha_v.
at(1) = Smati.
at(4,1);
245 alpha_v.
at(2) = Smati.
at(4,2);
246 alpha_v.
at(3) = Smati.
at(4,3);
252 Qtemp.times(1-oldDamage-dAlpha);
259 Qtemp.times(1-oldDamage-dAlpha);
261 if (oldDamage + dAlpha<1) {
262 Qtemp.at(3) = (1-oldDamage)/(1-oldDamage + dAlpha)*Qtemp.at(3);
264 Qtemp.times(1-oldDamage-dAlpha);
267 Qtemp.times(1-oldDamage-dAlpha);
268 Qtemp.at(3) = (1-oldDamage)*(Qold.at(3) + Kstiff.
at(3,3)*dJElastic.at(3));
274 dAlpha = 1.0 - oldDamage;
282 Qtemp.add(Qtemp_comp);
298 Qtemp.
times(1-oldDamage);
299 Qtemp.add(Qtemp_comp);
335 Kstiff.
at(1,1) = this->
ks0;
336 Kstiff.
at(2,2) = this->
ks0;
337 Kstiff.
at(3,3) = this->
kn0;
344 Kstiff.
at(1,1) = 0.0;
345 Kstiff.
at(2,2) = 0.0;
346 Kstiff.
at(3,3) = this->
knc;
356 Kstiff.
at(3,3) = Kstiff.
at(3,3) + (this->
knc)/(1-damage);
361 answer.
times(1-damage);
374 Kstiff.
times(1-damage);
393 answer.
at(3,3) += this->
knc;
417 if ( type == IST_DamageScalar ) {
457 if ( this->
kn0 < 0.0 ) {
460 }
else if ( this->
ks0 < 0.0 ) {
463 }
else if ( this->
GIc < 0.0 ) {
466 }
else if ( this->
GIIc < 0.0 ) {
469 }
else if ( this->
gamma < 0.0 ) {
476 printf(
"In IntMatBilinearCZJansson::initializeFrom: Semi-explicit time integration activated.\n");
491 printf(
"Paramters for BilinearCZMaterial: \n");
493 printf(
"-Strength paramters \n");
494 printf(
" sigf = %e \n", this->
sigf);
495 printf(
" GIc = %e \n", this->
GIc);
496 printf(
" GIIc = %e \n", this->
GIIc);
497 printf(
" gamma = sigfs/sigfn = %e \n", this->
gamma);
498 printf(
" mu = %e \n", this->
mu);
500 printf(
"-Stiffness parameters \n");
501 printf(
" kn0 = %e \n", this->
kn0);
502 printf(
" ks0 = %e \n", this->
ks0);
503 printf(
" knc = %e \n", this->
knc);
538 OOFEM_ERROR(
"BilinearCZMaterialJansson :: giveRealStressVector - oh no wrong element type");
541 lCoords.
at(1) =
gp->giveCoordinate(1);
542 lCoords.
at(2) =
gp->giveCoordinate(2);
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 initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
GaussPoint * gp
Associated integration point.
#define _IFT_IntMatBilinearCZJansson_ks
FloatArray oldMaterialJump
void letTempAlphavBe(FloatArray v)
This class implements associated Material Status for IntMatBilinearCZJansson.
FloatArray tempMaterialJump
virtual void giveFirstPKTraction_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &jump, const FloatMatrix &F, TimeStep *tStep)
double & at(int i)
Coefficient access function.
#define _IFT_IntMatBilinearCZJansson_gamma
void beSubMatrixOf(const FloatMatrix &src, int topRow, int bottomRow, int topCol, int bottomCol)
Assigns to the receiver the sub-matrix of another matrix.
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1) ...
void letTempdTdJBe(FloatMatrix &v)
IntMatBilinearCZJanssonStatus(int n, Domain *d, GaussPoint *g)
Constructor.
void letTempDamageBe(double v)
virtual ~IntMatBilinearCZJansson()
Destructor.
const FloatMatrix & giveTempInverseDefGrad()
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Element * giveElement()
Returns corresponding element to receiver.
virtual void give3dStiffnessMatrix_dTdj(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
const FloatArray & giveOldMaterialJump()
virtual ~IntMatBilinearCZJanssonStatus()
Destructor.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
void letTempDamageDevBe(bool v)
#define _IFT_IntMatBilinearCZJansson_semiexplicit
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
const FloatArray & giveTempAlphav()
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
void evalInitialCovarBaseVectorsAt(const FloatArray &lCoords, FloatMatrix &Gcov)
IntMatBilinearCZJansson(int n, Domain *d)
Constructor.
const FloatArray & giveTempEffectiveMandelTraction()
void letOldDamageDevBe(bool v)
void letTempJumpBe(FloatArray v)
Assigns tempJump to given vector v.
void times(double f)
Multiplies receiver by factor f.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
void letTempIepBe(FloatMatrix v)
This class implements a structural interface material status information.
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.
double kn0
Material parameters.
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.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
Class representing vector of real numbers.
const FloatArray & giveEffectiveMandelTraction()
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
This class represent a 7 parameter shell element.
void letTempMaterialJumpBe(FloatArray v)
double computeNorm() const
Computes the norm (or length) of the vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void printYourself()
Prints receiver state on stdout. Useful for debugging.
void zero()
Zeroes all coefficients of receiver.
#define _IFT_IntMatBilinearCZJansson_sigf
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
void copyColumn(FloatArray &dest, int c) const
Fetches the values from the specified column.
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
#define _IFT_IntMatBilinearCZJansson_knc
void setColumn(const FloatArray &src, int c)
Sets the values of the matrix in specified column.
void times(double s)
Multiplies receiver with scalar.
FloatArray tempQEffective
void zero()
Zeroes all coefficient of receiver.
#define _IFT_IntMatBilinearCZJansson_mu
virtual int checkConsistency()
Allows programmer to test some internal data, before computation begins.
void beUnitMatrix()
Sets receiver to unity matrix.
const FloatMatrix & giveOlddTdJ()
REGISTER_Material(DummyMaterial)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
Abstract base class for all "structural" interface models.
const FloatMatrix & giveTempIep()
the oofem namespace is to define a context or scope in which all oofem names are defined.
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.
void letTempEffectiveMandelTractionBe(FloatArray v)
double normalize()
Normalizes receiver.
#define _IFT_IntMatBilinearCZJansson_g2c
#define _IFT_IntMatBilinearCZJansson_g1c
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Class representing solution step.
void add(const FloatArray &src)
Adds array src to receiver.
void letTempInverseDefGradBe(FloatMatrix v)
void resize(int s)
Resizes receiver towards requested size.
#define _IFT_IntMatBilinearCZJansson_kn