XC Open source finite element analysis program
MD_EL.h
1 //----------------------------------------------------------------------------
2 // XC program; finite element analysis code
3 // for structural analysis and design.
4 //
5 // Copyright (C) Luis Claudio Pérez Tato
6 //
7 // This program derives from OpenSees <http://opensees.berkeley.edu>
8 // developed by the «Pacific earthquake engineering research center».
9 //
10 // Except for the restrictions that may arise from the copyright
11 // of the original program (see copyright_opensees.txt)
12 // XC is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation, either version 3 of the License, or
15 // (at your option) any later version.
16 //
17 // This software is distributed in the hope that it will be useful, but
18 // WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
22 //
23 // You should have received a copy of the GNU General Public License
24 // along with this program.
25 // If not, see <http://www.gnu.org/licenses/>.
26 //----------------------------------------------------------------------------
27 /*
28 //================================================================================
29 # COPYRIGHT (C): :-)) #
30 # PROJECT: Object Oriented Finite Element Program #
31 # PURPOSE: General platform for elaso-plastic constitutive model #
32 # implementation #
33 # CLASS: MDEvolutionLaw (evolution law for Manzari-Dafalias Model) #
34 # #
35 # VERSION: #
36 # LANGUAGE: C++.ver >= 2.0 ( Borland C++ ver=3.00, SUN C++ ver=2.1 ) #
37 # TARGET OS: DOS || UNIX || . . . #
38 # DESIGNER(S): Boris Jeremic, Zhaohui Yang #
39 # PROGRAMMER(S): Boris Jeremic, Zhaohui Yang #
40 # #
41 # #
42 # DATE: 08-03-2000 #
43 # UPDATE HISTORY: #
44 # #
45 # #
46 # #
47 # #
48 # SHORT EXPLANATION: The goal is to create a platform for efficient and easy #
49 # implemetation of any elasto-plastic constitutive model! #
50 # #
51 //================================================================================
52 */
53 
54 #ifndef MD_EL_H
55 #define MD_EL_H
56 
57 #include <cmath>
58 #include "EL.h"
59 
60 namespace XC {
62 //
64 class MDEvolutionLaw : public EvolutionLaw
65  {
66  // private to define the evolution law for Manzari-Dafalias critical state model
67  public:
68 
69  //Critical state parameters
70  double Mc;
71  double Me;
72  double Lambda; // slope of e vs. ln p
73  double ec_ref;// critical void ratio at reference mean effective stress p
74  double p_ref; // critical void ratio at reference mean effective stress p
75 
76  // surface evolution parameters
77  double kc_b; // b stands for bounding surface, c compression
78  double kc_d; // d stands for dilatancy surface, c compression
79  double ke_b; // d stands for bounding surface, e compression
80  double ke_d; // d stands for dilatancy surface, e compression
81 
82  // Parameters to calculate plastic modulus
83  //double h; // Could be calculated using ho and b_ij * n_ij
84  double ho;
85  double Cm;
86  double eo; // initial void ratio
87 
88  //Dilatancy parameter
89  //double D; //Moved to EPS's second scalar var
90  double Ao;
91 
92  //Parameters to define the evolution of Fabric Tensor
93  double Fmax;
94  double Cf;
95  double a; //exponent for elastic modulus evolution
96 
97  public:
98  //MDEvolutionLaw( ); // default constructor---no parameters
99 
100  MDEvolutionLaw( double Mcd = 1.14, // default constructor
101  double Med = 1.14,
102  double Lamdad = 0.025,
103  double ec_refd = 0.8,
104  double p_refd = 100, //kPa
105  double kc_bd = 3.975,
106  double kc_dd = 4.200,
107  double ke_bd = 2.000,
108  double ke_dd = 0.070,
109  double hod = 1200.0, // old 1200
110  double Cmd = 0.0, // old 0.0
111  //double eod = 0.65,
112  double Aod = 2.64, //old 2.64
113  double Fmaxd = 100,
114  double Cfd = 100,
115  double ad = 0.6) :
116  Mc (Mcd), Me(Med), Lambda(Lamdad), ec_ref(ec_refd), p_ref(p_refd),
117  kc_b(kc_bd), kc_d(kc_dd), ke_b(ke_bd), ke_d(ke_dd), ho(hod), Cm(Cmd),
118  Ao(Aod), Fmax(Fmaxd), Cf(Cfd), a(ad), eo(0.0) {}
119 
120  MDEvolutionLaw(const MDEvolutionLaw &MDE ); // Copy constructor
121 
122  MDEvolutionLaw *newObj(); //create a colne of itself
123 
124  void InitVars(EPState *EPS); // Initialize all hardening vars called only once
125  // after material point is formed!
126 
127  void setInitD(EPState *EPS); // set initial D once current stress hits the y.s.
128 
129  double getKp( EPState *EPS, double dummy ); // calculating Kp
130 
131  void UpdateAllVars( EPState *EPS, double dlamda ); // Evolve all vars
132  //void UpdateAllTensorVar( EPState *EPS, double dlamda ); // Evolve all tensor vars
133 
134  void print();
135 
136  // some accessor functions
137  double getMc() const;
138  double getMe() const;
139  double getLambda() const;
140  double getec_ref() const;
141  double getp_ref() const;
142 
143  double getkc_b() const;
144  double getkc_d() const;
145  double getke_b() const;
146  double getke_d() const;
147  //double geth() const; // Could be calculated using ho and b_ij * n_ij
148  double getho() const;
149  double getCm() const;
150  double geteo() const;
151  void seteo( double eod);
152 
153  //Dilatancy parameter
154  double getAo() const;
155 
156  double getFmax() const;
157  double getCf() const;
158  double geta() const;
159 
160 
161  //================================================================================
162  // Overloaded Insertion Operator Zhaohui Added Aug. 13, 2000
163  // prints Manzari-Dafalia EvolutionLaw's contents
164  //================================================================================
165  friend std::ostream& operator<< (std::ostream& os, const MDEvolutionLaw & MDEL)
166  {
167  os.unsetf( ios::scientific );
168  os.precision(5);
169 
170  //os.width(10);
171  os << std::endln << "Manzari-Dafalias Evolution Law's parameters:" << std::endln;
172  os << "Mc = " << MDEL.getMc() << "; ";
173  //os.width(10);
174  os << "Me = " << MDEL.getMe() << "; ";
175  //os.width(10);
176  os << "Lambda = " << MDEL.getLambda() << "; ";
177  //os.width(10);
178  os << "ec_ref = " << MDEL.getec_ref() << "; ";
179  //os.width(10);
180  os << "p_ref = " << MDEL.getp_ref() << "kPa" << "; " << std::endln;
181 
182  //os.width(10);
183  os << "kc_b = " << MDEL.getkc_b() << "; ";
184  //os.width(10);
185  os << "kc_d = " << MDEL.getkc_d() << "; ";
186  //os.width(10);
187  os << "ke_b = " << MDEL.getke_b() << "; ";
188  //os.width(10);
189  os << "ke_d = " << MDEL.getke_d() << "; " << std::endln;
190 
191  //os.width(10);
192  //os << "h = " << MDEL.h << "; ";
193  //os.width(10);
194  os << "ho = " << MDEL.getho() << "; ";
195  //os.width(10);
196  os << "Cm = " << MDEL.getCm() << "; " << "eo = " << MDEL.geteo() << std::endln;
197 
198  //os.width(10);
199  //os << "D = " << MDEL.getD() << "; ";
200  //os.width(10);
201  os << "Ao = " << MDEL.getAo() << "; ";
202  //os.width(10);
203  os << "Fmax = " << MDEL.getFmax() << "; ";
204  //os.width(10);
205  os << "Cf = " << MDEL.getCf() << "; " << std::endln << std::endln;
206 
207  return os;
208  }
209 
210  double g_A(double theta, double e); // Interpolation function by Agyris
211  double g_WW(double theta, double e); // Interpolation function by Willan-Warkne
212 
213 
214 };
215 } // end of XC namespace
216 
217 
218 #endif
219 
220 // test
221 
222 
223 
224 
??.
Definition: MD_EL.h:64
3
Definition: EPState.h:73
================================================================================
Definition: ContinuaReprComponent.h:34