EL_NLEijMD.cpp

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 #                                                                                #
00008 # CLASS:             EvolutionLaw_NL_EijMD (on plastic strain)                   #
00009 #                                                                                #
00010 # VERSION:                                                                       #
00011 # LANGUAGE:          C++.ver >= 2.0 ( Borland C++ ver=3.00, SUN C++ ver=2.1 )    #
00012 # TARGET OS:         DOS || UNIX || . . .                                        #
00013 # DESIGNER(S):       Boris Jeremic, Zhaohui Yang                                 #
00014 # PROGRAMMER(S):     Boris Jeremic, Zhaohui Yang                                 #
00015 #                                                                                #
00016 #                                                                                #
00017 # DATE:              09-13-2000                                                  #
00018 # UPDATE HISTORY:                                                                #
00019 #                                                                                #
00020 #                                                                                #
00021 #                                                                                #
00022 # SHORT EXPLANATION: This is a nonlinear evolution law for the evolution of a    #
00023 #                    tensorial variable alpha which depends on plastic strain    #
00024 #                    i.e. dalpha_ij = 2/3*ha*dE_ij -Cr*de_eq*alpha_ij( Armstrong-#
00025 //                   Frederick Model)                                            #
00026 //================================================================================
00027 */
00028 
00029 #ifndef EL_NLEIJMD_CPP
00030 #define EL_NLEIJMD_CPP
00031 
00032 #include "EL_NLEijMD.h"
00033 #include <basics.h>
00034     
00035 #define sqrt23rd 0.8165
00036 
00037 //================================================================================
00038 // Default constructor
00039 //================================================================================
00040 EvolutionLaw_NL_EijMD::EvolutionLaw_NL_EijMD( 
00041                            double eod = 0.85,
00042                            double ad  = 0.5,    
00043                            double Mcd = 1.14,//1.14, 
00044                            double Med = 1.14,//1.14, 
00045                            double Lambdad = 0.025,
00046                            double ec_refd = 0.8, 
00047                            double p_refd = 160.0, 
00048                            double kc_bd = 3.975, 
00049                            double kc_dd = 4.200, 
00050                            double ke_bd = 2.000, 
00051                            double ke_dd = 0.07,  
00052                            double hod = 1200,    
00053                            double Cmd = 0.00,
00054                            double Aod = 2.64,    
00055                            double Fmaxd = 100,   
00056                            double Cfd = 100):
00057                            //double ed  = 0.85,    
00058   eo(eod), a(ad), Mc(Mcd), Me(Med), Lambda(Lambdad), ec_ref(ec_refd), p_ref(p_refd),  
00059   kc_b(kc_bd), kc_d(kc_dd), ke_b(ke_bd), ke_d(ke_dd), ho(hod), Cm(Cmd),
00060   D(0.0), Ao(Aod), Fmax(Fmaxd), Cf(Cfd)
00061   { } 
00062 
00063 //================================================================================
00064 // Copy constructor
00065 //================================================================================
00066 
00067 EvolutionLaw_NL_EijMD::EvolutionLaw_NL_EijMD(const EvolutionLaw_NL_EijMD &MDE ) {
00068 
00069     this->a      = MDE.geta();
00070     this->Mc     = MDE.getMc();
00071     this->Me     = MDE.getMe();
00072     this->Lambda = MDE.getLambda();
00073     this->ec_ref = MDE.getec_ref();
00074     this->p_ref=  MDE.getp_ref();
00075     this->kc_b =  MDE.getkc_b();
00076     this->kc_d =  MDE.getkc_d();
00077     this->ke_b =  MDE.getke_b();
00078     this->ke_d =  MDE.getke_d();
00079     this->ho   =  MDE.getho();
00080     this->eo   =  MDE.geteo();
00081     //this->e   =  MDE.gete();
00082     this->Cm   =  MDE.getCm();
00083     //D is also needed in PS, so it is copied to 2nd cell of scalar var array
00084     this->D    =  MDE.getD();  
00085     this->Ao   =  MDE.getAo();
00086     this->Fmax =  MDE.getFmax(); 
00087     this->Cf   =  MDE.getCf();
00088     this->F    =  MDE.getF(); 
00089 }
00090 
00091 
00092 //================================================================================
00093 //  Create a clone of itself 
00094 //================================================================================
00095 //EvolutionLaw_NL_EijMD * EvolutionLaw_NL_EijMD::newObj() {
00096 EvolutionLaw_T * EvolutionLaw_NL_EijMD::newObj() {
00097     
00098     //EvolutionLaw_T *newEL = new EvolutionLaw_NL_EijMD( *this );
00099     EvolutionLaw_T *newEL = new EvolutionLaw_NL_EijMD( *this );
00100     
00101     return newEL;
00102 
00103 }
00104     
00105 //================================================================================
00106 // Evaluating h_s = h * b_ij = h * (alpha_ij_theta_b - alpha_ij) (For the evaluation of Kp)
00107 //================================================================================
00108 
00109 tensor EvolutionLaw_NL_EijMD::h_t( EPState *EPS, PotentialSurface *PS)
00110 {
00111     //=========================================================================
00112     //calculate  n_ij
00113     stresstensor S = EPS->getStress().deviator();
00114     double p = EPS->getStress().p_hydrostatic();
00115     stresstensor alpha = EPS->getTensorVar( 1 );  // alpha_ij
00116     double m = EPS->getScalarVar(1);
00117 
00118     stresstensor n;
00119     //stresstensor n = EPS->getTensorVar( 2 );
00120    
00121     stresstensor r = S * (1.0 / p);
00122     //r.reportshort("r");
00123     stresstensor r_bar = r - alpha;
00124     stresstensor norm2 = r_bar("ij") * r_bar("ij");
00125     double norm = sqrt( norm2.trace() );
00126     
00127     if ( norm >= d_macheps()){ 
00128       n = r_bar *(1.0 / norm );
00129     }
00130     else {
00131       opserr << "EvolutionLaw_NL_EijMD::h_t  |n_ij| = 0, divide by zero! Program exits.\n";
00132       exit(-1);
00133     }
00134     // n = r_bar *(1.0 / sqrt23rd / m );
00135     //opserr << "nij = " << n;
00136     //EPS->setTensorVar(2, n); //n_ij is also stored in Tensor array for 2nd derivative eval in PS  //
00137                    
00138     
00139     //=========================================================================
00140     //calculating b_ij for Kp and d_ij for updating D
00141 
00142     //Calculate the state parameters xi 
00143     //double e = EPS->gete();
00144     //double e = EPS->getScalarVar(3);
00145                    
00146     //opserr << "\n------>h_t(): \n"; 
00147     //opserr << " p: " << p;
00148     if (p < 0.0)
00149     {
00150        //opserr << " p: " << p;
00151       opserr << "EvolutionLaw_NL_EijMD::h_t   p < 0, Program exits.\n";
00152        exit(-1);
00153     }
00154     //double ec = (EPS->getec()) - (EPS->getLam()) * log( p / (EPS->getpo()) );
00155     //double xi = e - ec;
00156     double xi = EPS->getpsi();
00157     //opserr << " e = " << e << " ec = " << ec << " xi = " << xi << endln;
00158 
00159     //  //Calculating the lode angle theta
00160     //  double J2_bar = r_bar.Jinvariant2();
00161     //  double J3_bar = r_bar.Jinvariant3();
00162     //  double tempd = 3.0*pow(3.0, 0.5)/2.0*J3_bar/ pow( J2_bar, 1.5);
00163     //  //opserr << "theta -1 =" << tempd << endln;
00164     //  
00165     //  if (tempd > 1.0 ) tempd = 1.0; //bug. if tempd = 1.00000000003, acos gives NaN
00166     //  if (tempd < -1.0 ) tempd = -1.0;    
00167     //  double theta0 = acos( tempd ) / 3.0;
00168     double theta = r_bar.theta( );
00169     //opserr << "theta0 = " << theta0/3.1416*180;
00170     //opserr << "  theta = " << theta/3.1416*180 << endln;
00171     
00172     //calculate the alpha_theta_b and alpha_theta_d
00173     double c = getMe() / getMc();
00174 
00175     //  double cd = getke_d() / getkc_d();
00176     //  //stresstensor alpha_theta_d = n("ij") * (g_WW(theta, c) * Mc + g_WW(theta, cd) * kc_d * xi - m) * pow(2.0/3.0, 0.5);
00177     //  stresstensor alpha_theta_d = n * (g_A(theta, c) * Mc + g_A(theta, cd) * kc_d * xi - m) * sqrt23rd;
00178     //  //opserr << "alpha_theta_d " << alpha_theta_d<<" g_WW(theta, c) "<< g_WW(theta, c) << endln;
00179 
00180     double cb = getke_b() / getkc_b();
00181     if ( xi > 0.0 ) xi = 0.0;  // < -xi > for alpha_theta_b
00182     //stresstensor alpha_theta_b = n("ij") * (g_WW(theta, c) * Mc - g_WW(theta, cb) * kc_b * xi - m) * pow(2.0/3.0, 0.5);
00183     //stresstensor alpha_theta_b = n * (g_A(theta, c) * Mc - g_A(theta, cb) * kc_b * xi - m) * sqrt23rd;
00184     double a_theta_b_scalar = g_A(theta, c) * Mc + g_A(theta, cb) * kc_b *(-1.0*xi) - m; // Mc^b > Mc --> this is right refer to p258 of Mazari's paper
00185     stresstensor alpha_theta_b = n * a_theta_b_scalar * sqrt23rd;
00186     alpha_theta_b.null_indices();
00187 
00188     //=========================================================================
00189     // calculating h
00190     stresstensor b;
00191     b =  alpha_theta_b - alpha;
00192     b.null_indices();
00193     //  stresstensor d;
00194     //  d =  alpha_theta_d - alpha;
00195     //  d.null_indices();
00196 
00197     //double alpha_c_b = g_WW(0.0, c) * Mc + g_WW(0.0, cb) * kc_b * (-xi) - m;
00198     double alpha_c_b = g_A(60.0, c) * Mc + g_A(60.0, cb) * kc_b * (-1.0*xi) - m;
00199     double b_ref = 2.0 * sqrt23rd * alpha_c_b;
00200     //double PI = 3.1416;
00201     //double a_theta_pi_b = g_A(theta+PI, c) * Mc + g_A(theta+PI, cb) * kc_b *(-1.0*xi) - m;
00202     //double b_ref = sqrt23rd * ( a_theta_b_scalar + a_theta_pi_b );
00203     tensor temp1 = b("ij") * n("ij");
00204     double bn = temp1.trace();
00205 
00206     if (bn < 0) bn = 0; // Added Joey 02-19-03
00207     double abs_bn = fabs( sqrt(bn) );
00208     //opserr << ">>>> alpha_c_b " << alpha_c_b;
00209     //opserr << " alpha_theta_b " << alpha_theta_b;
00210     //opserr << " alpha " << alpha;
00211     //opserr << " \nn " << n;
00212 
00213     //double h = getho() * abs_bn /( b_ref - abs_bn ); 
00214     double h = getho() * abs_bn /( b_ref - abs_bn );
00215     //opserr << " ||| b_ref =" << b_ref << " bn =" << bn << " abs(bn) =" << abs_bn  << " h =" << h << endln;
00216     //cerr << " " << h << endln; 
00217 
00218     //Updating D and F---need to fine tune
00219     //temp1 = d("ij") * n("ij");
00220     //double dn = temp1.trace();
00221     //opserr << "bn =" << bn << "  dn =" << dn << endln; 
00222     
00224     //stresstensor F = EPS->getTensorVar( 2 );   // getting  F_ij from EPState
00225     //temp1 = F("ij") * n("ij");
00226     //double temp = temp1.trace();
00227     //if (temp < 0)   temp = 0;   
00228     //double A = getAo()*(1.0 + temp);
00229 
00230         
00231     tensor ht = b * h;
00232 
00233     return ht;
00234 
00235 }
00236 
00237 
00238 //================================================================================
00239 //  Print vars defined in Linear Evolution Law
00240 //================================================================================
00241 void EvolutionLaw_NL_EijMD::print()
00242 {
00243     opserr << (*this);
00244 }
00245     
00246 //================================================================================
00247 // prints Manzari-Dafalia EvolutionLaw's contents 
00248 //================================================================================
00249 OPS_Stream& operator<< (OPS_Stream& os, const EvolutionLaw_NL_EijMD & MDEL)
00250 //ostream& operator<< (ostream& os, const EvolutionLaw_NL_EijMD & MDEL)
00251 {
00252   //    os.unsetf( ios::scientific );
00253     os.precision(5);
00254 
00255     //os.width(10);       
00256     os << endln << "Manzari-Dafalias Evolution Law's parameters:" << endln;
00257     //os << "a = " << MDEL.geta() << "; ";
00258     os << "Mc = " << MDEL.getMc() << "; ";
00259     //os.width(10);       
00260     os << "Me = "  << MDEL.getMe() << "; ";
00261     //os.width(10);       
00262     os << "Lambda = " << MDEL.getLambda() << "; ";
00263     //os.width(10);       
00264     os << "ec_ref = " << MDEL.getec_ref() << "; ";
00265     //os.width(10);       
00266     os << "p_ref = " << MDEL.getp_ref() << "kPa"  << "; " << endln;
00267 
00268     //os.width(10);       
00269     os << "kc_b = " << MDEL.getkc_b() << "; ";
00270     //os.width(10);       
00271     os << "kc_d = " << MDEL.getkc_d() << "; ";
00272     //os.width(10);       
00273     os << "ke_b = " << MDEL.getke_b() << "; ";
00274     //os.width(10);       
00275     os << "ke_d = " << MDEL.getke_d() << "; " << endln;
00276 
00277     //os.width(10);       
00278     //os << "h = " << MDEL.h << "; ";
00279     //os.width(10);       
00280     os << "ho = " << MDEL.getho() << "; ";
00281     //os.width(10);       
00282     os << "Cm = " << MDEL.getCm() << "; " << endln;
00283 
00284     //os.width(10);       
00285     os << "D = " << MDEL.getD() << "; ";
00286     //os.width(10);       
00287     os << "Ao = " << MDEL.getAo() << "; ";
00288     //os.width(10);       
00289     //os << "Fmax = " << MDEL.getFmax() << "; ";
00291     //os << "Cf = " << MDEL.getCf() << "; " << endln; 
00292     //os << "F = " << MDEL.getF() << endln; 
00293            
00294     return os;
00295 }  
00296 
00297 
00298 //================================================================================
00299 //  Initialize some  vars in EPState                                    
00300 //================================================================================
00301 //void EvolutionLaw_L_EijMD::InitVars(EPState  *EPS) 
00302 
00303 int EvolutionLaw_NL_EijMD::updateEeDm(EPState *EPS, double st_vol, double dLamda)
00304 {
00305     int err = 0;
00306     
00307     //opserr << "------>updateEeDm(): \n"; 
00308     
00309     double p = EPS->getStress().p_hydrostatic();//Pc???
00310 
00312     //double p_atm = 100.0; //Kpa atmospheric pressure
00313     //double E = EPS->getEo()* pow( (p/p_atm), geta());
00314     //EPS->setE( E );
00315     //opserr << " EL_NLEijMD -->Ec = " << E << endln;
00316      
00317     //if ( dLamda < 0)   dLamda = 0;   //One more bug found by Joey Yang 07-16-02 Forgot <Macauley bracket>
00318 
00319     // Updating e
00320     //double st_vol = st.p_hydrostatic();
00321     double e = EPS->gete();
00322     //Should focus on plastic volumetric strain  Joey 02-18-03
00323     //double de = -(1.0 + geteo())*st_vol; //bug found should be (-st_vol) 07-16-02 Compressive strain is negative
00324     //double de = -(1.0 + (EPS->geteo()) )*st_vol; //ZC
00325     double de = -(1.0 + eo )*st_vol;    
00326     //e = e + de;
00327     EPS->sete( e + de );
00328     
00329     //double ec = (EPS->getec()) - (EPS->getLam()) * log( p / (EPS->getpo()) );
00330     double ec = getec_ref() - getLambda() * log( p / getp_ref() );    
00331     double xi = EPS->gete() + de - ec;
00332     EPS->setpsi( xi );
00333     //EPS->setScalarVar(3, e); // e also stored in scalar array's 3nd cell for PS
00334     //opserr << " ++st_vol = " << st_vol << " de = " << de << " e = " << e << " p = " << p << " ec = " << ec << " xi " << xi;
00335     
00336     //double Do = EPS->getScalarVar(2);
00337     //opserr << " !!!!! Do = " << Do;
00338     //if ( dLamda < 0)
00339     //opserr << " dLamda = " << dLamda << endln;
00340 
00341     //Just moved here!!!!!
00342        double m = EPS->getScalarVar(1);
00343        stresstensor n;
00344        stresstensor S = (EPS->getStress()).deviator();
00345        stresstensor alpha = EPS->getTensorVar( 1 );  // alpha_ij
00346 
00347        stresstensor r = S * (1.0 / p);
00348        //r.reportshort("r");
00349        stresstensor r_bar = r - alpha;
00350        stresstensor norm2 = r_bar("ij") * r_bar("ij");
00351        double norm = sqrt( norm2.trace() );
00352        
00353        if ( norm >= d_macheps()){ 
00354          n = r_bar *(1.0 / norm );
00355        }
00356        else {
00357          opserr << "EvolutionLaw_L_EijMD::dFods  |n_ij| = 0, divide by zero! Program exits.\n";
00358          err += 1;
00359          exit(-1);
00360        }                 
00361        //wrong Joey 02-10-03
00362        //n = r_bar *(1.0 / sqrt23rd / m );
00363        
00364        //if ( dLamda > 0 ) 
00365           EPS->setTensorVar(2, n); //n_ij is also stored in Tensor array for 2nd derivative eval in PS  //
00366        //opserr << " alpha = " << alpha;
00367        //opserr << " n = " << n;
00368        //opserr << "\n **** n =     " << n;
00369 
00370       //Updating D and m if dLamda != 0.0
00371       // Should also update D no matter dLamda is 0 or not.
00372       //if (dLamda != 0.0)
00373       //{
00374 
00375        //=========================================================================
00376        //calculate  n_ij
00377 
00378 
00379 
00380        //Calculate the state parameters xi 
00381 
00382        // if (p < 0.0)
00383        // {
00384        //    //p = 0.1;
00385        //         g3ErrorHandler->warning("EvolutionLaw_NL_EijMD::updateEeDm   p < 0, Program exits.");
00386        //    exit(-1);
00387        // }
00388        
00389        //double ec = ( EPS->getec() ) - (EPS->getLam()) * log( p/( EPS->getpo() ) );
00390        //double xi = ( EPS->gete() ) - ec;
00391        
00392        //  //=========================================================================
00393        //  // Update m
00394        //  double m = EPS->getScalarVar(1);
00395        //  double Cm = getCm(); 
00396        //  double eo = geteo(); 
00397        //  double dm = dLamda * Cm * ( 1.0 + eo ) * D;
00398        //  m = m - dm;
00399        //  EPS->setScalarVar(1, m);
00400        //  //opserr  << endln << "dm = " << dm << "m = " << m << endln;
00401 
00402        //=========================================================================
00403        // Update F
00404        stresstensor dF;
00405        stresstensor F = EPS->getTensorVar( 3 );   // getting  F_ij from EPState
00406        double D = getD();
00407        //if (D != EPS->getScalarVar(2)) {
00408        //  g3ErrorHandler->warning("EvolutionLaw_L_EijMD::updateEeDm  D values contradict:%f %f ", D, EPS->getScalarVar(2));
00409        //        err += 1;
00410        //  //exit(-1);
00411        //}
00412        
00413        if ( D > 0.0 ) D = 0.0;
00414        if (dLamda < 0) dLamda = 0;
00415        dF =  ( n("ij") * getFmax()  + F("ij") ) * dLamda * getCf() * (-1.0*D);
00416        //opserr << "dF" << dF;
00417        F = F - dF;
00418        EPS->setTensorVar(3, F);
00419        this->F = F;
00420        //opserr << " \n F =          " << F << endln;       
00421 
00422        tensor temp_tensor = F("ij") * n("ij");
00423        double temp = temp_tensor.trace();
00424        if (temp < 0)   temp = 0;
00425        double A = getAo()*(1.0 + temp);
00426        //double A = getAo();
00427        
00428        //  //Calculating the lode angle theta
00429        //  double J2_bar = r_bar.Jinvariant2();
00430        //  double J3_bar = r_bar.Jinvariant3();
00431        //  double tempd = 3.0*pow(3.0, 0.5)/2.0*J3_bar/ pow( J2_bar, 1.5);
00432        //  
00433        //  if (tempd > 1.0 ) tempd = 1.0; //bug. if tempd = 1.00000000003, acos gives nan
00434        //  if (tempd < -1.0 ) tempd = -1.0;
00435        //  
00436        double theta = r_bar.theta( );
00437        //opserr << "Update... theta = " << theta/3.1416*180 << endln;
00438        
00439        //Calculate alpha_theta_d
00440        double c = getMe() / getMc();
00441        
00442        double cd = getke_d() / getkc_d();
00443        
00444        //Testing g_WW
00445        //opserr << "g_A(0, c) " << g_A(0.0, 0.0167) << endln;
00446        //opserr << "g_A(60, c) " << g_A(1.0472, 0.0167) << endln;
00447        double alpha_theta_dd = g_A(theta, c) * Mc + g_A(theta, cd) * getkc_d() * xi - m;
00448        stresstensor alpha_theta_d = n("ij") * alpha_theta_dd * sqrt23rd;
00450        //opserr << " alpha_theta_d " << alpha_theta_d; //<<" g_A(theta, cd) "<< g_A(theta, cd) << " Mc " << Mc << endln;
00451        //opserr << " alpha = " << alpha << "\n";
00452                         
00453        stresstensor d;
00454        d =  alpha_theta_d - alpha;
00455        d.null_indices();
00456        //EPS->setTensorVar(2, d); //d is also stored in Tensor array for 2nd derivative eval in PS  //no use since F is gone.
00457        //opserr << " d = "  << d << " n = "  << n << endln;
00458 
00459        //=========================================================================
00460        // Updating D --does not depend on dLamda
00461        tensor temp1 = d("ij") * n("ij");
00462        temp1.null_indices();
00463        double dn =  temp1.trace();
00464        
00465        // Restrictions 
00466        if ( xi > 0.0 && dn < 0.0) {
00467          opserr << "Restriction !";
00468          dn = 0.0;
00469        }
00470        
00471        double newD = dn * A;
00472        EPS->setScalarVar(2, newD); // D also stored in scalar array's 2nd cell for PS
00473        this->D = newD;
00474        //opserr << " dn = "  << dn << " ** D = " << newD << endln << endln;
00476     
00477     //}
00478     
00479     return err;
00480 }   
00481 
00482 
00483 //================================================================================
00484 //  Set initial value of D once the current stress hit the yield surface        
00485 //  for MD Hardening model only                                                 
00486 //================================================================================
00487 //void EvolutionLaw_L_EijMD::setInitD(EPState  *EPS) 
00488 //
00489 //void EvolutionLaw_NL_EijMD::updateDF(EPState  *EPS) 
00490 //{
00491 //
00492 //}
00493 
00494 //================================================================================
00495 // Private accessory functions
00496 
00497 //================================================================================
00498 double EvolutionLaw_NL_EijMD::geta() const 
00499 {
00500     return a;
00501 }
00502 
00503 //================================================================================
00504 double EvolutionLaw_NL_EijMD::getMc() const 
00505 {
00506     return Mc;
00507 }
00508 
00509 //================================================================================
00510 double EvolutionLaw_NL_EijMD::getMe() const 
00511 {
00512     return Me;
00513 }
00514 
00515 
00516 //================================================================================
00517 double EvolutionLaw_NL_EijMD::getLambda() const
00518 {
00519     return Lambda;
00520 }
00521 
00522 //================================================================================
00523 double EvolutionLaw_NL_EijMD::getec_ref() const
00524 {
00525     return ec_ref;
00526 }
00527 
00528 //================================================================================
00529 double EvolutionLaw_NL_EijMD::getp_ref() const 
00530 {
00531     return p_ref;
00532 }
00533 
00534 //================================================================================
00535 double EvolutionLaw_NL_EijMD::getkc_b() const
00536 {
00537     return kc_b;
00538 }
00539 
00540 //================================================================================
00541 double EvolutionLaw_NL_EijMD::getkc_d() const  
00542 {
00543     return kc_d;
00544 }
00545 
00546 //================================================================================
00547 double EvolutionLaw_NL_EijMD::getke_b() const
00548 {
00549     return ke_b;
00550 }
00551 
00552 //================================================================================
00553 double EvolutionLaw_NL_EijMD::getke_d() const
00554 {
00555     return ke_d;
00556 }
00557 
00558 //================================================================================
00559 //double EvolutionLaw_NL_EijMD::geth() const
00560 //{       
00561 //    return h;
00562 //}
00563 
00564 //================================================================================
00565 double EvolutionLaw_NL_EijMD::getho() const
00566 {      
00567     return ho;
00568 }
00569 
00570 //================================================================================
00571 double EvolutionLaw_NL_EijMD::getCm() const
00572 {       
00573     return Cm;
00574 }
00575 
00576 //================================================================================
00577 double EvolutionLaw_NL_EijMD::geteo() const
00578 {       
00579     return eo;
00580 }
00581 
00583 //double EvolutionLaw_NL_EijMD::gete() const
00584 //{       
00585 //    return e;
00586 //}
00587 
00588 
00589 //================================================================================
00590 double EvolutionLaw_NL_EijMD::getAo() const
00591 {       
00592     return Ao;
00593 }
00594 
00595 //================================================================================
00596 double EvolutionLaw_NL_EijMD::getD() const
00597 {       
00598     return D;
00599 }
00600 
00601 
00602 //================================================================================
00603 stresstensor EvolutionLaw_NL_EijMD::getF() const
00604 {       
00605     return F;
00606 }
00607 
00608 //================================================================================
00609 double EvolutionLaw_NL_EijMD::getFmax() const
00610 {       
00611     return Fmax;
00612 }
00613 
00614 //================================================================================
00615 double EvolutionLaw_NL_EijMD::getCf() const
00616 {       
00617     return Cf;
00618 }
00619 
00620 
00621 //================================================================================
00622 //  Interpolation function No.1  -- Agyris: g_A(theta, e) 
00623 //================================================================================
00624 
00625 double EvolutionLaw_NL_EijMD::g_A(double theta, double e) 
00626 {
00627     double temp = 2.0 * e;
00628     temp  = temp / ( (1.0 + e) - (1.0 - e) * cos(3.0*theta) ); 
00629 
00630     return temp;
00631 }
00632 
00633 
00634 //================================================================================
00635 //  Interpolation function No.2  -- Willan-Warkne: g_WW(theta, e)
00636 //================================================================================
00637 //g_WW(60, 0.0167) =  +3.3818e-02?????
00638 
00639 double EvolutionLaw_NL_EijMD::g_WW(double theta, double e) 
00640 {
00641     //Rotate 60 degree to produce 1 at 0.0, c at 60 degrees
00642     theta = theta - 3.1415926/3;
00643     double g1 = 4.0*( 1.0 - e*e ) * cos(theta) * cos(theta) + pow(2.0*e-1.0, 2.0);
00644     double d1 = 2.0*( 1.0 - e*e ) * cos( theta );
00645     double d2 = ( 2.0*e-1.0 ) * pow( (4.0*(1.0-e*e)*cos(theta)*cos(theta) + 5.0*e*e - 4.0*e), 0.5);
00646     double temp =( d1 + d2 ) / g1; 
00647 
00648     return temp;
00649 }
00650 
00651 #endif
00652 

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