OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
intmatbilinczjansson.C
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #include "gausspoint.h"
36 #include "floatmatrix.h"
37 #include "floatarray.h"
38 #include "mathfem.h"
39 #include "datastream.h"
40 #include "contextioerr.h"
41 #include "classfactory.h"
42 #include "intmatbilinczjansson.h"
43 
44 namespace oofem {
45 
46 REGISTER_Material( IntMatBilinearCZJansson );
47 
48 
50  mSemiExplicit(false)
51 { }
52 
53 
55 
57 void
59  const FloatMatrix &F, TimeStep *tStep)
60 {
61  // returns real stress vector in 3d stress space of receiver according to
62  // previous level of stress and current
63  // strain increment, the only way, how to correctly update gp records
64 
65  IntMatBilinearCZJanssonStatus *status = static_cast< IntMatBilinearCZJanssonStatus * >( this->giveStatus(gp) );
66 
67  FloatMatrix Finv;
68 
69  Finv.beInverseOf(F);
70  status->letTempInverseDefGradBe(Finv);
71 
72  FloatArray dJ;
73  dJ.beProductOf(Finv,d);
74 
75 
76  status->letTempMaterialJumpBe(dJ);
77 
78  double oldDamage = status->giveDamage();
79  double dAlpha = 0.0;
80  FloatArray Qold(3), Qtemp(3), Qtemp_comp(3);
81  Qtemp.zero();
82  Qtemp_comp.zero();
83 
84  if ( dJ.at(3) < 0 ) {
85  Qtemp_comp.at(3) = this->knc*dJ.at(3);
86  }
87 
88  FloatArray Qtrial = status->giveEffectiveMandelTraction();
89 
90  if (oldDamage < 0.99) {
91 
92  //FloatArray Qtrial = status->giveEffectiveMandelTraction();
93 
94  FloatMatrix Kstiff(3,3);
95  FloatArray help;
96 
97  Kstiff.zero();
98  Kstiff.at(1,1) = this->ks0;
99  Kstiff.at(2,2) = this->ks0;
100  Kstiff.at(3,3) = this->kn0;
101  //} else {
102  // Kstiff.at(3,3) = this->kn0/(1-oldDamage);
103  //}
104 
105  dJ.subtract(status->giveOldMaterialJump());
106 
107  help.beProductOf(Kstiff, dJ);
108  Qtrial.add(help);
109 
110  double Qn = Qtrial.at(3);
111  FloatArray QN(3);
112  QN.zero();
113  QN.at(3) = Qn;
114 
115  FloatArray QtrialShear;
116 
117  QtrialShear = Qtrial;
118  QtrialShear.subtract(QN);
119 
120  double Qt = QtrialShear.computeNorm();
121 
122 
123 // double S = this->GIc/this->sigf;
124  double sigf = this->sigf;
125  double gamma = this->gamma;
126 // double gammaGf = this->GIIc/this->GIc;
127  double mu = this->mu;
128  double c = mu/gamma;
129 
130  double Qn_M = 0.5*(Qn + fabs(Qn));
131 // double loadFun = sigf*pow(Qt/(gamma*sigf),2) + sigf*pow((Qn_M/sigf),2) - sigf; ///@todo Martin: no use of parameter mu!!!
132 
133  double loadFun = sigf*pow(Qt/(gamma*sigf),2) + sigf*(1-c)*pow((Qn_M/sigf),2) + sigf*c*(Qn/sigf) - sigf;
134 
135  Qold = status->giveEffectiveMandelTraction();
136  Qtemp = Qtrial;
137 
138  //Qold.rotatedWith(Rot,'n');
139 
140 
141  if (loadFun/sigf < 0.0000001) {
142  dAlpha = 0.0; // new_alpha=old_alpha
143  status->letTempEffectiveMandelTractionBe(Qtemp);
144  Qtemp.times(1-oldDamage);
145  } else {
146  status->letTempDamageDevBe(true);
147 
148  // dalpha = datr
149  double C1,C2;
150 
151  C1 = (pow((Qt/gamma),2)+(1-c)*pow(Qn_M,2))/(pow(sigf,2));
152  C2 = c*Qn_M/sigf;
153 
154  //double xi = (-C2 + sqrt(pow(C2,2)+(1-c*Qn_M/sigf)*4*C1))/(2*C1);
155  double xi = 0.0;
156 
157  if (Qn >=0) {
158  xi = (-C2 + sqrt(pow(C2,2)+4*C1))/(2*C1);
159  } else {
160  if (1-c*Qn/sigf>0) {
161  xi = (sigf*gamma/Qt)*sqrt(1-c*Qn/sigf);
162  } else {
163  OOFEM_ERROR("Inconsistent cohesive model specification, 1-c*Qn/sigf = %e", 1 - c*Qn / sigf);
164  }
165  }
166 
167  Qt = xi*Qt;
168  Qn = 0.5*((1+xi)-(1-xi)*sgn(Qn))*Qn;
169  Qn_M = 0.5*(Qn + fabs(Qn));
170 
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));
172 
173  double G_beta = beta*(this->GIIc - pow(gamma*sigf,2)/(2*this->ks0)) + (1-beta)*(this->GIc - pow(sigf,2)/(2*this->kn0)); // assuming linear interpolation between mode I and II
174 
175 
176  double eta = (pow(Qn_M,2) + pow(Qt,2)*Kstiff.at(3,3)/Kstiff.at(1,1))/(G_beta*sigf);
177 
178  dAlpha = (1/xi-1)*sigf/(2*Kstiff.at(3,3))*eta;
179 
180  if ( oldDamage + dAlpha > 1 ) {
181  dAlpha = 1-oldDamage;
182  }
183 
184  double Qt_trial = QtrialShear.computeNorm();
185 
186  double Qt1,Qt2;
187 
188  if ( Qt_trial > 0 ) {
189  Qt1 = Qt*QtrialShear.at(1)/Qt_trial;
190  Qt2 = Qt*QtrialShear.at(2)/Qt_trial;
191  } else {
192  Qt1 = 0.0;
193  Qt2 = 0.0;
194  }
195 
196 
197  FloatArray Mstar(3), M(3);
198 
199  Mstar.at(1) = 2*Qt1*this->kn0/Kstiff.at(1,1)/(sigf); // Qt = sqrt(Qt1^2 + Qt2^2)
200  Mstar.at(2) = 2*Qt2*this->kn0/Kstiff.at(2,2)/(sigf);
201  Mstar.at(3) = 2*Qn_M/sigf;
202 
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;
206 
207  FloatMatrix Smat(4,4), Smati(4,4);
208  Smat.zero(); // S_mat=0.d0
209 
210  Smat.at(1,1) = 1.0 + dAlpha*(1/eta)*2*this->kn0/(sigf); // S_mat(1:2,1:2) = eye3(1:2,1:2)+ dalpha*S*dMdJtn_e(1:2,1:2)
211  Smat.at(2,2) = 1.0 + dAlpha*(1/eta)*2*this->kn0/(sigf);
212 
213  if ( Qn_M > 0 ) {
214  Smat.at(3,3) = 1.0 + dAlpha*(1/eta)*2*Kstiff.at(3,3)/(sigf);
215  } else {
216  Smat.at(3,3) = 1.0;
217  }
218 
219  Smat.at(1,4) = (1/eta)*Mstar.at(1); // S_mat(1:2,3) = S*M(1:2)
220  Smat.at(2,4) = (1/eta)*Mstar.at(2);
221  Smat.at(3,4) = (1/eta)*Mstar.at(3);
222 
223  Smat.at(4,1) = M.at(1)*Kstiff.at(1,1); // S_mat(3,1:2) = MATMUL(M(1:2),Keye3(1:2,1:2))
224  Smat.at(4,2) = M.at(2)*Kstiff.at(2,2);
225  Smat.at(4,3) = M.at(3)*Kstiff.at(3,3);
226  //Smat.printYourself();
227  Smati.beInverseOf(Smat);
228 
229  Qtemp.at(1) = Qt1;
230  Qtemp.at(2) = Qt2;
231  Qtemp.at(3) = Qn;
232 
233  IntArray Indx(3);
234  Indx.at(1) = 1;
235  Indx.at(2) = 2;
236  Indx.at(3) = 3;
237 
238  FloatMatrix Iep(3,3);
239  Iep.beSubMatrixOf(Smati,Indx,Indx);
240 
241  status->letTempIepBe(Iep);
242 
243  FloatArray alpha_v(3);
244  alpha_v.at(1) = Smati.at(4,1); // alpha_v(1:2) = S_mati(3,1:2)
245  alpha_v.at(2) = Smati.at(4,2);
246  alpha_v.at(3) = Smati.at(4,3);
247  status->letTempAlphavBe(alpha_v);
248 
249  dJ = status->giveTempJump();
250  status->letTempEffectiveMandelTractionBe(Qtemp);
251 
252  Qtemp.times(1-oldDamage-dAlpha);
253 
254 
255 
256 #if 0
257  if (dJ.at(3)>=0) {
258  status->letTempEffectiveMandelTractionBe(Qtemp);
259  Qtemp.times(1-oldDamage-dAlpha);
260  } else {
261  if (oldDamage + dAlpha<1) {
262  Qtemp.at(3) = (1-oldDamage)/(1-oldDamage + dAlpha)*Qtemp.at(3);
263  status->letTempEffectiveMandelTractionBe(Qtemp);
264  Qtemp.times(1-oldDamage-dAlpha);
265  } else {
266  status->letTempEffectiveMandelTractionBe(Qtemp); // SHOULD NEVER BE USED
267  Qtemp.times(1-oldDamage-dAlpha);
268  Qtemp.at(3) = (1-oldDamage)*(Qold.at(3) + Kstiff.at(3,3)*dJElastic.at(3)); // dJElastic.at(3) is always equal to dJ.at(3) if dJ.at(3)<0
269  }
270  }
271 #endif
272  }
273  } else {
274  dAlpha = 1.0 - oldDamage;
275  dJ = status->giveTempJump();
276  status->letTempEffectiveMandelTractionBe(Qtemp); // SHOULD NEVER BE USED!!
277  //if (dJ.at(3)<0) {
278  // Qtemp.at(3) = kn0*dJ.at(3);
279  //}
280  }
281 
282  Qtemp.add(Qtemp_comp);
283 
284  answer.beTProductOf(Finv,Qtemp); // t_1_hat = MATMUL(TRANSPOSE(Fci),Q)
285 // answer.times(1-oldDamage-dAlpha); // t1_s = (1-al)*t_1_hat
286 
287 
288  status->letTempDamageBe(oldDamage + dAlpha);
289 // status->letTempEffectiveMandelTractionBe(Qtemp); // NEW!
290 
291  status->letTempJumpBe(d);
292  status->letTempFirstPKTractionBe(answer);
293  status->letTempFBe(F);
294 
295  if(mSemiExplicit) {
296 
297  Qtemp = Qtrial;
298  Qtemp.times(1-oldDamage);
299  Qtemp.add(Qtemp_comp);
300  answer.beTProductOf(Finv,Qtemp); // t_1_hat = MATMUL(TRANSPOSE(Fci),Q)
301 
302  }
303 
304 }
305 
306 
307 void
308 
310 {
311 
312  answer.resize(3,3);
313  answer.zero();
314  //this->give3dStiffnessMatrix_dTdj_num(answer, rMode, gp, tStep);
315  //OOFEM_WARNING("numerical tangent");
316  //answer.printYourself();
317 
318  IntMatBilinearCZJanssonStatus *status = static_cast< IntMatBilinearCZJanssonStatus * >( this->giveStatus(gp) );
319 
320  if (status->giveOldDamageDev()) {
321  answer = status->giveOlddTdJ();
322  //answer.printYourself();
323  status->letOldDamageDevBe(false);
324  } else {
325 
326  double damage = status->giveTempDamage();
327  const FloatMatrix &Finv = status->giveTempInverseDefGrad();
328  FloatMatrix help;
329  FloatMatrix Kstiff(3,3);
330  const FloatArray &J = status->giveTempJump();
331  answer.zero();
332 
333  //FloatMatrix Rot = status->giveTempRotationMatrix();
334  Kstiff.zero();
335  Kstiff.at(1,1) = this->ks0;
336  Kstiff.at(2,2) = this->ks0;
337  Kstiff.at(3,3) = this->kn0;
338  //Kstiff.rotatedWith(Rot);
339 
340  if (damage >= 1.0) {
341  answer.resize(3,3);
342  answer.zero();
343  if (J.at(3)<0) {
344  Kstiff.at(1,1) = 0.0;
345  Kstiff.at(2,2) = 0.0;
346  Kstiff.at(3,3) = this->knc;
347 
348  help.beProductOf(Kstiff, Finv);
349  answer.beTProductOf(Finv, help);
350  //answer.printYourself();
351  }
352  } else {
353  if ( status->giveTempDamage() - status->giveDamage()==0.0 ) {
354 
355  if ( J.at(3) < 0 ) {
356  Kstiff.at(3,3) = Kstiff.at(3,3) + (this->knc)/(1-damage);
357  }
358 
359  help.beProductOf(Kstiff, Finv);
360  answer.beTProductOf(Finv, help);
361  answer.times(1-damage); // Ea=(1-new_alpha)*MATMUL(TRANSPOSE(Fci),MATMUL(Keye3,Fci))
362  } else {
363  FloatMatrix Iep = status->giveTempIep();
364 
365  //Iep.printYourself();
366 
367  //if (J.at(3)<0) {
368  // Kstiff.at(1,1) = (1-damage)*Kstiff.at(1,1);
369  // Kstiff.at(2,2) = (1-damage)*Kstiff.at(2,2);
370  // Kstiff.at(3,3) = Kstiff.at(3,3);
371  //} else {
372  // Kstiff.times((1-damage));
373  //}
374  Kstiff.times(1-damage);
375 
376  answer.beProductOf(Kstiff, Iep);
377  //answer.rotatedWith(Rot); // Ea_h = MATMUL(TRANSPOSE(Rot),MATMUL(Keye3,Iep))
378  // Ea_h = MATMUL(Ea_h,Rot)
379 
380  FloatArray alpha_v = status->giveTempAlphav();
381  //alpha_v.rotatedWith(Rot, 't'); // alpha_v = MATMUL(TRANSPOSE(Rot),alpha_v)
382 
383  FloatMatrix t1hatFinvOpen;
384  FloatArray temp1, temp2, Qtemp;
385  Qtemp = status->giveTempEffectiveMandelTraction();
386 
387  temp1.beTProductOf(Finv,Qtemp); // CALL gmopen33(MATMUL(TRANSPOSE(Fci),Q),MATMUL(alpha_v,Fci),t1halFci_o)
388  temp2.beTProductOf(Finv,alpha_v);
389 
390  t1hatFinvOpen.beDyadicProductOf(temp1,temp2);
391 
392  if ( J.at(3) < 0 ) {
393  answer.at(3,3) += this->knc;
394  }
395 
396  help.beProductOf(answer,Finv); // Ea = (1-new_alpha)*MATMUL(TRANSPOSE(Fci),MATMUL(Ea_h,Fci)) -&
397  answer.beTProductOf(Finv,help); // t1halFci_o
398  // answer.times(1-damage);
399  answer.subtract(t1hatFinvOpen);
400  }
401  }
402  }
403  status->letTempdTdJBe(answer);
404 
405  //Finv.printYourself();
406  //Kstiff.printYourself();
407  //printf("analytical tangent \n");
408  //answer.printYourself();
409 
410 }
411 
412 
413 int
415 {
416  IntMatBilinearCZJanssonStatus *status = static_cast< IntMatBilinearCZJanssonStatus * >( this->giveStatus(gp) );
417  if ( type == IST_DamageScalar ) {
418  answer.resize(1);
419  answer.at(1) = status->giveTempDamage();
420  return 1;
421  } else {
422  return StructuralInterfaceMaterial :: giveIPValue(answer, gp, type, atTime);
423  }
424 
425 }
426 
427 
428 
429 
430 
431 
432 const double tolerance = 1.0e-12; // small number
435 {
436  IRResultType result; // Required by IR_GIVE_FIELD macro
437 
439  this->knc = kn0; // Defaults to the same stiffness in compression and tension
441 
442  this->ks0 = kn0; // Defaults to kn0
444 
446 
447  this->GIIc = GIc; //Defaults to GIc
449 
451 
453 
455 
456  // check validity of the material paramters
457  if ( this->kn0 < 0.0 ) {
458  OOFEM_WARNING("stiffness kn0 is negative (%.2e)", this->kn0);
459  return IRRT_BAD_FORMAT;
460  } else if ( this->ks0 < 0.0 ) {
461  OOFEM_WARNING("stiffness ks0 is negative (%.2e)", this->ks0);
462  return IRRT_BAD_FORMAT;
463  } else if ( this->GIc < 0.0 ) {
464  OOFEM_WARNING("GIc is negative (%.2e)", this->GIc);
465  return IRRT_BAD_FORMAT;
466  } else if ( this->GIIc < 0.0 ) {
467  OOFEM_WARNING("GIIc is negative (%.2e)", this->GIIc);
468  return IRRT_BAD_FORMAT;
469  } else if ( this->gamma < 0.0 ) {
470  OOFEM_WARNING("gamma (%.2e) is below zero which is unphysical", this->gamma);
471  return IRRT_BAD_FORMAT;
472  }
473 
475  mSemiExplicit = true;
476  printf("In IntMatBilinearCZJansson::initializeFrom: Semi-explicit time integration activated.\n");
477  }
478 
479  return IRRT_OK;
480 }
481 
482 int
484 {
485  return 1;
486 }
487 
488 void
490 {
491  printf("Paramters for BilinearCZMaterial: \n");
492 
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);
499 
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);
504 
505 }
506 
507 
508 //IntMatBilinearCZJanssonStatus :: IntMatBilinearCZJanssonStatus(int n, Domain *d, GaussPoint *g) : StructuralMaterialStatus(n, d, g)
510 {
514 
515  damage = tempDamage = 0.0;
516 
519 
520 
521  tempFInv.resize(3,3);
523 
524  old_dTdJ.resize(3,3);
525  old_dTdJ.zero();
526 
527  oldDamageDev = false;
528 
529 
530 #if 0
531  //*************************************************************
533  FloatMatrix Gcov;
534  FloatArray N;
535 
536  Shell7Base *shell = dynamic_cast< Shell7Base* >(gp->giveElement());
537  if ( !shell ) {
538  OOFEM_ERROR("BilinearCZMaterialJansson :: giveRealStressVector - oh no wrong element type");
539  }
540  FloatArray lCoords(3);
541  lCoords.at(1) = gp->giveCoordinate(1);
542  lCoords.at(2) = gp->giveCoordinate(2);
543  shell->evalInitialCovarBaseVectorsAt(lCoords, Gcov);
544 
545  FloatArray G1, G2;
546  Gcov.copyColumn(G1,1);
547  Gcov.copyColumn(G2,2);
548  N.beVectorProductOf(G1,G2);
549  N.normalize();
550 
551  tempRot.resize(3,3);
552  G1.normalize();
553  G2.beVectorProductOf(N, G1);
554  tempRot.setColumn(G1,1);
555  tempRot.setColumn(G2,2);
556  tempRot.setColumn(N,3);
557 #endif
558 
559  Iep = tempFInv;
561 }
562 
563 
565 { }
566 
567 
568 void
570 {
573  /*
574  fprintf(file, "status { ");
575  if ( this->damage > 0.0 ) {
576  fprintf(file, "kappa %f, damage %f ", this->kappa, this->damage);
577  }
578 
579  fprintf(file, "}\n");
580  */
581 }
582 
583 
584 void
586 {
588 
590  tempDamage = damage;
592 
593  tempFInv.resize(3,3);
594  tempFInv.zero();
595 
596  Iep = tempFInv;
598 
599  tempFInv.at(1,1)=1.;
600  tempFInv.at(2,2)=1.;
601  tempFInv.at(3,3)=1.;
602 
603  tempDamageDev = false;
604 }
605 
606 void
608 {
610  damage = tempDamage;
613 
616 }
617 
618 
619 } // end namespace oofem
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
Definition: floatarray.C:258
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.
Definition: material.C:244
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...
Definition: floatarray.C:415
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
#define _IFT_IntMatBilinearCZJansson_ks
This class implements associated Material Status for IntMatBilinearCZJansson.
virtual void giveFirstPKTraction_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &jump, const FloatMatrix &F, TimeStep *tStep)
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
#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.
Definition: floatmatrix.C:962
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1) ...
Definition: mathfem.h:91
IntMatBilinearCZJanssonStatus(int n, Domain *d, GaussPoint *g)
Constructor.
virtual ~IntMatBilinearCZJansson()
Destructor.
virtual bool hasField(InputFieldType id)=0
Returns true if record contains field identified by idString keyword.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Element * giveElement()
Returns corresponding element to receiver.
Definition: gausspoint.h:188
virtual void give3dStiffnessMatrix_dTdj(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
virtual ~IntMatBilinearCZJanssonStatus()
Destructor.
Class implementing an array of integers.
Definition: intarray.h:61
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
MatResponseMode
Describes the character of characteristic material matrix.
#define _IFT_IntMatBilinearCZJansson_semiexplicit
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
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)
Definition: shell7base.C:222
IntMatBilinearCZJansson(int n, Domain *d)
Constructor.
const FloatArray & giveTempEffectiveMandelTraction()
#define OOFEM_ERROR(...)
Definition: error.h:61
void letTempJumpBe(FloatArray v)
Assigns tempJump to given vector v.
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
This class implements a structural interface material status information.
#define N(p, q)
Definition: mdm.C:367
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
Definition: floatarray.C:708
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
const double tolerance
Definition: expczmaterial.C:45
double kn0
Material parameters.
void letTempFirstPKTractionBe(FloatArray v)
Assigns tempFirstPKTraction to given vector v.
void subtract(const FloatMatrix &a)
Subtracts matrix from the receiver.
Definition: floatmatrix.C:1084
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
This class represent a 7 parameter shell element.
Definition: shell7base.h:68
double computeNorm() const
Computes the norm (or length) of the vector.
Definition: floatarray.C:840
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
Class representing the general Input Record.
Definition: inputrecord.h:101
void printYourself()
Prints receiver state on stdout. Useful for debugging.
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
#define _IFT_IntMatBilinearCZJansson_sigf
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
Definition: floatmatrix.C:492
void copyColumn(FloatArray &dest, int c) const
Fetches the values from the specified column.
Definition: floatmatrix.C:662
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
Definition: floatmatrix.C:367
#define _IFT_IntMatBilinearCZJansson_knc
void setColumn(const FloatArray &src, int c)
Sets the values of the matrix in specified column.
Definition: floatmatrix.C:648
void times(double s)
Multiplies receiver with scalar.
Definition: floatarray.C:818
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
#define _IFT_IntMatBilinearCZJansson_mu
virtual int checkConsistency()
Allows programmer to test some internal data, before computation begins.
void beUnitMatrix()
Sets receiver to unity matrix.
Definition: floatmatrix.C:1332
REGISTER_Material(DummyMaterial)
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
Definition: floatmatrix.C:337
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.
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
const FloatArray & giveTempJump() const
Returns the const pointer to receiver&#39;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.
Definition: floatmatrix.C:835
double normalize()
Normalizes receiver.
Definition: floatarray.C:828
#define _IFT_IntMatBilinearCZJansson_g2c
#define _IFT_IntMatBilinearCZJansson_g1c
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define OOFEM_WARNING(...)
Definition: error.h:62
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Class representing solution step.
Definition: timestep.h:80
void add(const FloatArray &src)
Adds array src to receiver.
Definition: floatarray.C:156
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
#define _IFT_IntMatBilinearCZJansson_kn

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011