MD_EL.h

Go to the documentation of this file.
00001 /*
00002 //================================================================================
00003 # COPYRIGHT (C):     :-))                                                        #
00004 # PROJECT:           Object Oriented Finite Element Program                      #
00005 # PURPOSE:           General platform for elaso-plastic constitutive model       #
00006 #                    implementation                                              #
00007 # CLASS:             MDEvolutionLaw (evolution law for Manzari-Dafalias Model)   #
00008 #                                                                                #
00009 # VERSION:                                                                       #
00010 # LANGUAGE:          C++.ver >= 2.0 ( Borland C++ ver=3.00, SUN C++ ver=2.1 )    #
00011 # TARGET OS:         DOS || UNIX || . . .                                        #
00012 # DESIGNER(S):       Boris Jeremic, Zhaohui Yang                                 #
00013 # PROGRAMMER(S):     Boris Jeremic, Zhaohui Yang                                 #
00014 #                                                                                #
00015 #                                                                                #
00016 # DATE:              08-03-2000                                                  #
00017 # UPDATE HISTORY:                                                                #
00018 #                                                                                #
00019 #                                                                                #
00020 #                                                                                #
00021 #                                                                                #
00022 # SHORT EXPLANATION: The goal is to create a platform for efficient and easy     #
00023 #                    implemetation of any elasto-plastic constitutive model!     #
00024 #                                                                                #
00025 //================================================================================
00026 */
00027 
00028 #ifndef MD_EL_H
00029 #define MD_EL_H
00030 
00031 #include <math.h>
00032 
00033 #include <iOPS_Stream.h>
00034 #include <iomanip.h>
00035 
00036 #include "EL.h"
00037 
00038 class MDEvolutionLaw : public EvolutionLaw
00039 {
00040  // private to define the evolution law for Manzari-Dafalias critical state model
00041  public: 
00042  
00043     //Critical state parameters
00044     double Mc;
00045     double Me;
00046     double Lambda; // slope of e vs. ln p
00047     double ec_ref;// critical void ratio at reference mean effective stress p
00048     double p_ref; // critical void ratio at reference mean effective stress p
00049 
00050     // surface evolution parameters
00051     double kc_b;  // b stands for bounding surface, c compression
00052     double kc_d;  // d stands for dilatancy surface, c compression 
00053     double ke_b;  // d stands for bounding surface, e compression
00054     double ke_d;  // d stands for dilatancy surface, e compression 
00055 
00056     // Parameters to calculate plastic modulus 
00057     //double h;  // Could be calculated using ho and b_ij * n_ij
00058     double ho;
00059     double Cm;
00060     double eo;   // initial void ratio
00061 
00062     //Dilatancy parameter
00063     //double D; //Moved to EPS's second scalar var
00064     double Ao;
00065 
00066     //Parameters to define the evolution of Fabric Tensor
00067     double Fmax;
00068     double Cf;
00069     double a;   //exponent for elastic modulus evolution  
00070     
00071  public:
00072     //MDEvolutionLaw( );                   // default constructor---no parameters
00073     
00074     MDEvolutionLaw( double Mcd = 1.14,   // default constructor
00075                     double Med = 1.14,
00076                     double Lamdad = 0.025,
00077                     double ec_refd = 0.8,
00078                     double p_refd = 100, //kPa
00079                     double kc_bd = 3.975,
00080                     double kc_dd = 4.200,
00081                     double ke_bd = 2.000,
00082                     double ke_dd = 0.070,
00083                     double hod = 1200.0,  // old 1200
00084                     double Cmd = 0.0,    // old 0.0
00085                     //double eod = 0.65,
00086                     double Aod = 2.64,   //old 2.64
00087                     double Fmaxd = 100,
00088                     double Cfd = 100, 
00089                     double ad = 0.6) : 
00090                     Mc (Mcd), Me(Med), Lambda(Lamdad), ec_ref(ec_refd), p_ref(p_refd),
00091                     kc_b(kc_bd), kc_d(kc_dd), ke_b(ke_bd), ke_d(ke_dd), ho(hod), Cm(Cmd),
00092                     Ao(Aod), Fmax(Fmaxd), Cf(Cfd), a(ad), eo(0.0) {} 
00093     
00094     MDEvolutionLaw(const MDEvolutionLaw &MDE );   // Copy constructor
00095     
00096     MDEvolutionLaw *newObj();                     //create a colne of itself
00097     
00098     void InitVars(EPState *EPS);    // Initialize all hardening vars called only once 
00099                                     // after material point is formed!
00100     
00101     void setInitD(EPState  *EPS);   // set initial D once current stress hits the y.s.
00102     
00103     double getKp( EPState *EPS, double dummy );     // calculating Kp 
00104     
00105     void UpdateAllVars( EPState *EPS, double dlamda );  // Evolve all vars
00106     //void UpdateAllTensorVar( EPState *EPS, double dlamda );  // Evolve all tensor vars
00107 
00108     void print();
00109 
00110     // some accessor functions
00111     double getMc() const;
00112     double getMe() const;
00113     double getLambda() const;
00114     double getec_ref() const;
00115     double getp_ref() const; 
00116 
00117     double getkc_b() const;  
00118     double getkc_d() const;  
00119     double getke_b() const;  
00120     double getke_d() const;  
00121     //double geth() const;  // Could be calculated using ho and b_ij * n_ij
00122     double getho() const;
00123     double getCm() const;
00124     double geteo() const;
00125     void seteo( double eod);
00126 
00127     //Dilatancy parameter
00128     double getAo() const;
00129 
00130     double getFmax() const;
00131     double getCf() const;
00132     double geta() const;
00133 
00134 
00135     //================================================================================
00136     // Overloaded Insertion Operator      Zhaohui Added Aug. 13, 2000
00137     // prints Manzari-Dafalia EvolutionLaw's contents 
00138     //================================================================================
00139     friend OPS_Stream& operator<< (OPS_Stream& os, const MDEvolutionLaw & MDEL)
00140     {
00141         os.unsetf( ios::scientific );
00142         os.precision(5);
00143 
00144         //os.width(10);       
00145         os << endlnn << "Manzari-Dafalias Evolution Law's parameters:" << endlnn;
00146         os << "Mc = " << MDEL.getMc() << "; ";
00147         //os.width(10);       
00148         os << "Me = "  << MDEL.getMe() << "; ";
00149         //os.width(10);       
00150         os << "Lambda = " << MDEL.getLambda() << "; ";
00151         //os.width(10);       
00152         os << "ec_ref = " << MDEL.getec_ref() << "; ";
00153         //os.width(10);       
00154         os << "p_ref = " << MDEL.getp_ref() << "kPa"  << "; " << endlnn;
00155 
00156         //os.width(10);       
00157         os << "kc_b = " << MDEL.getkc_b() << "; ";
00158         //os.width(10);       
00159         os << "kc_d = " << MDEL.getkc_d() << "; ";
00160         //os.width(10);       
00161         os << "ke_b = " << MDEL.getke_b() << "; ";
00162         //os.width(10);       
00163         os << "ke_d = " << MDEL.getke_d() << "; " << endlnn;
00164 
00165         //os.width(10);       
00166         //os << "h = " << MDEL.h << "; ";
00167         //os.width(10);       
00168         os << "ho = " << MDEL.getho() << "; ";
00169         //os.width(10);       
00170         os << "Cm = " << MDEL.getCm() << "; " << "eo = " << MDEL.geteo() << endlnn;
00171 
00172         //os.width(10);       
00173         //os << "D = " << MDEL.getD() << "; ";
00174         //os.width(10);       
00175         os << "Ao = " << MDEL.getAo() << "; ";
00176         //os.width(10);       
00177         os << "Fmax = " << MDEL.getFmax() << "; ";
00178         //os.width(10);       
00179         os << "Cf = " << MDEL.getCf() << "; " << endlnn << endlnn; 
00180                
00181         return os;
00182     }  
00183 
00184     double g_A(double theta, double e);  // Interpolation function  by Agyris
00185     double g_WW(double theta, double e); // Interpolation function  by Willan-Warkne
00186 
00187     
00188 };
00189 
00190 
00191 #endif
00192 
00193 // test
00194 
00195 
00196 
00197 

Generated on Mon Oct 23 15:05:16 2006 for OpenSees by doxygen 1.5.0