19 #ifdef LOG4CXX_PLASTICITY 20 static LoggerPtr loggerYCLadeKim(Logger::getLogger(
"plasticity.LadeKim"));
33 virtual int ClassId()
const override;
90 return "TPZYCLadeKim";
93 void Print(std::ostream & out)
const override 95 out <<
"\n" << this->
Name();
96 out <<
"\n fKsi1 = " <<
fKsi1;
97 out <<
"\n fh = " <<
fh;
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;
157 inline void SetUp(REAL Ksi1, REAL Ksi2, REAL h, REAL Alpha, REAL Mu, REAL neta1, REAL
m, REAL pa)
190 sigmaTensor.
XX() = sigma[0];
191 sigmaTensor.
YY() = sigma[1];
192 sigmaTensor.
ZZ() = sigma[2];
193 Compute(sigmaTensor, kprev, yield, 0);
295 REAL Ksi1 = 0.00155 *
pow(m, -1.27);
297 YCLadeKim.
SetUp(Ksi1, Ksi2, h, Alpha, Mu, neta1, m, pa);
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.;
307 Range = sigma * (1./19.);
322 bool negI1 =
false, output;
337 T I13_I3 = I1 * I1 * I1 / I3;
338 T I12_I2 = I1 * I1 / I2;
352 #ifdef LOG4CXX_PLASTICITY 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());
397 #ifdef LOG4CXX_PLASTICITY 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());
414 if( q_real < -1.e-10 )
427 #ifdef LOG4CXX_PLASTICITY 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());
440 res[0] = ( T(
fKsi1) * I13_I3 - I12_I2 ) *
exp( T(
fh) *
log( I1/ T(
fPa) ) ) * T(
exp( q )) - A;
458 PlasticPot = ( I1 * I1_2 / I3 * T(
fKsi1) - I1_2 / I2 + T(
fKsi2) ) *
477 T I12_I22 = I1_I2 * I1_I2;
481 T I12_I3 = I1 * I1 / I3;
482 T ksi1_I13_I32 = I12_I3 * I1 / I3 * T(
fKsi1);
486 T Two_I1_Mu = I1_Mu * T(2.);
488 T G = T(
fKsi1 * (
fMu + 3.) ) * I12_I3 -
489 T(
fMu + 2. ) * I1_I2 +
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 );
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 );
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 );
501 Ndir[0].YZ() = Two_I1_Mu * ( I12_I22 * sigma.
YZ()
502 - ( sigma.
XY() * sigma.
XZ() - sigma.
XX()*sigma.
YZ() ) * ksi1_I13_I32 );
504 Ndir[0].XZ() = Two_I1_Mu * ( I12_I22 * sigma.
XZ()
505 - ( sigma.
XY() * sigma.
YZ() - sigma.
YY()*sigma.
XZ() ) * ksi1_I13_I32 );
507 Ndir[0].XY() = Two_I1_Mu * ( I12_I22 * sigma.
XY()
508 - ( sigma.
YZ() * sigma.
XZ() - sigma.
ZZ()*sigma.
XY() ) * ksi1_I13_I32 );
521 h[0] = PlasticPot * T(
fMu);
529 REAL I1 = sigma.
I1();
534 #ifdef LOG4CXX_PLASTICITY 536 std::stringstream sout;
537 sout <<
"<<< SetYieldStatusMode *** Imposing fForceYield = TRUE because proposed S = " << S;
538 LOGPZ_INFO(loggerYCLadeKim,sout.str().c_str());
543 REAL I3 = sigma.
I3();
546 REAL I13_I3 = I1 * I1 * I1 / I3;
550 if(S < -1.e-10 || S > 1.)
553 #ifdef LOG4CXX_PLASTICITY 555 std::stringstream sout;
556 sout <<
"<<< SetYieldStatusMode *** Imposing fForceYield = TRUE because proposed S = " << S;
557 LOGPZ_INFO(loggerYCLadeKim,sout.str().c_str());
563 #ifdef LOG4CXX_PLASTICITY 565 std::stringstream sout;
566 sout <<
"<<< SetYieldStatusMode *** Leaving fForceYield = FALSE because proposed S = " << S;
567 LOGPZ_INFO(loggerYCLadeKim,sout.str().c_str());
582 #ifdef LOG4CXX_PLASTICITY 583 LoggerPtr logger(Logger::getLogger(
"plasticity.ycladekim"));
587 #ifdef LOG4CXX_PLASTICITY 588 std::stringstream sout;
589 sout <<
"Tension " << state;
596 #ifdef LOG4CXX_PLASTICITY 597 LoggerPtr logger(Logger::getLogger(
"plasticity.ycladekim"));
614 tangent.
Redim(1,nVars);
616 for(i=0; i<nVars; i++)
617 tangent(0,i) = N_Dir[0][i];
621 tangent.
Redim(nVars,nVars);
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);
632 #ifdef LOG4CXX_PLASTICITY 633 std::stringstream sout;
634 sout <<
"Matriz tangent " << tangent;
641 #ifdef LOG4CXX_PLASTICITY 642 LoggerPtr logger(Logger::getLogger(
"plasticity.ycladekim"));
657 res(0,0) = PlasticPot;
663 for(i = 0; i < nVars; i++)
664 res(i,0) = N_Dir[0][i];
667 #ifdef LOG4CXX_PLASTICITY 668 std::stringstream sout;
669 sout <<
"Residual vector " <<
res;
678 #endif //TPZYCLADEKIM_H
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...
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
void CopyTo(TPZTensor< T1 > &target) const
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
void Read(TPZStream &buf, void *context) override
read objects from the stream
static TPZTensor< REAL > gRefTension
void LoadState(TPZFMatrix< REAL > &state)
LoadState will keep a given state as static variable of the class.
REAL fm
Parameter related to the Failure Surface m models the curvature of the meridians of the Failure Surf...
std::underlying_type< Enumeration >::type as_integer(const Enumeration value)
void Print(std::ostream &out) const override
REAL fKsi2
Parameter related to the Plastic Potential Ksi2 controls the intersection of the Plastic Potential w...
clarg::argBool h("-h", "help message", false)
This class implements a simple vector storage scheme for a templated class T. Utility.
#define LOGPZ_WARN(A, B)
Define log for warnings.
TPZYCLadeKim & operator=(const TPZYCLadeKim &source)
void Write(TPZStream &buf, int withclassid) const override
Writes this object to the TPZStream buffer. Include the classid if withclassid = true.
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...
void ComputeTangent(TPZFMatrix< REAL > &tangent, TPZVec< REAL > &, int icase)
void Residual(TPZFMatrix< REAL > &res, int icase)
int fForceYield
Post Peak material behavior.
REAL fPa
Atmospheric pressure to input/remove dimensional effects.
REAL fNeta1
Parameter related to the Failure Surface Neta1 is the value of the failure Surface for the material ...
#define LOGPZ_INFO(A, B)
Define log for informations.
void AlphaMultiplier(const T &A, T &multiplier) const
virtual void Write(const bool val)
Contains TPZMatrixclass which implements full matrix (using column major representation).
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.
#define LOGPZ_DEBUG(A, B)
Define log for debug info.
virtual int GetNYield() const override
REAL fMu
Parameter related to the Plastic Potential Mu defines the curvature of the meridians.
int NumCases()
number of types of residuals
void SetUp(REAL Ksi1, REAL Ksi2, REAL h, REAL Alpha, REAL Mu, REAL neta1, REAL m, REAL pa)
int Redim(const int64_t newRows, const int64_t newCols) override
Redimension a matrix and ZERO your elements.
virtual int ClassId() const override
Define the class id associated with the class.
const char * Name() const
void ComputePlasticPotential(const TPZTensor< T > &sigma, const T &A, T &PlasticPot, int checkForcedYield) const
Calculo da função de potencial plástico.
void SetForceYield(const int forceYield)
TPZFlopCounter pow(const TPZFlopCounter &orig, const TPZFlopCounter &xp)
Returns the power and increments the counter of the power.
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
void Compute(const TPZTensor< T > &sigma, const T &A, TPZVec< T > &res, int checkForcedYield) const
Calculo do criterio de plastificacao.
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).
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
Defines the interface for saving and reading data. Persistency.
TPZYCLadeKim(const TPZYCLadeKim &source)
Implementa as funções de potencial plástico e yield criterium do modelo constitutivo de Lade Kim para...
REAL m_hardening
Parameter related to the YC Alpha models how the exponent q varies according to the proximity of the...
clarg::argString m("-m", "input matrix file name (text format)", "matrix.txt")
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)
Non abstract class which implements full matrices with preallocated storage with (N+1) entries...
virtual void Read(bool &val)
REAL fKsi1
Parameter related to the YC and Plastic Potential Ksi1 models the shape of the yield funcition at the...