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