NeoPZ
TPZYCLadeKim.h
Go to the documentation of this file.
1 
5 #ifndef TPZYCLADEKIM_H
6 #define TPZYCLADEKIM_H
7 
8 #include "TPZTensor.h"
9 #include "pzfmatrix.h"
10 #include "pzlog.h"
11 
12 #ifndef CHECKCONV
13 #define CHECKCONV
14 #include "checkconv.h"
15 #include "fadType.h"
16 #include "TPZPlasticCriterion.h"
17 #endif
18 
19 #ifdef LOG4CXX_PLASTICITY
20 static LoggerPtr loggerYCLadeKim(Logger::getLogger("plasticity.LadeKim"));
21 #endif
22 
28 
29 public:
30 
31  enum {NYield = 1};
32 
33  virtual int ClassId() const override;
34 
35  TPZYCLadeKim():fKsi1(0.),fh(0.),m_hardening(0.),fKsi2(0.),fMu(0.),fNeta1(0.),fm(0.),fPa(0.),fForceYield(0){ }
36 
37  TPZYCLadeKim(const TPZYCLadeKim & source)
38  {
39  fKsi1 = source.fKsi1;
40  fh = source.fh;
41  m_hardening = source.m_hardening;
42  fKsi2 = source.fKsi2;
43  fMu = source.fMu;
44  fNeta1 = source.fNeta1;
45  fm = source.fm;
46  fPa = source.fPa;
47  fForceYield = source.fForceYield;
48  }
49 
51  {
52  fKsi1 = source.fKsi1;
53  fh = source.fh;
54  m_hardening = source.m_hardening;
55  fKsi2 = source.fKsi2;
56  fMu = source.fMu;
57  fNeta1 = source.fNeta1;
58  fm = source.fm;
59  fPa = source.fPa;
60  fForceYield = source.fForceYield;
61  return *this;
62  }
63 
64  void Write(TPZStream& buf, int withclassid) const override {
65  buf.Write(&fKsi1);
66  buf.Write(&fh);
67  buf.Write(&m_hardening);
68  buf.Write(&fKsi2);
69  buf.Write(&fMu);
70  buf.Write(&fNeta1);
71  buf.Write(&fm);
72  buf.Write(&fPa);
73  buf.Write(&fForceYield);
74  }
75 
76  void Read(TPZStream& buf, void* context) override {
77  buf.Read(&fKsi1);
78  buf.Read(&fh);
79  buf.Read(&m_hardening);
80  buf.Read(&fKsi2);
81  buf.Read(&fMu);
82  buf.Read(&fNeta1);
83  buf.Read(&fm);
84  buf.Read(&fPa);
85  buf.Read(&fForceYield);
86  }
87 
88  const char * Name() const
89  {
90  return "TPZYCLadeKim";
91  }
92 
93  void Print(std::ostream & out) const override
94  {
95  out << "\n" << this->Name();
96  out << "\n fKsi1 = " << fKsi1;
97  out << "\n fh = " << fh;
98  out << "\n m_hardening = " << m_hardening;
99  out << "\n fKsi2 = " << fKsi2;
100  out << "\n fMu = " << fMu;
101  out << "\n fNeta1 = " << fNeta1;
102  out << "\n fm = " << fm;
103  out << "\n fPa = " << fPa;
104  out << "\n fForceYield = " << fForceYield;
105  }
106 
108  {
109  return fForceYield;
110  }
111 
112  void SetForceYield(const int forceYield)
113  {
114  fForceYield = forceYield;
115  }
116 
124  template < class T>
125  void Compute(const TPZTensor<T> & sigma, const T & A, TPZVec<T> &res, int checkForcedYield) const;
126 
134  template < class T>
135  void ComputePlasticPotential(const TPZTensor<T> & sigma, const T & A, T & PlasticPot, int checkForcedYield) const;
136 
144  template <class T>
145  void N(const TPZTensor<T> & sigma,const T & A, TPZVec<TPZTensor<T> > & Ndir, int checkForcedYield) const;
146 
154  template <class T>
155  void H(const TPZTensor<T> & sigma,const T & A, TPZVec<T> & h, int checkForcedYield) const;
156 
157  inline void SetUp(REAL Ksi1, REAL Ksi2, REAL h, REAL Alpha, REAL Mu, REAL neta1, REAL m, REAL pa)
158  {
159  fKsi1 = Ksi1;
160  fKsi2 = Ksi2;
161  fh = h;
162  m_hardening = Alpha;
163  fMu = Mu;
164  fNeta1 = neta1;
165  fm = m;
166  fPa = pa;
167 
168  }
169 
173  template <class T>
174  void AlphaMultiplier(const T &A, T &multiplier) const
175  {
176  multiplier = T(1.);
177  }
178 
186  void SetYieldStatusMode(const TPZTensor<REAL> & sigma, const REAL & A);
187 
188  void YieldFunction(const TPZVec<STATE>& sigma, STATE kprev, TPZVec<STATE>& yield) const override {
189  TPZTensor<STATE> sigmaTensor;
190  sigmaTensor.XX() = sigma[0];
191  sigmaTensor.YY() = sigma[1];
192  sigmaTensor.ZZ() = sigma[2];
193  Compute(sigmaTensor, kprev, yield, 0);
194  }
195 
196  virtual int GetNYield() const override {
197  return as_integer(NYield);
198  }
199 
200 public:
201 
209  REAL fKsi1;
210 
216  REAL fh;
217 
233 
238  REAL fKsi2;
239 
244  REAL fMu;
245 
250  REAL fNeta1;
251 
256  REAL fm;
257 
259  REAL fPa;
260 
263 
264 public:
266 
268  inline int NumCases();
269 
272  inline void LoadState(TPZFMatrix<REAL> &state);
273 
274  inline void ComputeTangent(TPZFMatrix<REAL> &tangent, TPZVec<REAL> &, int icase);
275 
276  inline void Residual(TPZFMatrix<REAL> &res,int icase);
277 
278  static void CheckConv()
279 {
280  const int nVars = 6;
281 
283  TPZYCLadeKim YCLadeKim;
284  // setup with data from Sacramento River Sand
285  // Lade, Poul V., Kim, Moon K. Single Hardening Constitutive Model
286  // for soil, Rock and Concrete. Int. J. Solids Structures, vol32
287  // No14 pp 1963-1978,1995
288  REAL m = 0.093,
289  Ksi2 = -3.09,
290  h = 0.765,
291  Alpha = 0.229,
292  Mu = 2.00,
293  neta1 = 80.,
294  pa = 14.7;
295  REAL Ksi1 = 0.00155 * pow(m, -1.27);
296 
297  YCLadeKim.SetUp(Ksi1, Ksi2, h, Alpha, Mu, neta1, m, pa);
298 
299  TPZFNMatrix<nVars> sigma(nVars,1), Range(nVars,1);
300  sigma(_XX_,0) = 0.17*100.;
301  sigma(_YY_,0) = 0.13*100.;
302  sigma(_ZZ_,0) = 0.11*100.;
303  sigma(_XY_,0) = 0.7 *100.;
304  sigma(_XZ_,0) = 0.5 *100.;
305  sigma(_YZ_,0) = 0.3 *100.;
306 
307  Range = sigma * (1./19.);
308  TPZVec< REAL > Coefs(1,1.);
309  CheckConvergence(YCLadeKim, sigma, Range, Coefs);
310 }
312 
313 public:
314 
315 
316 };
317 
318 
319 template <class T>
320 inline void TPZYCLadeKim::Compute(const TPZTensor<T> & sigma,const T & A, TPZVec<T> &res, int checkForcedYield) const
321 {
322  bool negI1 = false, output;
323  T S, q;
324  T I1 = sigma.I1();
325  if( fabs(TPZExtractVal::val(I1) ) < 1.e-24) I1 /*+*/= 1.e-24; // avoiding Log(0)
326  if( TPZExtractVal::val(I1) < 0.)
327  {
328  I1 = -I1; // avoiding Log(Neg)
329  negI1 = true;
330  }
331  T I2 = sigma.I2();
332  if( fabs(TPZExtractVal::val(I2) ) < 1.e-24) I2 /*+*/= 1.e-24; // avoiding division by zero
333  T I3 = sigma.I3();
334  if( fabs(TPZExtractVal::val(I3) ) < 1.e-24) I3 /*+*/= 1.e-24; // avoiding division by zero
335  //if( TPZExtractVal::val(I3) < 0 ) I3 -= 2* TPZExtractVal::val(I3);
336 
337  T I13_I3 = I1 * I1 * I1 / I3;
338  T I12_I2 = I1 * I1 / I2;
339 
340  //S = T( 1./fNeta1) * ( I13_I3 - T(27.) ) * pow( I1/T(fPa), T(fm) );
341  if(!negI1)
342  {
343  S = T( 1./fNeta1) * ( I13_I3 - T(27.) ) * exp( T(fm) * log( I1/T(fPa) ) );
344  }else
345  {
346  S = T(1.);
347  }
348  REAL S_real = TPZExtractVal::val(S);
349 
350  if(checkForcedYield && fForceYield)
351  {
352  #ifdef LOG4CXX_PLASTICITY
353  {
354  std::stringstream sout;
355  sout << "*** Compute *** Imposing S = 1.0 (when it's " << S_real
356  << ") because fForcedYield was set to TRUE within this PlasticLoop";
357  LOGPZ_INFO(loggerYCLadeKim,sout.str().c_str());
358  }
359  #endif
360  S = T(1.);
361  q = T(1.);
362  }else
363  {//checkForcedYield && fForceYield == FALSE
364  output = false;
365 
366  if(S_real > 1.)
367  {
368  output = true;
369  S = T(1.);
370  // When S > 1 it means that the material has already failed. This implementation
371  // does not consider material softening like the original LadeKim Proposal because
372  // such material behaviour is known to lead to mesh-dependent solutions, which is
373  // not really desired in a FEM method. In this implementation the forced S=1 causes
374  // the material to behave as a perfect plastic material when at failure stress state.
375  }
376 
377  if(S_real < 0.)
378  {
379  output = true;
380  if(S_real > -0.001)
381  {
382  S = T(0.);
383  }else
384  {
385  S = T(1.);
386  // By analysing the expression for S it can be seen that S may be neagtive only in
387  // the case where I3<0. That implies the whole stress state is negative - tension.
388  // The main Lade-Kim hypothesis is that the stress state is always positive, always
389  // in compression. In such an inconsistence, S is forced to assume the value of 1
390  // causing the material to behave as a perfect plastic material and forcing the stress
391  // state moving back at the failure state.
392  }
393  }
394 
395  if(output)
396  {
397  #ifdef LOG4CXX_PLASTICITY
398  {
399  std::stringstream sout;
400  sout << "** Compute *** Forcing S = " << TPZExtractVal::val(S) << " when S = " << S_real
401  << ".\nI1 = " << I1 << "\nI2 = " << I2 << "\nI3 = " << I3
402  << "\nsigma = " << sigma;
403  LOGPZ_WARN(loggerYCLadeKim,sout.str().c_str());
404  }
405  #endif
406  }
407 
408  q = T(m_hardening) * S / (T(1.) - T(1.-m_hardening) * S);
409  }
410 
411  REAL q_real = TPZExtractVal::val(q);
412  output = false;
413 
414  if( q_real < -1.e-10 )
415  {
416  output = true;
417  q = T(0);
418  }
419  if( q_real > 1)
420  {
421  output = true;
422  q = T(1);
423  }
424 
425  if( output )
426  {
427  #ifdef LOG4CXX_PLASTICITY
428  {
429  std::stringstream sout;
430  sout << "** Compute *** Forcing q = " << q << " when q = " << q_real
431  << ".\nI1 = " << I1 << "\nI2 = " << I2 << "\nI3 = " << I3
432  << "\nsigma = " << sigma;
433  LOGPZ_WARN(loggerYCLadeKim,sout.str().c_str());
434  }
435  #endif
436  q = T(1.);
437  }
438 
439  //res[0] = ( T(fKsi1) * I13_I3 - I12_I2 ) * pow( I1/ T(fPa), T(fh) ) * T(exp( q )) - A;
440  res[0] = ( T(fKsi1) * I13_I3 - I12_I2 ) * exp( T(fh) * log( I1/ T(fPa) ) ) * T(exp( q )) - A;
441 }
442 
443 
444 template < class T>
445 inline void TPZYCLadeKim::ComputePlasticPotential(const TPZTensor<T> & sigma, const T & A, T & PlasticPot, int checkForcedYield) const
446 {
447  T I1 = sigma.I1();
448  if( fabs(TPZExtractVal::val(I1) ) < 1.e-24) I1 /*+*/= 1.e-24; // avoiding Log(0)
449  if( TPZExtractVal::val(I1) < 0.) I1 = -I1; // avoiding Log(Neg)
450  T I2 = sigma.I2();
451  if( fabs(TPZExtractVal::val(I2) ) < 1.e-24) I2 /*+*/= 1.e-24; // avoiding division by zero
452  T I3 = sigma.I3();
453  if( fabs(TPZExtractVal::val(I3) ) < 1.e-24) I3 /*+*/= 1.e-24; // avoiding division by zero
454  //if( TPZExtractVal::val(I3) < 0 ) I3 -= 2* TPZExtractVal::val(I3);
455 
456  T I1_2 = I1 * I1;
457  // PlasticPot = ( I1 * I1_2 / I3 * T(fKsi1) - I1_2 / I2 + T(fKsi2) ) * pow( I1/T(fPa), fMu );
458  PlasticPot = ( I1 * I1_2 / I3 * T(fKsi1) - I1_2 / I2 + T(fKsi2) ) *
459  exp( T(fMu) * log(I1/T(fPa) ) );
460 }
461 
462 template <class T>
463 inline void TPZYCLadeKim::N(const TPZTensor<T> & sigma, const T & A, TPZVec<TPZTensor<T> > & Ndir, int checkForcedYield) const
464 {
465  T I1 = sigma.I1();
466  if( fabs(TPZExtractVal::val(I1) ) < 1.e-24) I1 /*+*/= 1.e-24; // avoiding division by zero
467  if( TPZExtractVal::val(I1) < 0.) I1 = -I1; // avoiding Log(Neg)
468  T I2 = sigma.I2();
469  if( fabs(TPZExtractVal::val(I2) ) < 1.e-24) I2 /*+*/= 1.e-24; // avoiding division by zero
470  T I3 = sigma.I3();
471  if( fabs(TPZExtractVal::val(I3) ) < 1.e-24) I3 /*+*/= 1.e-24; // avoiding division by zero
472  //if( TPZExtractVal::val(I3) < 0 ) I3 -= 2* TPZExtractVal::val(I3);
473 
474  // I1_I2 = I1/I2
475  // I12_I22 = I1²/I2²
476  T I1_I2 = I1 / I2;
477  T I12_I22 = I1_I2 * I1_I2;
478 
479  // I12_I3 = I1²/I3
480  // I13_I32 = I1³/I3²
481  T I12_I3 = I1 * I1 / I3;
482  T ksi1_I13_I32 = I12_I3 * I1 / I3 * T(fKsi1);
483 
484  //T I1_Mu = pow( I1 / T(fPa) , fMu );
485  T I1_Mu = exp( T(fMu) * log(I1 / T(fPa) ));
486  T Two_I1_Mu = I1_Mu * T(2.);
487 
488  T G = T( fKsi1 * (fMu + 3.) ) * I12_I3 -
489  T( fMu + 2. ) * I1_I2 +
490  T( fKsi2 * fMu ) / I1;
491 
492  Ndir[0].XX() = I1_Mu * ( G - ( sigma.YY() + sigma.ZZ() ) * I12_I22
493  - ( sigma.YY() * sigma.ZZ() - sigma.YZ()*sigma.YZ() ) * ksi1_I13_I32 );
494 
495  Ndir[0].YY() = I1_Mu * ( G - ( sigma.ZZ() + sigma.XX() ) * I12_I22
496  - ( sigma.ZZ() * sigma.XX() - sigma.XZ()*sigma.XZ() ) * ksi1_I13_I32 );
497 
498  Ndir[0].ZZ() = I1_Mu * ( G - ( sigma.XX() + sigma.YY() ) * I12_I22
499  - ( sigma.XX() * sigma.YY() - sigma.XY()*sigma.XY() ) * ksi1_I13_I32 );
500 
501  Ndir[0].YZ() = Two_I1_Mu * ( I12_I22 * sigma.YZ()
502  - ( sigma.XY() * sigma.XZ() - sigma.XX()*sigma.YZ() ) * ksi1_I13_I32 );
503 
504  Ndir[0].XZ() = Two_I1_Mu * ( I12_I22 * sigma.XZ()
505  - ( sigma.XY() * sigma.YZ() - sigma.YY()*sigma.XZ() ) * ksi1_I13_I32 );
506 
507  Ndir[0].XY() = Two_I1_Mu * ( I12_I22 * sigma.XY()
508  - ( sigma.YZ() * sigma.XZ() - sigma.ZZ()*sigma.XY() ) * ksi1_I13_I32 );
509 
510 
511 
512 }
513 
514 template <class T>
515 inline void TPZYCLadeKim::H(const TPZTensor<T> & sigma,const T & A, TPZVec<T> & h, int checkForcedYield) const
516 {
517  T PlasticPot;
518 
519  ComputePlasticPotential(sigma, A, PlasticPot, checkForcedYield);
520 
521  h[0] = PlasticPot * T(fMu);
522 }
523 
524 inline void TPZYCLadeKim::SetYieldStatusMode(const TPZTensor<REAL> & sigma, const REAL & A)
525 {
526  fForceYield = 0; // unsetting forceYield
527 
528  REAL S;
529  REAL I1 = sigma.I1();
530  //if( fabs(I1) < 1.e-24) I1 /*+*/= 1.e-24; // avoiding Log(0)
531  if( I1 < 0.)
532  {
533  fForceYield = 1;
534  #ifdef LOG4CXX_PLASTICITY
535  {
536  std::stringstream sout;
537  sout << "<<< SetYieldStatusMode *** Imposing fForceYield = TRUE because proposed S = " << S;
538  LOGPZ_INFO(loggerYCLadeKim,sout.str().c_str());
539  }
540  #endif
541  return;
542  }
543  REAL I3 = sigma.I3();
544  if( fabs(TPZExtractVal::val(I3) ) < 1.e-24) I3 /*+*/= 1.e-24; // avoiding division by zero
545 
546  REAL I13_I3 = I1 * I1 * I1 / I3;
547 
548  S = 1./fNeta1 * ( I13_I3 - 27. ) * pow( I1/fPa, fm );
549 
550  if(S < -1.e-10 || S > 1.)
551  {
552  fForceYield = 1;
553  #ifdef LOG4CXX_PLASTICITY
554  {
555  std::stringstream sout;
556  sout << "<<< SetYieldStatusMode *** Imposing fForceYield = TRUE because proposed S = " << S;
557  LOGPZ_INFO(loggerYCLadeKim,sout.str().c_str());
558  }
559  #endif
560  return;
561  }
562 
563  #ifdef LOG4CXX_PLASTICITY
564  {
565  std::stringstream sout;
566  sout << "<<< SetYieldStatusMode *** Leaving fForceYield = FALSE because proposed S = " << S;
567  LOGPZ_INFO(loggerYCLadeKim,sout.str().c_str());
568  }
569  #endif
570 
571 }
572 
574 
576 {
577  return 2;
578 }
579 
581 {
582 #ifdef LOG4CXX_PLASTICITY
583  LoggerPtr logger(Logger::getLogger("plasticity.ycladekim"));
584 #endif
585  int i;
586  for(i=0; i<6; i++) gRefTension[i] = state(i,0);
587 #ifdef LOG4CXX_PLASTICITY
588  std::stringstream sout;
589  sout << "Tension " << state;
590  LOGPZ_DEBUG(logger,sout.str().c_str());
591 #endif
592 }
593 
594 inline void TPZYCLadeKim::ComputeTangent(TPZFMatrix<REAL> &tangent, TPZVec<REAL> &, int icase)
595 {
596 #ifdef LOG4CXX_PLASTICITY
597  LoggerPtr logger(Logger::getLogger("plasticity.ycladekim"));
598 #endif
599 
600  const int nVars = 6;
601  typedef TFad<nVars,REAL> TFAD;
602 
603  int i, j;
604  TPZVec< TPZTensor < REAL > > N_Dir(1);
605  REAL A; // not used, just created to satisfy interface
606  TPZTensor < TFAD > Sigma_FAD;
607  TFAD A_FAD;
608  TPZVec< TPZTensor < TFAD > > N_Dir_FAD(1);
609 
610  switch(icase)
611  {
612  case 0:
613  //Compute N
614  tangent.Redim(1,nVars);
615  N(gRefTension, A, N_Dir, 0);
616  for(i=0; i<nVars; i++)
617  tangent(0,i) = N_Dir[0][i];
618  break;
619  case 1:
620  //Compute derivatives of N
621  tangent.Redim(nVars,nVars);
622  gRefTension.CopyTo(Sigma_FAD);
623  for(i = 0;i < nVars; i++)
624  Sigma_FAD[i].diff(i,nVars);
625  N(Sigma_FAD, A_FAD, N_Dir_FAD, 0);
626  for(i = 0; i < nVars; i++)
627  for(j = 0; j < nVars; j++)
628  tangent(i,j) = N_Dir_FAD[0][i].dx(j);
629  break;
630 
631  }
632 #ifdef LOG4CXX_PLASTICITY
633  std::stringstream sout;
634  sout << "Matriz tangent " << tangent;
635  LOGPZ_DEBUG(logger,sout.str().c_str());
636 #endif
637 }
638 
640 {
641 #ifdef LOG4CXX_PLASTICITY
642  LoggerPtr logger(Logger::getLogger("plasticity.ycladekim"));
643 #endif
644  int i;
645  const int nVars = 6;
646 // typedef TFad<nVars,REAL> TFAD;
647 
648  REAL PlasticPot;
649  REAL A; // not used, just created to satisfy interface
650  TPZVec< TPZTensor<REAL> > N_Dir(1);
651  switch(icase)
652  {
653  case 0:
654  //Compute PlasticPotential
655  res.Redim(1,1);
656  ComputePlasticPotential(gRefTension, A, PlasticPot, 0);
657  res(0,0) = PlasticPot;
658  break;
659  case 1:
660  //Compute Ndir
661  res.Redim(nVars,1);
662  N(gRefTension, A, N_Dir, 0);
663  for(i = 0; i < nVars; i++)
664  res(i,0) = N_Dir[0][i];
665  break;
666  }
667 #ifdef LOG4CXX_PLASTICITY
668  std::stringstream sout;
669  sout << "Residual vector " << res;
670  LOGPZ_DEBUG(logger,sout.str().c_str());
671 #endif
672 }
673 
674 
676 
677 
678 #endif //TPZYCLADEKIM_H
#define _XZ_
Definition: TPZTensor.h:29
void CheckConvergence(TConv &obj, TPZFMatrix< STATE > &state, TPZFMatrix< STATE > &range, TPZVec< REAL > &coefs)
Implements a general procedure to check whether the class TConv implements a consistente tangent matr...
Definition: checkconv.h:23
expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ fabs
Definition: tfadfunc.h:140
void CopyTo(TPZTensor< T1 > &target) const
Definition: TPZTensor.h:819
Contains definitions to LOGPZ_DEBUG, LOGPZ_INFO, LOGPZ_WARN, LOGPZ_ERROR and LOGPZ_FATAL, and the implementation of the inline InitializePZLOG(string) function using log4cxx library or not. It must to be called out of "#ifdef LOG4CXX" scope.
void YieldFunction(const TPZVec< STATE > &sigma, STATE kprev, TPZVec< STATE > &yield) const override
Definition: TPZYCLadeKim.h:188
T I1() const
Definition: TPZTensor.h:903
void Read(TPZStream &buf, void *context) override
read objects from the stream
Definition: TPZYCLadeKim.h:76
static TPZTensor< REAL > gRefTension
Definition: TPZYCLadeKim.h:270
void LoadState(TPZFMatrix< REAL > &state)
LoadState will keep a given state as static variable of the class.
Definition: TPZYCLadeKim.h:580
REAL fm
Parameter related to the Failure Surface m models the curvature of the meridians of the Failure Surf...
Definition: TPZYCLadeKim.h:256
std::underlying_type< Enumeration >::type as_integer(const Enumeration value)
Definition: pzreal.h:37
T & YY() const
Definition: TPZTensor.h:578
void Print(std::ostream &out) const override
Definition: TPZYCLadeKim.h:93
REAL fKsi2
Parameter related to the Plastic Potential Ksi2 controls the intersection of the Plastic Potential w...
Definition: TPZYCLadeKim.h:238
int GetForceYield()
Definition: TPZYCLadeKim.h:107
clarg::argBool h("-h", "help message", false)
This class implements a simple vector storage scheme for a templated class T. Utility.
Definition: pzgeopoint.h:19
#define LOGPZ_WARN(A, B)
Define log for warnings.
Definition: pzlog.h:91
TPZYCLadeKim & operator=(const TPZYCLadeKim &source)
Definition: TPZYCLadeKim.h:50
void Write(TPZStream &buf, int withclassid) const override
Writes this object to the TPZStream buffer. Include the classid if withclassid = true.
Definition: TPZYCLadeKim.h:64
static void CheckConv()
Definition: TPZYCLadeKim.h:278
void SetYieldStatusMode(const TPZTensor< REAL > &sigma, const REAL &A)
Checks if the proposed yield state leads to post-peak material behaviour. If so, the material is forc...
Definition: TPZYCLadeKim.h:524
void ComputeTangent(TPZFMatrix< REAL > &tangent, TPZVec< REAL > &, int icase)
Definition: TPZYCLadeKim.h:594
void Residual(TPZFMatrix< REAL > &res, int icase)
Definition: TPZYCLadeKim.h:639
int fForceYield
Post Peak material behavior.
Definition: TPZYCLadeKim.h:262
REAL fPa
Atmospheric pressure to input/remove dimensional effects.
Definition: TPZYCLadeKim.h:259
REAL fNeta1
Parameter related to the Failure Surface Neta1 is the value of the failure Surface for the material ...
Definition: TPZYCLadeKim.h:250
T & YZ() const
Definition: TPZTensor.h:582
#define LOGPZ_INFO(A, B)
Define log for informations.
Definition: pzlog.h:89
void AlphaMultiplier(const T &A, T &multiplier) const
Definition: TPZYCLadeKim.h:174
virtual void Write(const bool val)
Definition: TPZStream.cpp:8
Contains TPZMatrixclass which implements full matrix (using column major representation).
#define _XX_
Definition: TPZTensor.h:27
void H(const TPZTensor< T > &sigma, const T &A, TPZVec< T > &h, int checkForcedYield) const
Derivada da funcao de plastificacao com respeito a forca termodinamica.
Definition: TPZYCLadeKim.h:515
#define LOGPZ_DEBUG(A, B)
Define log for debug info.
Definition: pzlog.h:87
Definition: tfad.h:64
#define _YZ_
Definition: TPZTensor.h:31
#define _XY_
Definition: TPZTensor.h:28
string res
Definition: test.py:151
virtual int GetNYield() const override
Definition: TPZYCLadeKim.h:196
REAL fMu
Parameter related to the Plastic Potential Mu defines the curvature of the meridians.
Definition: TPZYCLadeKim.h:244
int NumCases()
number of types of residuals
Definition: TPZYCLadeKim.h:575
void SetUp(REAL Ksi1, REAL Ksi2, REAL h, REAL Alpha, REAL Mu, REAL neta1, REAL m, REAL pa)
Definition: TPZYCLadeKim.h:157
static REAL val(const int number)
Definition: pzextractval.h:21
#define _YY_
Definition: TPZTensor.h:30
int Redim(const int64_t newRows, const int64_t newCols) override
Redimension a matrix and ZERO your elements.
Definition: pzfmatrix.h:616
virtual int ClassId() const override
Define the class id associated with the class.
Definition: TPZYCLadeKim.cpp:4
const char * Name() const
Definition: TPZYCLadeKim.h:88
void ComputePlasticPotential(const TPZTensor< T > &sigma, const T &A, T &PlasticPot, int checkForcedYield) const
Calculo da função de potencial plástico.
Definition: TPZYCLadeKim.h:445
#define _ZZ_
Definition: TPZTensor.h:32
void SetForceYield(const int forceYield)
Definition: TPZYCLadeKim.h:112
TPZFlopCounter pow(const TPZFlopCounter &orig, const TPZFlopCounter &xp)
Returns the power and increments the counter of the power.
Definition: pzreal.h:487
T I2() const
Definition: TPZTensor.h:908
expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ log
Definition: tfadfunc.h:130
void Compute(const TPZTensor< T > &sigma, const T &A, TPZVec< T > &res, int checkForcedYield) const
Calculo do criterio de plastificacao.
Definition: TPZYCLadeKim.h:320
T & XX() const
Definition: TPZTensor.h:566
T I3() const
Definition: TPZTensor.h:918
REAL fh
Parameter related to the YC The h constant models the curvature of the YC meridians, i.e., how the meridians vary along with the level of hydrostatic stress (I1/3).
Definition: TPZYCLadeKim.h:216
T & XY() const
Definition: TPZTensor.h:570
T & ZZ() const
Definition: TPZTensor.h:586
expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ exp
Definition: tfadfunc.h:125
Defines the interface for saving and reading data. Persistency.
Definition: TPZStream.h:50
TPZYCLadeKim(const TPZYCLadeKim &source)
Definition: TPZYCLadeKim.h:37
Implementa as funções de potencial plástico e yield criterium do modelo constitutivo de Lade Kim para...
Definition: TPZYCLadeKim.h:27
REAL m_hardening
Parameter related to the YC Alpha models how the exponent q varies according to the proximity of the...
Definition: TPZYCLadeKim.h:232
clarg::argString m("-m", "input matrix file name (text format)", "matrix.txt")
T & XZ() const
Definition: TPZTensor.h:574
Contains the implementation of the CheckConvergence function.
void N(const TPZTensor< T > &sigma, const T &A, TPZVec< TPZTensor< T > > &Ndir, int checkForcedYield) const
Derivada da derivada da funcao de potencial plastico (direção de plastificação)
Definition: TPZYCLadeKim.h:463
Non abstract class which implements full matrices with preallocated storage with (N+1) entries...
Definition: pzfmatrix.h:716
virtual void Read(bool &val)
Definition: TPZStream.cpp:91
REAL fKsi1
Parameter related to the YC and Plastic Potential Ksi1 models the shape of the yield funcition at the...
Definition: TPZYCLadeKim.h:209