NeoPZ
TPZYCDruckerPragerPV.cpp
Go to the documentation of this file.
1 /*
2  * File: TPZYCDruckerPragerPV.cpp
3  * Author: quinelato
4  *
5  * Created on September 12, 2017, 2:24 PM
6  */
7 
8 #include "pzlog.h"
9 #include "TPZYCDruckerPragerPV.h"
10 #include "TPZHWTools.h"
11 
12 #ifdef LOG4CXX
13 static LoggerPtr loggerConvTest(Logger::getLogger("ConvTest"));
14 #endif
15 
16 TPZYCDruckerPragerPV::TPZYCDruckerPragerPV() : fER(fCap.fER), fM(fCap.fM), fPt(fCap.fPt), fLogHardening(fCap.fLogHardening), fLogBulkModulus(fCap.fLogBulkModulus), fA0(fCap.fA0), fE0(fCap.fE0) {
17 }
18 
20 }
21 
23  fCap = other.fCap;
24  return *this;
25 }
26 
27 void TPZYCDruckerPragerPV::SetUp(const TPZElasticResponse &ER, REAL gamma, REAL m, REAL pt, REAL logHardening, REAL logBulkModulus, REAL a0, REAL e0) {
28  fCap.SetUp(ER, gamma, m, pt, logHardening, logBulkModulus, a0, e0);
29 }
30 
32  fER = ER;
33 }
34 
36  return Hash("TPZYCDruckerPragerPV");
37 }
38 
39 void TPZYCDruckerPragerPV::Read(TPZStream& buf, void* context) {
40  fCap.Read(buf, context);
41 }
42 
43 void TPZYCDruckerPragerPV::Write(TPZStream& buf, int withclassid) const {
44  fCap.Write(buf, withclassid);
45 }
46 
48  std::cout << "Method not implemented." << std::endl;
49  DebugStop();
50  return -1.0;
51 }
52 
53 REAL TPZYCDruckerPragerPV::bFromP(const REAL p, const REAL a) const {
54  return fCap.bFromP(p, a);
55 }
56 
57 REAL TPZYCDruckerPragerPV::bFromTheta(REAL theta) const {
58  return fCap.bFromTheta(theta);
59 }
60 
61 void TPZYCDruckerPragerPV::Phi(TPZVec<REAL> sigmaPV, REAL a, TPZVec<REAL> &phi) const {
62  phi.resize(NYield);
63 
64  TPZTensor<REAL> sigma;
65  sigma.XX() = sigmaPV[0];
66  sigma.YY() = sigmaPV[1];
67  sigma.ZZ() = sigmaPV[2];
68 
69  const REAL p = sigma.I1() / 3.;
70  const REAL sqrt3 = sqrt(3);
71 
72  TPZVec<REAL> phiCap;
73  fCap.Phi(sigmaPV, a, phiCap);
74 
75  phi[0] = sqrt(sigma.J2()) + fM * (p - fPt) / sqrt3;
76  phi[1] = phiCap[0];
77 }
78 
79 void TPZYCDruckerPragerPV::SurfaceF1InCyl(const REAL xi, const REAL beta, TPZVec<REAL> &returnValue) const {
80  const REAL sqrt3 = sqrt(3);
81  REAL sqrtj2 = sqrt3 * abs(fM * (xi / sqrt3 - fPt)) / 3.;
82  REAL rho = M_SQRT2*sqrtj2;
83  returnValue[0] = xi; // hydrostatic component
84  returnValue[1] = rho; // deviatoric component
85  returnValue[2] = beta; // Lode angle
86 }
87 
88 void TPZYCDruckerPragerPV::SurfaceF2InCyl(const REAL theta, const REAL beta, const REAL a, TPZVec<REAL> &returnValue) const {
89  fCap.SurfaceInCyl(theta, beta, a, returnValue);
90 }
91 
92 REAL TPZYCDruckerPragerPV::ResLF1(const TPZVec<STATE> &sigma_trial_pv, const TPZVec<STATE> &sigma_proj_pv, const STATE a, const STATE aPrev) const {
93  STATE I1Trial = (sigma_trial_pv[0] + sigma_trial_pv[1] + sigma_trial_pv[2]);
94  STATE I1Proj = (sigma_proj_pv[0] + sigma_proj_pv[1] + sigma_proj_pv[2]);
95  return (I1Trial - I1Proj) - 3 * fER.K()*(PlasticVolumetricStrain(a) - PlasticVolumetricStrain(aPrev));
96 }
97 
98 REAL TPZYCDruckerPragerPV::ResLF2(const TPZVec<STATE> &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, const REAL aPrev) const {
99  return fCap.ResLFunc(sigma_trial_pv, theta, beta, a, aPrev);
100 }
101 
102 STATE TPZYCDruckerPragerPV::DResLF1(const TPZVec<STATE> &sigma_trial_pv, const TPZVec<STATE> &sigma_proj_pv, const STATE a, const STATE aPrev) const {
103  STATE log_a = log(a);
104  STATE log_a0 = log(fA0);
105  STATE log_a0_log_a = log_a0 - log_a;
106 
107  return 3 * fER.K()*(fLogHardening - fLogBulkModulus) / (a * (log_a0_log_a * (1 + fE0) + pow(log_a0_log_a, 2.) * fLogBulkModulus) * fLogHardening + ((1 + fE0) * log_a0_log_a * fLogBulkModulus + pow(fE0 + 1, 2)));
108 }
109 
110 REAL TPZYCDruckerPragerPV::DistanceToSurfaceF1(const TPZVec<REAL> &sigma_trial_pv, const REAL xi, const REAL beta) const {
111  TPZManVector<STATE, 3> cyl(3);
112  SurfaceF1InCyl(xi, beta, cyl);
113  TPZManVector<STATE, 3> cart(3);
115  TPZManVector<STATE, 3> carttrial(3);
116  TPZHWTools::FromPrincipalToHWCart(sigma_trial_pv, carttrial);
117 
118  return ((1. / (3. * fER.K()))*(carttrial[0] - cart[0])*(carttrial[0] - cart[0]))
119  +(1. / (2. * fER.G()))*((carttrial[1] - cart[1])*(carttrial[1] - cart[1])+(carttrial[2] - cart[2])*(carttrial[2] - cart[2]));
120 }
121 
122 REAL TPZYCDruckerPragerPV::DistanceToSurfaceF2(const TPZVec<REAL> &sigma_trial_pv, const REAL theta, const REAL beta, const REAL a) const {
123 
124  return fCap.DistanceToSurface(sigma_trial_pv, theta, beta, a);
125 }
126 
127 void TPZYCDruckerPragerPV::DDistanceToSurfaceF1(const TPZVec<STATE> &sigma_trial_pv, const STATE xi, const STATE beta, TPZVec<STATE> &fxn) const {
128 
129  const REAL sqrt3 = sqrt(3);
130  const STATE sbeta = sin(beta);
131  const STATE cbeta = cos(beta);
132  const REAL K = fER.K();
133  const REAL G = fER.G();
134  const STATE sig1trial = sigma_trial_pv[0];
135  const STATE sig2trial = sigma_trial_pv[1];
136  const STATE sig3trial = sigma_trial_pv[2];
137  fxn.Resize(2);
138  fxn[0] = ((6 * xi - 6 * sig1trial) * G + 3 * M_SQRT2 * (cbeta * sig2trial + sbeta * sig3trial) * K * fM + (2 * xi - 2 * sqrt3 * fPt) * K * pow(fM, 2)) / (9 * G * K);
139  fxn[1] = M_SQRT2 * ((sqrt3 * sbeta * fPt * sig2trial - sqrt3 * cbeta * fPt * sig3trial + (cbeta * sig3trial - sbeta * sig2trial) * xi) * fM) / (3 * G);
140 }
141 
142 void TPZYCDruckerPragerPV::DDistanceToSurfaceF2(const TPZVec<STATE> &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, const REAL aPrev, TPZVec<STATE> &fxn) const {
143 
144  fCap.DDistanceToSurface(sigma_trial_pv, theta, beta, a, aPrev, fxn);
145 }
146 
147 void TPZYCDruckerPragerPV::D2DistanceToSurfaceF1(const TPZVec<STATE> &sigma_trial_pv, const STATE xi, const STATE beta, TPZFNMatrix<4, STATE> &jac) const {
148 
149  const REAL sqrt3 = sqrt(3);
150  const STATE sbeta = sin(beta);
151  const STATE cbeta = cos(beta);
152  const REAL K = fER.K();
153  const REAL G = fER.G();
154  const STATE sig1trial = sigma_trial_pv[0];
155  const STATE sig2trial = sigma_trial_pv[1];
156  const STATE sig3trial = sigma_trial_pv[2];
157 
158  jac.Resize(2, 2);
159  jac(0, 0) = 2. / (3. * K) + 2. * pow(fM, 2.) / (9. * G);
160  jac(0, 1) = fM * M_SQRT2 * (cbeta * sig3trial - sbeta * sig2trial) / (3. * G);
161 
162  jac(1, 0) = jac(0, 1);
163  jac(1, 1) = M_SQRT2 * ((sqrt3 * cbeta * fPt * sig2trial + sqrt3 * sbeta * fPt * sig3trial - (sbeta * sig3trial + cbeta * sig2trial) * xi) * fM) / (3. * G);
164 }
165 
166 void TPZYCDruckerPragerPV::D2DistanceToSurfaceF2(const TPZVec<STATE> &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, TPZFNMatrix<9, STATE> &jac) const {
167 
168  fCap.D2DistanceToSurface(sigma_trial_pv, theta, beta, a, jac);
169 }
170 
171 void TPZYCDruckerPragerPV::ProjectToSurfaceF1(const TPZVec<REAL> &sigma_trial_pv, const REAL aPrev, TPZVec<REAL> &sigma, REAL &aProj, const REAL tol) const {
172  const REAL sqrt3 = sqrt(3);
173  REAL xi = 0.;
174  REAL xi_distance = std::numeric_limits<REAL>::max();
175  TPZManVector<STATE> sigma_trial_star;
176  TPZHWTools::FromPrincipalToHWCart(sigma_trial_pv, sigma_trial_star);
177  STATE beta = atan2(sigma_trial_star[2], sigma_trial_star[1]);
178  {
179  const REAL initial_xi_guess = fPt*sqrt3; // multiplying by sqrt converts from p to xi coordinates
180  const REAL final_xi_guess = (fPt - (1 + fCap.fGamma) * aPrev) * sqrt3;
181  const unsigned int n_steps_xi = 40;
182  const REAL xi_interval = (initial_xi_guess - final_xi_guess) / n_steps_xi;
183  for (unsigned int i = 0; i < n_steps_xi; ++i) {
184  REAL xi_guess = initial_xi_guess + i*xi_interval;
185  REAL distance = DistanceToSurfaceF1(sigma_trial_pv, xi_guess, beta);
186  if (fabs(distance) < fabs(xi_distance)) {
187  xi = xi_guess;
188  xi_distance = distance;
189  }
190  }
191  }
192 
193  REAL residual_norm = std::numeric_limits<REAL>::max();
194  TPZFNMatrix<4, STATE> xn(2, 1, 0.), sol(2, 1, 0.);
195  TPZManVector<STATE> fxn(2);
196  xn(0, 0) = xi;
197  xn(1, 0) = beta;
198  for (unsigned int i = 0; i < 30; ++i) {
199  TPZFNMatrix<4, STATE> jac(2, 2);
200  D2DistanceToSurfaceF1(sigma_trial_pv, xn(0), xn(1), jac);
201  DDistanceToSurfaceF1(sigma_trial_pv, xn(0), xn(1), fxn);
202  for (unsigned int k = 0; k < 2; ++k) {
203  sol(k, 0) = fxn[k];
204  }
205  residual_norm = Norm(sol);
206 
207 #ifdef LOG4CXX
208  if (loggerConvTest->isDebugEnabled()) {
209  std::stringstream outfile; //("convergencF1.txt");
210  outfile << i << " " << log(residual_norm) << endl;
211  //jac.Print(outfile);
212  //outfile<< "\n xn " << " "<< fxn <<endl;
213  //outfile<< "\n res " << " "<< residual_norm <<endl;
214  LOGPZ_DEBUG(loggerConvTest, outfile.str());
215  }
216 #endif
217 
218  jac.Solve_LU(&sol);
219  xn = xn - sol;
220  if (residual_norm < tol) break;
221  }
222 
223  TPZManVector<STATE, 3> sigma_proj_cyl(3);
224  SurfaceF1InCyl(xn[0], xn[1], sigma_proj_cyl);
225 
226  TPZHWTools::FromHWCylToPrincipal(sigma_proj_cyl, sigma);
227 
228  STATE aGuess = aPrev;
229  STATE resl = ResLF1(sigma_trial_pv, sigma, aGuess, aPrev);
230  while (resl < 0.) {
231  aGuess += 1.;
232  resl = ResLF1(sigma_trial_pv, sigma, aGuess, aPrev);
233  }
234  unsigned int count;
235  for (count = 0; count < 30; ++count) {
236  STATE dresl = DResLF1(sigma_trial_pv, sigma, aGuess, aPrev);
237 
238 #ifdef PZDEBUG
239  if (IsZero(dresl)) {
240  DebugStop();
241  }
242 #endif
243 
244  aGuess -= resl / dresl;
245  resl = ResLF1(sigma_trial_pv, sigma, aGuess, aPrev);
246  if (fabs(resl) < tol) break;
247  }
248 
249 #ifdef PZDEBUG
250  {
251  if (count >= 30) {
252 
253  DebugStop();
254  }
255  }
256 #endif
257 
258  aProj = aGuess;
259 }
260 
261 void TPZYCDruckerPragerPV::ProjectToSurfaceF2(const TPZVec<REAL> &sigma_trial_pv, const REAL aPrev, TPZVec<REAL> &sigma, REAL &aProj, const REAL tol) const {
262 
263  fCap.ProjectToSurface(sigma_trial_pv, aPrev, sigma, aProj, tol);
264 }
265 
266 void TPZYCDruckerPragerPV::ProjectSigma(const TPZVec<REAL> &sigma_trial_pv, const REAL aPrev, TPZVec<REAL> &sigma_pv, REAL &aProj, int &m_type, TPZFMatrix<REAL> * gradient) const {
267 
268  bool require_gradient_Q = true;
269  if (!gradient) {
270  require_gradient_Q = false;
271  }
272 
273 #ifdef PZDEBUG
274  // Check for required dimensions of tangent
275  if (!(gradient->Rows() == 3 && gradient->Cols() == 3)) {
276  std::cerr << "Unable to compute the gradient operator. Required gradient array dimensions are 3x3." << std::endl;
277  DebugStop();
278  }
279 
280  if (require_gradient_Q) {
281  DebugStop(); // implemented this functionality.
282  }
283 #endif
284 
285  TPZVec<REAL> yield(NYield);
286  this->Phi(sigma_trial_pv, aPrev, yield);
287  STATE I1 = sigma_trial_pv[0] + sigma_trial_pv[1] + sigma_trial_pv[2];
288 
289  if (I1 / 3. >= fPt - aPrev) {
290  if (yield[0] > 0.) {
291  ProjectToSurfaceF1(sigma_trial_pv, aPrev, sigma_pv, aProj, 1.e-5);
292  } else {
293  sigma_pv = sigma_trial_pv;
294  aProj = aPrev;
295  }
296  } else {
297  if (yield[1] > 0.) {
298  ProjectToSurfaceF2(sigma_trial_pv, aPrev, sigma_pv, aProj, 1.e-5);
299  } else {
300  sigma_pv = sigma_trial_pv;
301  aProj = aPrev;
302  }
303  }
304 }
305 
306 void TPZYCDruckerPragerPV::SurfaceParamF1(const TPZVec<STATE> &sigma_pv, STATE &xi, STATE &beta, const REAL tol) const {
307  TPZManVector<STATE> sigmaHWCyl(3);
308  TPZHWTools::FromPrincipalToHWCyl(sigma_pv, sigmaHWCyl);
309  xi = sigmaHWCyl[0];
310  beta = sigmaHWCyl[2];
311 #ifdef PZDEBUG
312  STATE dist = DistanceToSurfaceF1(sigma_pv, xi, beta);
313  if (fabs(dist) > tol) {
314  DebugStop();
315  }
316 #endif
317 }
318 
319 void TPZYCDruckerPragerPV::SurfaceParamF2(const TPZVec<STATE> &sigma_pv, const STATE a, STATE &theta, STATE &beta, const REAL tol) const {
320  fCap.SurfaceParam(sigma_pv, a, theta, beta);
321 }
322 
323 void TPZYCDruckerPragerPV::GradF1SigmaTrial(const TPZVec<REAL> &sigma_trial_pv, const REAL xi, const REAL beta, const REAL aProj, TPZFNMatrix<6, STATE> &ddist_dsigmatrial) const {
324  const REAL sqrt3 = sqrt(3);
325  const STATE sbeta = sin(beta);
326  const STATE cbeta = cos(beta);
327  const REAL G = fER.G();
328  const REAL K = fER.K();
329 
330  ddist_dsigmatrial(0, 0) = -2. / (3. * K);
331  ddist_dsigmatrial(0, 1) = M_SQRT2 * cbeta * fM / (3. * G);
332  ddist_dsigmatrial(0, 2) = M_SQRT2 * sbeta * fM / (3. * G);
333 
334  ddist_dsigmatrial(1, 0) = 0.;
335  ddist_dsigmatrial(1, 1) = -(M_SQRT2 * sbeta * xi - M_SQRT2 * sqrt3 * sbeta * fPt) * fM / (3. * G);
336  ddist_dsigmatrial(1, 2) = (M_SQRT2 * cbeta * xi - M_SQRT2 * sqrt3 * cbeta * fPt) * fM / (3. * G);
337 }
338 
339 void TPZYCDruckerPragerPV::GradF2SigmaTrial(const TPZVec<REAL> &sigma_trial_pv, const REAL theta, const REAL beta, const REAL aProj, TPZFNMatrix<9, STATE> &ddist_dsigmatrial) const {
340  fCap.GradSigmaTrial(sigma_trial_pv, theta, beta, aProj, ddist_dsigmatrial);
341 }
342 
343 void TPZYCDruckerPragerPV::DF1Cart(STATE xi, STATE beta, TPZFNMatrix<6, STATE> &DFunccart) const {
344  const REAL sqrt3 = sqrt(3);
345  const REAL sqrt27 = pow(3, 1.5);
346  const STATE sbeta = sin(beta);
347  const STATE cbeta = cos(beta);
348 
349  DFunccart(0, 0) = -(2. * sqrt3 * cbeta * fM - sqrt27) / 9.;
350  DFunccart(0, 1) = (2 * sqrt3 * sbeta * xi - 6 * sbeta * fPt) * fM / 9.;
351 
352  DFunccart(1, 0) = -((sqrt3 * sbeta - cbeta) * fM - 3.) / sqrt27;
353  DFunccart(1, 1) = -((-3 * sbeta - sqrt27 * cbeta) * fPt + (sqrt3 * sbeta + 3 * cbeta) * xi) * fM / 9.;
354 
355  DFunccart(2, 0) = (3. + (sqrt3 * sbeta + cbeta) * fM) / sqrt27;
356  DFunccart(2, 1) = -((sqrt27 * cbeta - 3. * sbeta) * fPt + (sqrt3 * sbeta - 3 * cbeta) * xi) * fM / 9.;
357 }
358 
359 void TPZYCDruckerPragerPV::DF2Cart(STATE theta, STATE beta, STATE a, TPZFNMatrix<9, STATE> &DFunccart) const {
360  fCap.DFuncCart(theta, beta, a, DFunccart);
361 }
362 
363 void TPZYCDruckerPragerPV::ProjectSigmaDep(const TPZVec<REAL> &sigma_trial_pv, const REAL aPrev, TPZVec<REAL> &sigma, REAL &aProj, TPZFMatrix<REAL> &GradSigma) const {
364  TPZVec<REAL> yield(NYield);
365  this->Phi(sigma_trial_pv, aPrev, yield);
366  STATE I1 = sigma_trial_pv[0] + sigma_trial_pv[1] + sigma_trial_pv[2];
367 
368  if (I1 / 3. >= fPt - aPrev) {
369  if (yield[0] > 0.) {
370  ProjectToSurfaceF1(sigma_trial_pv, aPrev, sigma, aProj, 1.e-5);
371  // we can compute the tangent matrix
372  TPZFNMatrix<4, STATE> jac(2, 2);
373  TPZFNMatrix<6, STATE> ddist_dsigmatrial(2, 3), DFunccart(3, 2);
374  STATE xi, beta;
375  SurfaceParamF1(sigma, aProj, xi, beta);
376  GradF1SigmaTrial(sigma_trial_pv, xi, beta, aProj, ddist_dsigmatrial);
377  D2DistanceToSurfaceF1(sigma_trial_pv, xi, beta, jac);
378  jac.Solve_LU(&ddist_dsigmatrial);
379  DF1Cart(xi, beta, DFunccart);
380  DFunccart.Multiply(ddist_dsigmatrial, GradSigma);
381  GradSigma *= -1.;
382  } else {
383  sigma = sigma_trial_pv;
384  aProj = aPrev;
385  GradSigma.Identity();
386  }
387  } else {
388  if (yield[1] > 0.) {
389  ProjectToSurfaceF2(sigma_trial_pv, aPrev, sigma, aProj, 1.e-5);
390  // we can compute the tangent matrix
391  TPZFNMatrix<9, STATE> ddist_dsigmatrial(3, 3), jac(3, 3), DFunccart(3, 3);
392  STATE theta, beta;
393  SurfaceParamF2(sigma, aProj, theta, beta);
394  GradF2SigmaTrial(sigma_trial_pv, theta, beta, aProj, ddist_dsigmatrial);
395  D2DistanceToSurfaceF2(sigma_trial_pv, theta, beta, aProj, jac);
396  jac.Solve_LU(&ddist_dsigmatrial);
397  DF2Cart(theta, beta, aProj, DFunccart);
398  DFunccart.Multiply(ddist_dsigmatrial, GradSigma);
399  GradSigma *= -1.;
400  } else {
401  sigma = sigma_trial_pv;
402  aProj = aPrev;
403  GradSigma.Identity();
404  }
405  }
406 }
407 
409 
410  return fCap.PlasticVolumetricStrain(a);
411 }
412 
414 }
415 
TPZFlopCounter atan2(const TPZFlopCounter &val1, const TPZFlopCounter &val2)
Returns the arc tangent in radians and increments the counter of the Arc Tangent. ATAN2 returns the ...
Definition: pzreal.h:544
REAL DistanceToSurface(const TPZVec< REAL > &sigma_trial_pv, const REAL theta, const REAL beta, const REAL a) const
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
STATE PlasticVolumetricStrain(STATE a) const
bool IsZero(long double a)
Returns if the value a is close Zero as the allowable tolerance.
Definition: pzreal.h:668
int Solve_LU(TPZFMatrix< TVar > *B, std::list< int64_t > &singular)
Solves the linear system using LU method .
Definition: pzmatrix.h:900
void GradF1SigmaTrial(const TPZVec< REAL > &sigma_trial_pv, const REAL xi, const REAL beta, const REAL aProj, TPZFNMatrix< 6, STATE > &ddist_dsigmatrial) 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.
static void FromPrincipalToHWCyl(const TPZVec< REAL > &PrincipalCoords, TPZVec< REAL > &HWCyl)
Definition: TPZHWTools.h:39
STATE DResLF1(const TPZVec< STATE > &sigma_trial_pv, const TPZVec< STATE > &sigma_proj_pv, const STATE a, const STATE aPrev) const
void SurfaceInCyl(const REAL theta, const REAL beta, const REAL a, TPZVec< REAL > &returnValue) const
void ProjectToSurfaceF2(const TPZVec< REAL > &sigma_trial_pv, const REAL aPrev, TPZVec< REAL > &sigma, REAL &aProj, const REAL tol) const
REAL bFromTheta(REAL theta) const
T I1() const
Definition: TPZTensor.h:903
virtual void resize(const int64_t newsize)
Definition: pzvec.h:213
void ProjectSigma(const TPZVec< REAL > &sigma_trial_pv, const REAL aPrev, TPZVec< REAL > &sigma_pv, REAL &aProj, int &m_type, TPZFMatrix< REAL > *gradient=NULL) const
void GradF2SigmaTrial(const TPZVec< REAL > &sigma_trial_pv, const REAL theta, const REAL beta, const REAL aProj, TPZFNMatrix< 9, STATE > &ddist_dsigmatrial) const
STATE PlasticVolumetricStrain(STATE a) const
void Phi(TPZVec< REAL > sigmaPV, REAL a, TPZVec< REAL > &phi) const
void DDistanceToSurfaceF2(const TPZVec< STATE > &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, const REAL aPrev, TPZVec< STATE > &fxn) const
virtual void Identity()
Converts the matrix in an identity matrix.
Definition: pzmatrix.cpp:199
T & YY() const
Definition: TPZTensor.h:578
void D2DistanceToSurfaceF1(const TPZVec< STATE > &sigma_trial_pv, const STATE xi, const STATE beta, TPZFNMatrix< 4, STATE > &jac) const
void SurfaceParam(const TPZVec< STATE > &sigma_pv, const STATE a, STATE &theta, STATE &beta) const
REAL ResLF2(const TPZVec< STATE > &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, const REAL aPrev) const
REAL bFromTheta(REAL theta) const
TinyFad< 8, T > abs(const TinyFad< 8, T > &in)
Definition: tinyfadeight.h:846
void DDistanceToSurface(const TPZVec< STATE > &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, const REAL aPrev, TPZVec< STATE > &fxn) const
void SurfaceParamF2(const TPZVec< STATE > &sigma_pv, const STATE a, STATE &theta, STATE &beta, const REAL tol=1e-5) const
void SetUp(const TPZElasticResponse &ER, REAL gamma, REAL m, REAL pt, REAL logHardening, REAL logBulkModulus, REAL a0, REAL e0)
REAL bFromP(const REAL p, const REAL a) const
TPZElasticResponse & fER
void Phi(TPZVec< REAL > sigmaPV, REAL a, TPZVec< REAL > &phi) const
TPZYCDruckerPragerPV & operator=(const TPZYCDruckerPragerPV &other)
void ProjectSigmaDep(const TPZVec< REAL > &sigma_trial_pv, const REAL aPrev, TPZVec< REAL > &sigma, REAL &aProj, TPZFMatrix< REAL > &GradSigma) const
REAL InitialDamage(const TPZVec< REAL > &stress_p) const
void Read(TPZStream &buf, void *context) override
read objects from the stream
virtual void Resize(const int64_t newsize, const T &object)
Resizes the vector object reallocating the necessary storage, copying the existing objects to the new...
Definition: pzvec.h:373
static void FromHWCylToHWCart(const TPZVec< REAL > &HWCylCoords, TPZVec< REAL > &HWCart)
Definition: TPZHWTools.h:28
sin
Definition: fadfunc.h:63
static const double tol
Definition: pzgeoprism.cpp:23
REAL ResLFunc(const TPZVec< STATE > &sigma_trial_pv, STATE theta, STATE beta, REAL a, REAL aPrev) const
void Write(TPZStream &buf, int withclassid) const override
Writes this object to the TPZStream buffer. Include the classid if withclassid = true.
TVar Norm(const TPZFMatrix< TVar > &A)
Returns the norm of the matrix A.
#define DebugStop()
Returns a message to user put a breakpoint in.
Definition: pzerror.h:20
#define LOGPZ_DEBUG(A, B)
Define log for debug info.
Definition: pzlog.h:87
REAL ResLF1(const TPZVec< STATE > &sigma_trial_pv, const TPZVec< STATE > &sigma_proj_pv, const STATE a, const STATE aPrev) const
REAL bFromP(const REAL p, const REAL a) const
int64_t Rows() const
Returns number of rows.
Definition: pzmatrix.h:803
expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ sqrt
Definition: tfadfunc.h:120
void SetUp(const TPZElasticResponse &ER, REAL gamma, REAL m, REAL pt, REAL logHardening, REAL logBulkModulus, REAL a0, REAL e0)
void DF2Cart(STATE theta, STATE beta, STATE a, TPZFNMatrix< 9, STATE > &DFunccart) const
T J2() const
Definition: TPZTensor.h:927
static void FromHWCylToPrincipal(const TPZVec< REAL > &HWCylCoords, TPZVec< REAL > &PrincipalCoords)
Definition: TPZHWTools.h:67
void SurfaceF2InCyl(const REAL theta, const REAL beta, const REAL a, TPZVec< REAL > &returnValue) const
int32_t Hash(std::string str)
Definition: TPZHash.cpp:10
long double gamma(unsigned int n)
Evaluate the factorial of a integer.
void SurfaceParamF1(const TPZVec< STATE > &sigma_pv, STATE &xi, STATE &beta, const REAL tol=1e-5) const
void DDistanceToSurfaceF1(const TPZVec< STATE > &sigma_trial_pv, const STATE theta, const STATE beta, TPZVec< STATE > &fxn) const
void ProjectToSurface(const TPZVec< REAL > &sigma_trial, const REAL aPrev, TPZVec< REAL > &sigma, REAL &aProj, const REAL tol) const
void D2DistanceToSurfaceF2(const TPZVec< STATE > &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, TPZFNMatrix< 9, STATE > &jac) const
TPZFlopCounter pow(const TPZFlopCounter &orig, const TPZFlopCounter &xp)
Returns the power and increments the counter of the power.
Definition: pzreal.h:487
static void FromPrincipalToHWCart(const TPZVec< REAL > &PrincipalCoords, TPZVec< REAL > &HWCart)
Definition: TPZHWTools.h:52
REAL dist(TPZVec< T1 > &vec1, TPZVec< T1 > &vec2)
Definition: pzvec_extras.h:124
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
T & XX() const
Definition: TPZTensor.h:566
void SetElasticResponse(const TPZElasticResponse &ER)
virtual void Multiply(const TPZFMatrix< TVar > &A, TPZFMatrix< TVar > &res, int opt=0) const
It mutiplies itself by TPZMatrix<TVar>A putting the result in res.
Definition: pzmatrix.cpp:1916
void DFuncCart(STATE theta, STATE beta, STATE a, TPZFNMatrix< 9, STATE > &DFunccart) const
REAL DistanceToSurfaceF1(const TPZVec< REAL > &sigma_trial_pv, const REAL xi, const REAL beta) const
int64_t Cols() const
Returns number of cols.
Definition: pzmatrix.h:809
T & ZZ() const
Definition: TPZTensor.h:586
int Resize(const int64_t newRows, const int64_t wCols) override
Redimension a matrix, but maintain your elements.
Definition: pzfmatrix.cpp:1016
void GradSigmaTrial(const TPZVec< REAL > &sigma_trial_pv, const REAL theta, const REAL beta, const REAL aProj, TPZFNMatrix< 9, STATE > &ddist_dsigmatrial) const
Defines the interface for saving and reading data. Persistency.
Definition: TPZStream.h:50
void SurfaceF1InCyl(const REAL xi, const REAL beta, TPZVec< REAL > &returnValue) const
clarg::argString m("-m", "input matrix file name (text format)", "matrix.txt")
REAL DistanceToSurfaceF2(const TPZVec< REAL > &sigma_trial_pv, const REAL theta, const REAL beta, const REAL a) const
void ProjectToSurfaceF1(const TPZVec< REAL > &sigma_trial_pv, const REAL aPrev, TPZVec< REAL > &sigma, REAL &aProj, const REAL tol) const
virtual int ClassId() const override
Define the class id associated with the class.
void D2DistanceToSurface(const TPZVec< STATE > &sigma_trial_pv, const STATE theta, const STATE beta, const REAL a, TPZFNMatrix< 9, STATE > &jac) const
TPZFlopCounter cos(const TPZFlopCounter &orig)
Returns the cosine in radians and increments the counter of the Cosine.
Definition: pzreal.h:514
void DF1Cart(STATE xi, STATE beta, TPZFNMatrix< 6, STATE > &DFunccart) const
void Read(TPZStream &buf, void *context) override
read objects from the stream
void Write(TPZStream &buf, int withclassid) const override
Writes this object to the TPZStream buffer. Include the classid if withclassid = true.
Non abstract class which implements full matrices with preallocated storage with (N+1) entries...
Definition: pzfmatrix.h:716