NeoPZ
TPZDruckerPrager.h
Go to the documentation of this file.
1 
5 #ifndef TZPDRUCKERPRAGER_H
6 #define TZPDRUCKERPRAGER_H
7 
8 #include "pzlog.h"
9 #include "TPZPlasticStep.h"
10 #include "TPZYCDruckerPrager.h"
11 #include "TPZThermoForceA.h"
12 #include "TPZElasticResponse.h"
13 #include "pzvec_extras.h"
14 #include "TPZPlasticStepID.h"
15 
16 #ifdef LOG4CXX_PLASTICITY
17 static LoggerPtr loggerDrucker(Logger::getLogger("plasticity.Drucker"));
18 #endif
19 
20 #define DRUCKERPARENT TPZPlasticStep<TPZYCDruckerPrager, TPZThermoForceA, TPZElasticResponse>
21 
23 public:
24 
25  enum {
27  };
28 
29 public:
30 
32  fMaterialTensionSign = 1; // internally in this material tension is negative
33  fInterfaceTensionSign = 1; // by default
34  }
35 
36  TPZDruckerPrager(const TPZDruckerPrager & source) : DRUCKERPARENT(source) {
37  faPa = source.faPa;
38  fInitialEps = source.fInitialEps;
39  }
40 
42  DRUCKERPARENT::operator=(source);
43  faPa = source.faPa;
44  fInitialEps = source.fInitialEps;
45 
46  return *this;
47  }
48 
49  virtual const char * Name() const override {
50  return "TPZDruckerPrager";
51  }
52 
64  void SetUp(REAL young, REAL poisson, REAL fangle, REAL coesion, REAL hardeningModulus, int InnerOuter = 0/*Inner*/) {
65 
66  DRUCKERPARENT::fYC.SetUp(fangle / 180. * M_PI, InnerOuter);
67  DRUCKERPARENT::fTFA.SetUp(coesion, hardeningModulus);
68  DRUCKERPARENT::fER.SetEngineeringData(young, poisson);
69  // DRUCKERPARENT::fYC.SetUp(/*phi=20*/ 20./180. * M_PI ,/*innerMCFit*/0);
70  // DRUCKERPARENT::fTFA.SetUp(/*yield- coesao inicial correspondeno a fck igual 32 Mpa */ 9.2376, /*k Modulo de hardening da coesao equivante 1 Mpa a cada 0.1% de deformacao */1000.);
71  // DRUCKERPARENT::fER.SetUp(/*young*/ 20000., /*poisson*/ 0.2);
72 
73  // TPZTensor<REAL> nullSigma,epsA;
74  // fInitialEps = DRUCKERPARENT::GetState();
75 
76  }
77 
78  virtual void SetUp(const TPZTensor<REAL> & epsTotal) override {
79  DRUCKERPARENT::SetUp(epsTotal);
80  }
81 
83 
84  REAL radius = sqrt(2.) * DRUCKERPARENT::fTFA.Compute(state.VolHardening());
85  return radius;
86  }
87 
88  virtual void Print(std::ostream & out) const override {
89  out << "\n" << this->Name();
90  out << "\n Base Class Data:\n";
91  DRUCKERPARENT::Print(out);
92  out << "\nTPZDruckerPrager internal members:";
93  out << "\n a*Pa = " << faPa;
94  out << "\n InitialEps = " << fInitialEps;
95 
96  }
97 
98  int ClassId() const override;
99 
100  void Write(TPZStream &buf, int withclassid) const override{
101  DRUCKERPARENT::Write(buf, withclassid);
102 
103  buf.Write(&faPa, 1);
104  fInitialEps.Write(buf, withclassid);
105  }
106 
107  void Read(TPZStream& buf, void* context) override {
108  DRUCKERPARENT::Read(buf, context);
109 
110  buf.Read(&faPa, 1);
111  fInitialEps.Read(buf, context);
112  }
113 
114  virtual int GetNYield() const {
115  return as_integer(NYield);
116  }
117 
118 public:
119 
120  // The following static members load test data from article
121  // Lade, Paul V. Kim, Moon K. Single Hardening Constitutove Model for Soil, Rock and Concrete.
122  // Int. Journal of Solid Structures, vol.32, No14. pp 1963-1978. Elsevier Science, 1994
123 
124  // Plain Concrete MPA
125 
126  static void PlainConcreteMPa(TPZDruckerPrager & material) {
127  REAL poisson = 0.20;
128  REAL young = 20000.;
129  REAL fangle = 20.;
130  REAL hardeningModulus = 1.;
131  REAL coesion = 9.4;
132  material.fResTol = 1.e-8;
133 
134 
135  material.SetUp(young, poisson, fangle, coesion, hardeningModulus);
136 
137  }
138 
139  static void VeryRigidMaterial(TPZDruckerPrager & material) {
140  REAL poisson = 0.20;
141  REAL young = 10000000000.;
142  REAL fangle = 20.;
143  REAL hardeningModulus = 10000000000.;
144  REAL coesion = 10000.;
145  material.fResTol = 1.e-8;
146  material.SetUp(young, poisson, fangle, coesion, hardeningModulus);
147 
148  }
149 
150  static void ConventionalConcrete(TPZDruckerPrager & material, int InnerOuter) {
151  REAL pi = M_PI;
152  REAL cohesion = 11.2033; //yield- coesao inicial correspondeno a fck igual 32 Mpa
153  REAL phi = 20. / 180. * pi; //phi=20
154  REAL hardening = 1000.; //Modulo de hardening da coesao equivante 1 Mpa a cada 0.1% de deformacao
155  REAL young = 20000.;
156  REAL poisson = 0.2;
157  material.fYC.SetUp(phi, InnerOuter);
158  material.fTFA.SetUp(cohesion, hardening);
159  material.fER.SetEngineeringData(young, poisson);
160  }
161 
162  static void TaludeMaterial(TPZDruckerPrager & material, int InnerOuter) {
163  REAL pi = M_PI;
164  REAL cohesion = 50.; //yield- coesao inicialem KPa
165  REAL phi = 20. / 180. * pi; //phi=20
166  REAL hardening = 10000.; //Modulo de hardening da coesao equivante 0.01 Kpa a cada 0.1% de deformacao
167  REAL young = 20000.; //E em KPa
168  REAL poisson = 0.49;
169  material.fYC.SetUp(phi, InnerOuter);
170  material.fTFA.SetUp(cohesion, hardening);
171  material.fER.SetEngineeringData(young, poisson);
172  }
173 
174 private:
175 
176 
181  REAL faPa;
182 
193 };
194 
195 #endif //TPZDruckerPrager_H
void Write(TPZStream &buf, int withclassid) const override
Writes this object to the TPZStream buffer. Include the classid if withclassid = true.
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 PlainConcreteMPa(TPZDruckerPrager &material)
virtual void Print(std::ostream &out) const override
std::underlying_type< Enumeration >::type as_integer(const Enumeration value)
Definition: pzreal.h:37
#define DRUCKERPARENT
REAL YieldRadius(TPZPlasticState< REAL > state)
void Write(TPZStream &buf, int withclassid) const override
TPZDruckerPrager(const TPZDruckerPrager &source)
virtual void Write(const bool val)
Definition: TPZStream.cpp:8
virtual const char * Name() const override
static void TaludeMaterial(TPZDruckerPrager &material, int InnerOuter)
TPZDruckerPrager & operator=(const TPZDruckerPrager &source)
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 Read(TPZStream &buf, void *context) override
read objects from the stream
void SetUp(REAL young, REAL poisson, REAL fangle, REAL coesion, REAL hardeningModulus, int InnerOuter=0)
const T & VolHardening() const
int ClassId() const override
virtual void SetUp(const TPZTensor< REAL > &epsTotal) override
void Read(TPZStream &buf, void *context) override
static void ConventionalConcrete(TPZDruckerPrager &material, int InnerOuter)
TPZPlasticState< REAL > fInitialEps
Defines the interface for saving and reading data. Persistency.
Definition: TPZStream.h:50
Extra utilities for TPZVec. Implementations of the saxpy, sscal, sdot, intercept, max and min functio...
virtual int GetNYield() const
static void VeryRigidMaterial(TPZDruckerPrager &material)
virtual void Read(bool &val)
Definition: TPZStream.cpp:91