EPState.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 # CLASS:             DPEPState (the base class for all Elasto-plastic state)     #
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:    May 2004 Guanzhou changed Commit to be consistent           #
00018 #                             with theory                                        #
00019 #                    May 2004, Zhao Cheng splitted the elastic part              #
00020 #                                                                                #
00021 #                                                                                #
00022 #                                                                                #
00023 # SHORT EXPLANATION: This class is used to hold all state parameters and internal#
00024 #                    variables in an elasto-plastic constitutive model!          #
00025 #                                                                                #
00026 //================================================================================
00027 */
00028 
00029 #ifndef EPState_CPP
00030 #define EPState_CPP
00031 
00032 #include "EPState.h"
00033 
00034 //stresstensor EPState::TensorVar[ 4 ];
00035 //stresstensor EPState::TensorVar_commit[ 4 ];
00036 //stresstensor EPState::TensorVar_init[ 4 ];
00037 
00038 //tensor  EPState::Eep( 4, def_dim_4, 0.0 );
00039 //tensor  EPState::Eep_commit( 4, def_dim_4, 0.0 );
00040 //tensor  EPState::Eep_init( 4, def_dim_4, 0.0 );
00041 
00042 //================================================================================
00043 //Normal Constructor 1
00044 //================================================================================
00045 
00046 //ZC05/2004 EPState::EPState(double               Eod,
00047 //ZC05/2004                  double               Ed,
00048 //ZC05/2004                  double               nu,
00049 //ZC05/2004                  double               rho,
00050 EPState::EPState(
00051                  const stresstensor  &stressp,
00052                  const straintensor  &strainp,
00053                  const straintensor  &Estrainp,
00054                  const straintensor  &Pstrainp,
00055                  const straintensor  &dEstrainp,
00056                  const straintensor  &dPstrainp,
00057                  int                  NScalarp,
00058                  const double       * Scalarp,
00059                  int                  NTensorp,
00060                  const stresstensor * Tensorp,
00061                  const tensor       & Eepp,
00062                  const stresstensor & Stress_commitp,
00063                  const straintensor & Strain_commitp,
00064                  const straintensor & ElasticStrain_commitp,
00065                  const double       * Scalar_commitp,
00066                  const stresstensor * Tensor_commitp,
00067                  const tensor       & Eep_commitp,
00068                  const stresstensor & Stress_initp,
00069                  const straintensor & Strain_initp,
00070                  const double       * Scalar_initp,
00071                  const stresstensor * Tensor_initp,
00072                  const tensor       & Eep_initp,
00073                  bool                 Convergedp,
00074 //ZC05/2004           int                  Elasticflagp,
00075 //ZC05/2004           double         Evp,
00076 //ZC05/2004           double               nuhvp,
00077 //ZC05/2004           double               Ghvp,
00078 //ZC05/2004           double               eop,
00079 //ZC05/2004           double               ecp,
00080 //ZC05/2004           double               Lamp,
00081 //ZC05/2004           double               pop,
00082                  double               ep,
00083                  double               psip,
00084                  int flag )
00085 //ZC05/2004           double          ap
00086 //ZC05/2004     )
00087 //ZC05/2004: Eo(Eod), E_Young(Ed), nu_Poisson(nu), rho_mass_density(rho), CurrentStress(stressp),
00088 //ZC05/2004  CurrentStrain(strainp), ElasticStrain(Estrainp), PlasticStrain(Pstrainp),
00089 //ZC05/2004  dElasticStrain(dEstrainp), dPlasticStrain(dPstrainp), Eep(Eepp),
00090 //ZC05/2004  Stress_commit(Stress_commitp), Strain_commit(Strain_commitp),
00091 //ZC05/2004  Eep_commit(Eep_commitp), Stress_init(Stress_initp), Strain_init(Strain_initp),
00092 //ZC05/2004  Eep_init(Eep_initp), Converged (Convergedp),
00093 //ZC05/2004  Elasticflag(Elasticflagp),Ev(Evp),nuhv(nuhvp),Ghv(Ghvp),
00094 //ZC05/2004  eo(eop), ec(ecp), Lambda(Lamp), po(pop), e(ep), psi(psip), a(ap)
00095 : CurrentStress(stressp),
00096   CurrentStrain(strainp), ElasticStrain(Estrainp), PlasticStrain(Pstrainp),
00097   dElasticStrain(dEstrainp), dPlasticStrain(dPstrainp), Eep(Eepp),
00098   Stress_commit(Stress_commitp), Strain_commit(Strain_commitp), ElasticStrain_commit(ElasticStrain_commitp),
00099   Eep_commit(Eep_commitp), Stress_init(Stress_initp), Strain_init(Strain_initp),
00100   Eep_init(Eep_initp), Converged (Convergedp), e(ep), psi(psip), integratorFlag(flag)
00101 {
00102 
00103       //Eo               = Eod;
00104       //E_Young          = Ed;
00105       //nu_Poisson       = nu;
00106       //rho_mass_density = rho;
00107       Delta_lambda = 0.0;
00108 
00109       NScalarVar = NScalarp;
00110       //ScalarVar = new double[ NScalarVar ];
00111       //if ( !ScalarVar ) {
00112       if ( ( !Scalarp ) && (NScalarVar != 0) ) {
00113   opserr << "EPState::EPState   No initial values for scalar hardening vars, set to aero\n";
00114          //::exit(1);
00115       }
00116       else {
00117          for (int i = 0; i < NScalarVar; i++) {
00118             //opserr << Scalarp[i] << endlnn;
00119            ScalarVar[i] = Scalarp[i];
00120            ScalarVar_commit[i] = Scalar_commitp[i];
00121            ScalarVar_init[i] = Scalar_initp[i];
00122          }
00123       }
00124 
00125       NTensorVar = NTensorp;
00126       //TensorVar = new stresstensor[ NTensorVar ];
00127       //if ( !TensorVar ) {
00128       //   g3ErrorHandler->fatal("EPState::EPState insufficient memory for Tensor hardening vars");
00129       //   ::exit(1);
00130       //}
00131 
00132       if ( (!Tensorp ) && ( NTensorVar)) {
00133          //ScalarVar = new double[ NScalarVar ];
00134          //if ( !ScalarVar ) {
00135   opserr << "EPState::EPState   No initial values for tensorial hardening vars, set to zero\n";
00136          //::exit(1);
00137       }
00138       else {
00139          for (int i = 0; i < NTensorVar; i++) {
00140             //opserr << Tensorp[i];
00141             TensorVar[i] = Tensorp[i];
00142             TensorVar_commit[i] = Tensor_commitp[i];
00143             TensorVar_init[i] = Tensor_initp[i];
00144             //opserr << TensorVar[i];
00145             //TensorVar[i].null_indices();
00146          }
00147       }
00148 }
00149 
00150 //================================================================================
00151 //Normal Constructor 11
00152 //================================================================================
00153 
00154 //ZC05/2004EPState::EPState(double              Eod,
00155 //ZC05/2004                 double              Ed,
00156 //ZC05/2004                 double              nu,
00157 //ZC05/2004                 double              rho,
00158 EPState::EPState(
00159                  const stresstensor  stressp,
00160                  const straintensor  strainp,
00161                  const straintensor  Estrainp,
00162                  const straintensor  Pstrainp,
00163                  int                 NScalarp,
00164                  const double       *Scalarp,
00165                  int                 NTensorp,
00166                  const stresstensor *Tensorp,
00167                  double             ep,
00168                  double             psip,
00169                  int flag )
00170 //ZC05/2004                 int                 Elasticflagp,
00171 //ZC05/2004                 double              Evp,
00172 //ZC05/2004                 double              nuhvp,
00173 //ZC05/2004                 double              Ghvp,
00174 //ZC05/2004                 double              eop,
00175 //ZC05/2004                 double              ecp,
00176 //ZC05/2004                 double              Lamp,
00177 //ZC05/2004                 double              pop,
00178 //ZC05/2004                 double              ap
00179 //ZC05/2004     )
00180 //: Eo(Eod), E_Young(Ed), nu_Poisson(nu), rho_mass_density(rho),
00181 //  CurrentStress(stressp), CurrentStrain(strainp), ElasticStrain(Estrainp),
00182 //  PlasticStrain(Pstrainp), Stress_commit(stressp), Strain_commit(strainp),
00183 //  Stress_init(stressp), Strain_init(strainp),
00184 //  Elasticflag(Elasticflagp),Ev(Evp),nuhv(nuhvp),Ghv(Ghvp),
00185 //  eo(eop), ec(ecp), Lambda(Lamp),po(pop), e(eop), a(ap)
00186 {
00187 
00188 //ZC05/2004Eo  = Eod;
00189 //ZC05/2004E_Young  = Ed;
00190 //ZC05/2004nu_Poisson  = nu;
00191 //ZC05/2004rho_mass_density  = rho;
00192 
00193 CurrentStress  = stressp;
00194 CurrentStrain  = strainp;
00195 ElasticStrain  = Estrainp;
00196 ElasticStrain_commit = Estrainp;//Guanzhou Mar2005
00197 Delta_lambda = 0.0;
00198 
00199 PlasticStrain  = Pstrainp;
00200 Stress_commit  = stressp;
00201 Strain_commit  = strainp;
00202 
00203 Stress_init  = stressp;
00204 Strain_init  = strainp;
00205 integratorFlag = flag;//Guanzhou March2005
00206 
00207 //ZC05/2004Elasticflag  = Elasticflagp;
00208 //ZC05/2004Ev  = Evp;
00209 //ZC05/2004nuhv  = nuhvp;
00210 //ZC05/2004Ghv  = Ghvp;
00211 
00212 //ZC05/2004eo  = eop;
00213 //ZC05/2004ec  = ecp;
00214 //ZC05/2004Lambda  = Lamp;
00215 //ZC05/2004po  = pop;
00216 //ZC05/2004e  = eop;
00217 //ZC05/2004a  = ap;
00218 
00219 e = ep;    //ZC
00220 psi = psip;  //ZC
00221 
00222       //Eo               = Eod;
00223       //E_Young          = Ed;
00224       //nu_Poisson       = nu;
00225       //rho_mass_density = rho;
00226 
00227       //CurrentStress    = stressp;
00228 
00229       //opserr << "stressp " << stressp;
00230       //CurrentStress.null_indices();
00231 
00232       //CurrentStrain    =  strainp;
00233       //ElasticStrain    =  Estrainp;
00234       //PlasticStrain    =  Pstrainp;
00235       //Eep = Eepp;
00236       Eep = tensor( 4, def_dim_4, 0.0 ); // need to be initialized as 4th order tensor
00237 
00238       //opserr << "strainp " << strainp;
00239       //CurrentStrain.null_indices();
00240 
00241       NScalarVar = NScalarp;
00242       //ScalarVar = new double[ NScalarVar ];
00243       //if ( !ScalarVar ) {
00244       if ( ( !Scalarp ) && (NScalarVar != 0) ) {
00245   opserr << "EPState::EPState   No initial values for scalar hardening vars, set to zero\n";
00246          //::exit(1);
00247       }
00248       else {
00249          for (int i = 0; i < NScalarVar; i++) {
00250             //opserr << Scalarp[i] << endlnn;
00251           ScalarVar[i] = Scalarp[i];
00252           ScalarVar_commit[i] = Scalarp[i];
00253           ScalarVar_init[i] = Scalarp[i];
00254          }
00255       }
00256 
00257 
00258       NTensorVar = NTensorp;
00259       //TensorVar = new stresstensor[ NTensorVar ];
00260       //if ( !TensorVar ) {
00261       //   g3ErrorHandler->fatal("EPState::EPState insufficient memory for Tensor hardening vars");
00262       //   ::exit(1);
00263       //}
00264 
00265       if ( ( !Tensorp ) && ( NTensorVar != 0 ) ) {
00266          //ScalarVar = new double[ NScalarVar ];
00267          //if ( !ScalarVar ) {
00268   opserr << "EPState::EPState   No initial values for tensorial hardening vars, set to zero\n";
00269          //::exit(1);
00270       }
00271       else {
00272          for (int i = 0; i < NTensorVar; i++) {
00273           //opserr << Tensorp[i] << endlnn;
00274           //opserr << TensorVar[i] << endlnn;
00275           TensorVar[i] = Tensorp[i];
00276           TensorVar_commit[i] = Tensorp[i];
00277           TensorVar_init[i] = Tensorp[i];
00278           //opserr << TensorVar[i] << endlnn;
00279           //TensorVar[i].null_indices();
00280          }
00281      }
00282 
00283      Converged = false;
00284 //ZC05/2004     psi = e - ec;
00285 }
00286 
00287 //================================================================================
00288 //Normal Constructor 2
00289 //================================================================================
00290 
00291 //ZC05/2004EPState::EPState(double              Eod,
00292 //ZC05/2004                 double              Ed,
00293 //ZC05/2004                 double              nu,
00294 //ZC05/2004                 double              rho,
00295 EPState::EPState(
00296            int                 NScalarp,
00297            const double       *Scalarp,
00298            int                 NTensorp,
00299            const stresstensor *Tensorp
00300 //ZC05/2004           int                 Elasticflagp,
00301 //ZC05/2004           double        Evp,
00302 //ZC05/2004           double              nuhvp,
00303 //ZC05/2004           double              Ghvp,
00304 //ZC05/2004           double              eop,
00305 //ZC05/2004           double              ecp,
00306 //ZC05/2004           double              Lamp,
00307 //ZC05/2004           double              pop,
00308 //ZC05/2004           double         ap
00309      )
00310 //: Eo(Eod), E_Young(Ed), nu_Poisson(nu), rho_mass_density(rho),
00311 //  Elasticflag(Elasticflagp),Ev(Evp),nuhv(nuhvp),Ghv(Ghvp),
00312 //  eo(eop), ec(ecp), Lambda(Lamp), po(pop), e(eop), a(ap)
00313 {
00314 
00315 //ZC05/2004Eo = Eod;
00316 //ZC05/2004E_Young = Ed;
00317 //ZC05/2004nu_Poisson = nu;
00318 //ZC05/2004rho_mass_density = rho;
00319 //ZC05/2004Elasticflag = Elasticflagp;
00320 //ZC05/2004Ev = Evp;
00321 //ZC05/2004nuhv = nuhvp;
00322 //ZC05/2004Ghv = Ghvp;
00323 //ZC05/2004eo = eop;
00324 //ZC05/2004ec = ecp;
00325 //ZC05/2004Lambda = Lamp;
00326 //ZC05/2004po = pop;
00327 //ZC05/2004e = eop;
00328 //ZC05/2004a = a;
00329       Delta_lambda = 0.0;
00330 
00331       e = 0.85;    //ZC
00332       psi  = 0.05; //ZC
00333       integratorFlag = 0;//ForwardEuler assumed
00334 
00335       //Eo               = Eod;
00336       //E_Young          = Ed;
00337       //nu_Poisson       = nu;
00338       //rho_mass_density = rho;
00339 
00340       //CurrentStress    = stressp;
00341       //opserr << "CurrentStress " << CurrentStress;
00342       //CurrentStress.null_indices();
00343       //CurrentStrain    =  strainp;
00344       //ElasticStrain    =  Estrainp;
00345       //PlasticStrain    =  Pstrainp;
00346       //dElasticStrain   =  dEstrainp;
00347       //dPlasticStrain   =  dPstrainp;
00348 
00349       Eep = tensor( 4, def_dim_4, 0.0 ); // need to be initialized as 4th order tensor
00350       //opserr << "strainp " << strainp;
00351       //CurrentStrain.null_indices();
00352 
00353       NScalarVar  =  NScalarp;
00354       //ScalarVar = new double[ NScalarVar ];
00355       //if ( !ScalarVar ) {
00356       //   g3ErrorHandler->fatal("EPState::EPState insufficient memory for Scalar hardening vars");
00357       //   ::exit(1);
00358       //}
00359       if ( (!Scalarp) && (NScalarVar != 0) ) {
00360   opserr << "EPState::EPState   No initial values for scalar hardening vars, set to zero\n";
00361          //::exit(1);
00362       }
00363       else {
00364          for (int i = 0; i < NScalarVar; i++) {
00365             //opserr << Scalarp[i] << endlnn;
00366            ScalarVar[i] = Scalarp[i];
00367            ScalarVar_commit[i] = Scalarp[i];
00368            ScalarVar_init[i] = Scalarp[i];
00369          }
00370       }
00371 
00372       NTensorVar = NTensorp;
00373       //TensorVar = new stresstensor[ NTensorVar ];
00374       //if ( !TensorVar ) {
00375       //   g3ErrorHandler->fatal("EPState::EPState insufficient memory for Tensor hardening vars");
00376       //   ::exit(1);
00377       //}
00378       if ( (!Scalarp) && ( NTensorVar != 0 )) {
00379          opserr << "EPState::EPState   No initial values for tensorial hardening vars, set to zero\n";
00380          //::exit(1);
00381       }
00382       else {
00383          for (int i = 0; i < NTensorVar; i++) {
00384            //opserr << Tensorp[i];
00385            TensorVar[i] = Tensorp[i];
00386            TensorVar_commit[i] = Tensorp[i];
00387            TensorVar_init[i] = Tensorp[i];
00388            //opserr << TensorVar[i];
00389            //TensorVar[i].null_indices();
00390          }
00391       }
00392 
00393       Converged = false;
00394 //ZC05/2004      psi = e - ec;
00395 }
00396 
00397 
00398 //================================================================================
00399 //Normal Constructor --no parameters
00400 //================================================================================
00401 
00402 EPState::EPState( )
00403 //ZC05/2004: Eo(30000.0), E_Young(30000.0), nu_Poisson(0.3), rho_mass_density(0.0),
00404 //ZC05/2004  Converged(false),
00405 //ZC05/2004  Elasticflag(0),Ev(0.0),nuhv(0.0),Ghv(0.0),
00406 //ZC05/2004  eo(0.85), ec(0.80), Lambda(0.025), po(100.0), e(0.85), psi(0.05), a(0.5)
00407 : Converged(false), e(0.85), psi(0.05) //ZC05/2004
00408 
00409 {
00410 
00411       //Eo               = 30000.0;
00412       //E_Young          = 30000.0;
00413       //nu_Poisson       = 0.3;
00414       //rho_mass_density = 0.0;
00415       Eep = tensor( 4, def_dim_4, 0.0 );
00416       integratorFlag = 0;//ForwardEuler assumed
00417       Delta_lambda = 0.0;
00418 
00419       NScalarVar = MaxNScalarVar;
00420       for (int i =0; i < NScalarVar; i++) {
00421          ScalarVar_commit[i] = 0.0;
00422          ScalarVar[i] = 0.0;
00423          ScalarVar_init[i] = 0.0;
00424       }
00425       
00426       NTensorVar = MaxNTensorVar;
00427       for (int j =0; j < NTensorVar; j++) {
00428          TensorVar[j] = stresstensor(0.0);
00429          TensorVar_commit[j] = stresstensor(0.0);
00430          TensorVar_init[j] = stresstensor(0.0);
00431       }
00432 
00433       //Converged = false;
00434 
00435 }
00436 
00437 //================================================================================
00438 //create a clone of itself
00439 //================================================================================
00440 
00441 EPState* EPState::newObj() {
00442 
00443 //ZC05/2004      EPState * eps = new  EPState(this->getEo(),
00444 //ZC05/2004                 this->getE(),
00445 //ZC05/2004                 this->getnu(),
00446 //ZC05/2004                 this->getrho(),
00447       EPState * eps = new  EPState(
00448                  this->getStress(),
00449                  this->getStrain(),
00450                  this->getElasticStrain(),
00451                  this->getPlasticStrain(),
00452                  this->getdElasticStrain(),
00453                  this->getdPlasticStrain(),
00454                  this->getNScalarVar(),
00455                  this->getScalarVar(),
00456                  this->getNTensorVar(),
00457                  this->getTensorVar(),
00458                  this->getEep(),
00459                  this->getStress_commit(),
00460                  this->getStrain_commit(),
00461                  this->getElasticStrain_commit(),
00462                  this->getScalarVar_commit(),
00463                  this->getTensorVar_commit(),
00464                  this->getEep_commit(),
00465                  this->getStress_init(),
00466                  this->getStrain_init(),
00467                  this->getScalarVar_init(),
00468                  this->getTensorVar_init(),
00469                  this->getEep_init(),
00470                  this->getConverged(),
00471 //ZC05/2004                 this->getElasticflag(),
00472 //ZC05/2004                 this->getEv(),
00473 //ZC05/2004                 this->getnuhv(),
00474 //ZC05/2004                 this->getGhv(),
00475 //ZC05/2004                 this->geteo(),
00476 //ZC05/2004                 this->getec(),
00477 //ZC05/2004                 this->getLam(),
00478 //ZC05/2004                 this->getpo(),
00479                  this->gete(),
00480                  this->getpsi(),
00481                  this->getIntegratorFlag()
00482 //ZC05/2004                 this->geta()
00483            );
00484      eps->Delta_lambda = this->Delta_lambda;
00485      return eps;
00486 }
00487 
00488 
00489 //================================================================================
00490 // Copy constructor
00491 //================================================================================
00492 EPState::EPState( const EPState &rhs ) {
00493 
00494 //ZC05/2004       Eo               = rhs.getEo();
00495 //ZC05/2004       E_Young          = rhs.getE();
00496 //ZC05/2004       nu_Poisson       = rhs.getnu();
00497 //ZC05/2004       rho_mass_density = rhs.getrho();
00498       CurrentStress    = rhs.getStress();
00499       CurrentStrain    = rhs.getStrain();
00500       ElasticStrain    = rhs.getElasticStrain();
00501       PlasticStrain    = rhs.getPlasticStrain();
00502       dElasticStrain   = rhs.getdElasticStrain();
00503       dPlasticStrain   = rhs.getdPlasticStrain();
00504 
00505       Stress_commit = rhs.getStress_commit();
00506       Strain_commit = rhs.getStrain_commit();
00507       ElasticStrain_commit = rhs.getElasticStrain_commit();
00508       Stress_init   = rhs.getStress_init();
00509       Strain_init   = rhs.getStrain_init();
00510       //opserr << Eep.rank() << " ";
00511       //Eep.printshort("before copy con ");
00512       Eep = rhs.getEep();
00513       Eep_commit = rhs.getEep_commit();
00514       Eep_init = rhs.getEep_init();
00515       //opserr << Eep.rank() << " ";
00516       //Eep.printshort("after copy con ");
00517 
00518       NScalarVar  =  rhs.getNScalarVar();
00519       //ScalarVar = new double[ NScalarVar ];
00520       //if ( !ScalarVar ) {
00521       //   g3ErrorHandler->fatal("EPState::EPState insufficient memory for Scalar hardening vars");
00522       //   ::exit(1);
00523       //}
00524       int i;
00525       for (i = 0; i < NScalarVar; i++) {
00526    ScalarVar[i] = rhs.ScalarVar[ i ];
00527    ScalarVar_commit[i] = rhs.ScalarVar_commit[ i ];
00528    ScalarVar_init[i] = rhs.ScalarVar_init[ i ];
00529       }
00530       NTensorVar = rhs.getNTensorVar();
00531       //TensorVar = new stresstensor[ NTensorVar ];
00532       //if ( !TensorVar ) {
00533       //   g3ErrorHandler->fatal("EPState::EPState insufficient memory for Tensor hardening vars");
00534       //   ::exit(1);
00535       //}
00536       for (i = 0; i < NTensorVar; i++) {
00537    TensorVar[i] = rhs.TensorVar[ i ];
00538    TensorVar_commit[i] = rhs.TensorVar_commit[ i ];
00539    TensorVar_init[i] = rhs.TensorVar_init[ i ];
00540    //opserr << TensorVar[i];
00541     //TensorVar[i].null_indices();
00542       }
00543 
00544       Converged = rhs.getConverged();
00545 
00546 //ZC05/2004       Elasticflag = rhs.getElasticflag();
00547 //ZC05/2004       Ev        = rhs.getEv();
00548 //ZC05/2004       nuhv      = rhs.getnuhv();
00549 //ZC05/2004       Ghv       = rhs.getGhv();
00550 
00551 //ZC05/2004       eo        = rhs.geteo();
00552 //ZC05/2004       ec        = rhs.getec();
00553 //ZC05/2004       Lambda    = rhs.getLam();
00554 //ZC05/2004       po        = rhs.getpo();
00555        e         = rhs.gete();
00556        psi       = rhs.getpsi();
00557 
00558        Delta_lambda = rhs.Delta_lambda; //Guanzhou
00559 
00560        integratorFlag = rhs.getIntegratorFlag();
00561 //ZC05/2004       a         = rhs.geta();
00562 
00563 }
00564 
00565 //================================================================================
00566 // Destructor
00567 //================================================================================
00568 EPState::~EPState() {
00569 
00570     //if ( ScalarVar )
00571     //  delete [] ScalarVar;
00572     //if ( TensorVar )
00573     //  delete TensorVar;
00574 
00575     //if ( ScalarVar_commit )
00576     //  delete [] ScalarVar_commit;
00577     //if ( TensorVar_commit )
00578     //  delete TensorVar_commit;
00579 
00580     //if ( ScalarVar_init )
00581     //  delete [] ScalarVar_init;
00582     //if ( TensorVar_init )
00583     //  delete TensorVar_init;
00584 
00585 }
00586 
00587 
00588 //================================================================================
00589 //Overloading the assignment sign
00590 //================================================================================
00591 const EPState & EPState::operator=(const EPState &rhs ) {
00592 
00593       if ( this != &rhs ) {
00594 //ZC05/2004          Eo               = rhs.getEo();
00595 //ZC05/2004          E_Young          = rhs.getE();
00596 //ZC05/2004          nu_Poisson       = rhs.getnu();
00597 //ZC05/2004          rho_mass_density = rhs.getrho();
00598 
00599          CurrentStress    = rhs.getStress();
00600          //opserr << "Current stress " << CurrentStress;
00601          CurrentStrain    = rhs.getStrain();
00602          //opserr << "strainp " << strainp;
00603          ElasticStrain    = rhs.getElasticStrain();
00604          PlasticStrain    = rhs.getPlasticStrain();
00605          dElasticStrain   = rhs.getdElasticStrain();
00606          dPlasticStrain   = rhs.getdPlasticStrain();
00607 
00608          Stress_commit = rhs.getStress_commit();
00609          Strain_commit = rhs.getStrain_commit();
00610          ElasticStrain_commit = rhs.getElasticStrain_commit();
00611          Stress_init   = rhs.getStress_init();
00612          Strain_init   = rhs.getStrain_init();
00613 
00614          Eep              = rhs.getEep();
00615          Eep_commit = rhs.getEep_commit();
00616          Eep_init = rhs.getEep_init();
00617 
00618          NScalarVar  =  rhs.getNScalarVar();
00619          //ScalarVar = new double[ NScalarVar ];
00620          //if ( !ScalarVar ) {
00621          //   g3ErrorHandler->fatal("EPState::operator= insufficient memory for Scalar hardening vars");
00622          //   ::exit(1);
00623          //}
00624          int i;
00625          for (i = 0; i < NScalarVar; i++) {
00626             ScalarVar[i] = rhs.ScalarVar[i];
00627             ScalarVar_commit[i] = rhs.ScalarVar_commit[i];
00628             ScalarVar_init[i] = rhs.ScalarVar_init[i];
00629          }
00630 
00631          NTensorVar = rhs.getNTensorVar();
00632          //TensorVar = new stresstensor[ NTensorVar ];
00633          //if ( !TensorVar ) {
00634          //   g3ErrorHandler->fatal("EPState::operator= insufficient memory for Tensor hardening vars");
00635          //   ::exit(1);
00636          //}
00637          for (i = 0; i < NTensorVar; i++) {
00638              TensorVar[i] = rhs.TensorVar[i];
00639              TensorVar_commit[i] = rhs.TensorVar_commit[i];
00640              TensorVar_init[i] = rhs.TensorVar_init[i];
00641              //TensorVar[i].null_indices();
00642          }
00643 
00644          Converged = rhs.getConverged();
00645          integratorFlag = rhs.getIntegratorFlag();
00646          Delta_lambda = rhs.Delta_lambda;
00647 
00648 //ZC05/2004          Elasticflag = rhs.getElasticflag();
00649 //ZC05/2004          Ev        = rhs.getEv();
00650 //ZC05/2004          nuhv      = rhs.getnuhv();
00651 //ZC05/2004          Ghv       = rhs.getGhv();
00652 
00653 //ZC05/2004          eo        = rhs.geteo();
00654 //ZC05/2004          ec        = rhs.getec();
00655 //ZC05/2004          Lambda    = rhs.getLam();
00656 //ZC05/2004          po        = rhs.getpo();
00657          e         = rhs.gete();
00658          psi       = rhs.getpsi();
00659 //ZC05/2004          a         = rhs.geta();
00660 
00661       }
00662 
00663       return *this;
00664 
00665 }
00666 
00667 //ZC05/2004 //================================================================================
00668 //ZC05/2004 int EPState::getElasticflag(void) const {
00669 //ZC05/2004       return Elasticflag;
00670 //ZC05/2004 }
00671 
00672 //ZC05/2004 //================================================================================
00673 //ZC05/2004 double EPState::getE() const {
00674 //ZC05/2004       return E_Young;
00675 //ZC05/2004 }
00676 
00677 //ZC05/2004 //================================================================================
00678 //ZC05/2004 // Ev: Young's modulus in a vertical direction -- [out-of-plane]
00679 //ZC05/2004 double EPState::getEv() const {
00680 //ZC05/2004       return Ev;
00681 //ZC05/2004 }
00682 
00683 //ZC05/2004 //================================================================================
00684 //ZC05/2004 double EPState::getEo() const {
00685 //ZC05/2004       return Eo;
00686 //ZC05/2004 }
00687 
00688 //ZC05/2004 //================================================================================
00689 //ZC05/2004 double EPState::getnu() const {
00690 //ZC05/2004       return nu_Poisson;
00691 //ZC05/2004 }
00692 //ZC05/2004 
00693 //ZC05/2004 //================================================================================
00694 //ZC05/2004 // nuhv: Poisson's ratio for strain in the vertical direction due to a horizontal direct stress -- [out-of-plane]
00695 //ZC05/2004 double EPState::getnuhv() const {
00696 //ZC05/2004       return nuhv;
00697 //ZC05/2004 }
00698 
00699 //ZC05/2004 //================================================================================
00700 //ZC05/2004 // Ghv: Modulus for shear deformation in a vertical direction plane-- [out-of-plane]
00701 //ZC05/2004 double EPState::getGhv() const {
00702 //ZC05/2004       return Ghv;
00703 //ZC05/2004 }
00704 
00705 //ZC05/2004 //================================================================================
00706 //ZC05/2004 double EPState::getrho() const {
00707 //ZC05/2004       return rho_mass_density;
00708 //ZC05/2004 };
00709 
00710 //================================================================================
00711 int EPState::getNScalarVar() const {
00712       return NScalarVar;
00713 }
00714 
00715 //================================================================================
00716 int EPState::getNTensorVar() const {
00717       return NTensorVar;
00718 }
00719 
00720 //================================================================================
00721 bool EPState::getConverged() const {
00722       return Converged;
00723 }
00724 
00725 //ZC05/2004 //================================================================================
00726 //ZC05/2004 double EPState::geteo() const {
00727 //ZC05/2004       return eo;
00728 //ZC05/2004 }
00729 
00730 //ZC05/2004 //================================================================================
00731 //ZC05/2004 double EPState::getec() const {
00732 //ZC05/2004       return ec;
00733 //ZC05/2004 }
00734 
00735 //================================================================================
00736 double EPState::gete() const {
00737       return e;
00738 }
00739 
00740 //================================================================================
00741 double EPState::getpsi() const {
00742        return psi;
00743 }
00744 
00745 int EPState::getIntegratorFlag() const {
00746         return integratorFlag;
00747 }
00748 
00749 //ZC05/2004 //================================================================================
00750 //ZC05/2004 double EPState::getLam() const {
00751 //ZC05/2004       return Lambda;
00752 //ZC05/2004 }
00753 
00754 //ZC05/2004 //================================================================================
00755 //ZC05/2004 double EPState::getpo() const {
00756 //ZC05/2004       return po;
00757 //ZC05/2004 }
00758 
00759 //ZC05/2004 //================================================================================
00760 //ZC05/2004 double EPState::geta() const {
00761 //ZC05/2004       return a;
00762 //ZC05/2004 }
00763 
00764 //================================================================================
00765 stresstensor EPState::getStress() const {
00766 
00767      return CurrentStress;
00768 
00769 }
00770 
00771 //================================================================================
00772 stresstensor EPState::getStress_commit() const {
00773 
00774      return Stress_commit;
00775 
00776 }
00777 
00778 //================================================================================
00779 stresstensor EPState::getStress_init() const {
00780 
00781      return Stress_init;
00782 
00783 }
00784 
00785 //================================================================================
00786 stresstensor EPState::getIterativeStress() const {
00787 
00788      return IterativeStress;
00789 
00790 }
00791 
00792 //================================================================================
00793 straintensor EPState::getStrain() const {
00794 
00795      return CurrentStrain;
00796 
00797 }
00798 
00799 
00800 //================================================================================
00801 straintensor EPState::getStrain_commit() const {
00802 
00803      return Strain_commit;
00804 
00805 }
00806 
00807 //================================================================================
00808 straintensor EPState::getStrain_init() const {
00809 
00810      return Strain_init;
00811 
00812 }
00813 
00814 //================================================================================
00815 straintensor EPState::getElasticStrain() const {
00816 
00817      return ElasticStrain;
00818 
00819 }
00820 
00821 //GZ Mar2005
00822 straintensor EPState::getElasticStrain_commit() const {
00823 
00824      return ElasticStrain_commit;
00825 
00826 }
00827 
00828 //================================================================================
00829 straintensor EPState::getPlasticStrain() const {
00830 
00831      return PlasticStrain;
00832 
00833 }
00834 //================================================================================
00835 straintensor EPState::getdElasticStrain() const {
00836 
00837      return dElasticStrain;
00838 
00839 }
00840 
00841 
00842 //================================================================================
00843 straintensor EPState::getdPlasticStrain() const {
00844 
00845      return dPlasticStrain;
00846 
00847 }
00848 
00849 
00850 //================================================================================
00851 tensor EPState::getEep() const {
00852 
00853      return Eep;
00854 
00855 }
00856 
00857 //================================================================================
00858 tensor EPState::getEep_commit() const {
00859 
00860      return Eep_commit;
00861 
00862 }
00863 
00864 //================================================================================
00865 tensor EPState::getEep_init() const {
00866 
00867      return Eep_init;
00868 
00869 }
00870 
00871 //ZC05/2004 //================================================================================
00872 //ZC05/2004 void EPState::setElasticflag( int efd ) {
00873 //ZC05/2004       Elasticflag = efd;
00874 //ZC05/2004 }
00875 
00876 
00877 //ZC05/2004 //================================================================================
00878 //ZC05/2004 void EPState::setEo( double Eod ) {
00879 //ZC05/2004       Eo = Eod;
00880 //ZC05/2004 }
00881 
00882 
00883 //ZC05/2004 //================================================================================
00884 //ZC05/2004 void EPState::setE( double Ey ) {
00885 //ZC05/2004       E_Young = Ey;
00886 //ZC05/2004 }
00887 
00888 //ZC05/2004 //================================================================================
00889 //ZC05/2004 void EPState::setEv( double Evd ) {
00890 //ZC05/2004       Ev = Evd;
00891 //ZC05/2004 }
00892 
00893 //ZC05/2004 //================================================================================
00894 //ZC05/2004 void EPState::setGhv( double Ghvd ) {
00895 //ZC05/2004       Ghv = Ghvd;
00896 //ZC05/2004 }
00897 
00898 //ZC05/2004 //================================================================================
00899 //ZC05/2004 void EPState::setnu( double nud ) {
00900 //ZC05/2004       nu_Poisson = nud;
00901 //ZC05/2004 }
00902 
00903 //ZC05/2004 //================================================================================
00904 //ZC05/2004 void EPState::setnuhv( double nuhvd ) {
00905 //ZC05/2004       nuhv = nuhvd;
00906 //ZC05/2004 }
00907 
00908 //================================================================================
00909 void EPState::setStress(const stresstensor &newstress ) {
00910       CurrentStress = newstress;
00911 }
00912 
00913 //================================================================================
00914 void EPState::setIterativeStress(const stresstensor &newstress ) {
00915       IterativeStress = newstress;
00916 }
00917 
00918 
00919 //================================================================================
00920 void EPState::setStrain(const straintensor &newstrain ) {
00921 
00922       CurrentStrain = newstrain;
00923 
00924 }
00925 
00926 //================================================================================
00927 void EPState::setStress_commit(const stresstensor &newstress ) {
00928       Stress_commit = newstress;
00929 }
00930 
00931 //================================================================================
00932 void EPState::setStrain_commit(const straintensor &newstrain ) {
00933 
00934       Strain_commit = newstrain;
00935 
00936 }
00937 
00938 void EPState::setElasticStrain_commit(const straintensor &newstrain ) {
00939 
00940       ElasticStrain_commit = newstrain;
00941 
00942 }
00943 
00944 
00945 //================================================================================
00946 void EPState::setStress_init(const stresstensor &newstress ) {
00947       Stress_init = newstress;
00948 }
00949 
00950 //================================================================================
00951 void EPState::setStrain_init(const straintensor &newstrain ) {
00952 
00953       Strain_init = newstrain;
00954 
00955 }
00956 
00957 //================================================================================
00958 void EPState::setElasticStrain(const straintensor &newEstrain ) {
00959 
00960       ElasticStrain = newEstrain;
00961 
00962 }
00963 
00964 //================================================================================
00965 void EPState::setPlasticStrain(const straintensor &newPstrain ) {
00966 
00967       PlasticStrain = newPstrain;
00968 
00969 }
00970 
00971 
00972 //================================================================================
00973 void EPState::setdElasticStrain(const straintensor &newdEstrain ) {
00974 
00975       dElasticStrain = newdEstrain;
00976 
00977 }
00978 
00979 //================================================================================
00980 void EPState::setdPlasticStrain(const straintensor &newdPstrain ) {
00981 
00982       dPlasticStrain = newdPstrain;
00983 
00984 }
00985 
00986 //================================================================================
00987 void EPState::setEep(const tensor &newEep )  {
00988 
00989      Eep = newEep;
00990 
00991 }
00992 
00993 //================================================================================
00994 void EPState::setConverged( bool b) {
00995      Converged = b;
00996 }
00997 
00998 //ZC05/2004 //================================================================================
00999 //ZC05/2004 void EPState::seteo( double eod ) {
01000 //ZC05/2004       eo = eod;
01001 //ZC05/2004 }
01002 
01003 //ZC05/2004 //================================================================================
01004 //ZC05/2004 void EPState::setec( double ecd ) {
01005 //ZC05/2004       ec = ecd;
01006 //ZC05/2004 }
01007 
01008 //ZC05/2004 //================================================================================
01009 //ZC05/2004 void EPState::setLam( double Lamd ) {
01010 //ZC05/2004       Lambda = Lamd;
01011 //ZC05/2004 }
01012 
01013 //ZC05/2004 //================================================================================
01014 //ZC05/2004 void EPState::setpo( double pod ) {
01015 //ZC05/2004       po = pod;
01016 //ZC05/2004 }
01017 
01018 //ZC05/2004 //================================================================================
01019 //ZC05/2004 void EPState::seta( double ad ) {
01020 //ZC05/2004       a = ad;
01021 //ZC05/2004 }
01022 
01023 //================================================================================
01024 void EPState::sete( double ed ) {
01025       e = ed;
01026 }
01027 
01028 //================================================================================
01029 void EPState::setpsi( double psid ) {
01030       psi = psid;
01031 }
01032 
01033 //================================================================================
01034 // Retrun the nth Scalar Var.... Starting from 1!!
01035 //================================================================================
01036 double EPState::getScalarVar( int WhichOne) const {
01037 
01038       if ( WhichOne <= getNScalarVar() )
01039          return ScalarVar[ WhichOne - 1 ];
01040       else
01041       {
01042   opserr << "EPState::getScalarVar Out of ScalarVar's range: " <<  getNScalarVar()  << endln;
01043          return 0.0;
01044    exit(1);
01045       }
01046 
01047       return 0.0;
01048 
01049 }
01050 
01051 
01052 //================================================================================
01053 // Retrun the nth Tensor Var.... Starting from 1!!
01054 //================================================================================
01055 stresstensor EPState::getTensorVar(int WhichOne) const {
01056 
01057       stresstensor st;
01058 
01059       if ( WhichOne <= getNTensorVar() )
01060          return TensorVar[ WhichOne - 1 ];
01061       else
01062       {
01063   opserr << "EPState::getTensorVar No. %d: Out of Tensortial Var's range " << WhichOne << " out of " <<  getNTensorVar() << endln;
01064    exit(1);
01065       }
01066 
01067       return st;
01068 
01069 }
01070 
01071 //================================================================================
01072 // Return Scalar pointer
01073 //================================================================================
01074 double * EPState::getScalarVar() {
01075 
01076       return ScalarVar;
01077 
01078 }
01079 
01080 //================================================================================
01081 void EPState::setNScalarVar(int rval) {
01082 
01083       NScalarVar = rval;
01084 
01085 }
01086 
01087 //================================================================================
01088 void EPState::setNTensorVar(int rval) {
01089 
01090       NTensorVar = rval;
01091 
01092 }
01093 
01094 
01095 //================================================================================
01096 double * EPState::getScalarVar_commit( ) {
01097 
01098       return ScalarVar_commit;
01099 
01100 }
01101 
01102 //================================================================================
01103 double EPState::getScalarVar_commit( int i) {
01104 
01105       return ScalarVar_commit[i-1];
01106 
01107 }
01108 
01109 //================================================================================
01110 double * EPState::getScalarVar_init() {
01111 
01112       return ScalarVar_init;
01113 
01114 }
01115 
01116 //================================================================================
01117 double EPState::getScalarVar_init(int i) {
01118 
01119       return ScalarVar_init[i];
01120 
01121 }
01122 
01123 //================================================================================
01124 // Return Tensor pointer
01125 //================================================================================
01126 stresstensor * EPState::getTensorVar() {
01127 
01128       return TensorVar;
01129 
01130 }
01131 
01132 //================================================================================
01133 stresstensor * EPState::getTensorVar_commit() {
01134 
01135       return TensorVar_commit;
01136 
01137 }
01138 
01139 //================================================================================
01140 stresstensor EPState::getTensorVar_commit(int i) {
01141 
01142       return TensorVar_commit[i-1];
01143 
01144 }
01145 
01146 //================================================================================
01147 stresstensor EPState::getTensorVar_init(int i) {
01148 
01149       return TensorVar_init[i-1];
01150 
01151 }
01152 
01153 //================================================================================
01154 stresstensor * EPState::getTensorVar_init() {
01155 
01156       return TensorVar_init;
01157 
01158 }
01159 
01160 //================================================================================
01161 // set nth Scalar Var.... Starting from 1!!
01162 //================================================================================
01163 void EPState::setScalarVar(int WhichOne, double rval) {
01164 
01165       if ( WhichOne <= getNScalarVar() )
01166          ScalarVar[ WhichOne - 1 ] = rval;
01167       else
01168       {
01169   opserr << "EPState::setScalarVar Out of ScalarVar's range " << getNScalarVar() << endln;
01170          //opserr << " Out of ScalarVar's range!";
01171    exit(1);
01172       }
01173 }
01174 void EPState::setScalarVar_commit(int WhichOne, double rval) {
01175 
01176       if ( WhichOne <= getNScalarVar() )
01177          ScalarVar_commit[ WhichOne - 1 ] = rval;
01178       else
01179       {
01180   opserr << "EPState::setScalarVar Out of ScalarVar's range " <<  getNScalarVar() << endln;
01181          //opserr << " Out of ScalarVar's range!";
01182    exit(1);
01183       }
01184 }
01185 
01186 void EPState::setScalarVar_init(int WhichOne, double rval) {
01187 
01188       if ( WhichOne <= getNScalarVar() )
01189          ScalarVar_init[ WhichOne - 1 ] = rval;
01190       else
01191       {
01192   opserr << "EPState::setScalarVar Out of ScalarVar's range " <<  getNScalarVar() << endln;
01193          //opserr << " Out of ScalarVar's range!";
01194    exit(1);
01195       }
01196 }
01197 
01198 
01199 //================================================================================
01200 // set nth Tensor Var.... Starting from 1!!
01201 //================================================================================
01202 void EPState::setTensorVar(int WhichOne, const stresstensor &rval) {
01203 
01204       if ( WhichOne <= getNTensorVar() )
01205          TensorVar[ WhichOne - 1 ] = rval;
01206       else
01207       {
01208   opserr << "EPState::setTensorVar Out of Tensor Var's range " <<  getNTensorVar() << endln;;
01209    exit(1);
01210       }
01211 
01212 }
01213 //================================================================================
01214 void EPState::setTensorVar_commit(int WhichOne, const stresstensor &rval) {
01215 
01216       if ( WhichOne <= getNTensorVar() )
01217          TensorVar_commit[ WhichOne - 1 ] = rval;
01218       else
01219       {
01220   opserr << "EPState::setTensorVar Out of Tensor Var's range " <<  getNTensorVar()<< endln;
01221    exit(1);
01222       }
01223 
01224 }
01225 //================================================================================
01226 void EPState::setTensorVar_init(int WhichOne, const stresstensor &rval) {
01227 
01228       if ( WhichOne <= getNTensorVar() )
01229          TensorVar_init[ WhichOne - 1 ] = rval;
01230       else
01231       {
01232   opserr << "EPState::setTensorVar Out of Tensor Var's range " <<  getNTensorVar() << endln;
01233    exit(1);
01234       }
01235 
01236 }
01237 
01238 
01239 //================================================================================
01240 // set all Scalar Vars ..No boundary checking!
01241 //================================================================================
01242 void EPState::setScalarVar(double *rval) {
01243 
01244       if ( !rval ) {
01245   opserr << "EPState::setScalarVar No scalar vars supplied\n";
01246          ::exit(1);
01247       }
01248       for (int i = 0; i < getNScalarVar(); i++) {
01249          //opserr << Scalarp[i] << endlnn;
01250    ScalarVar[i] = rval[i];
01251       }
01252 
01253 }
01254 
01255 //================================================================================
01256 // set all Scalar Vars
01257 //================================================================================
01258 void EPState::setTensorVar(const stresstensor *rval) {
01259 
01260       if ( !rval ) {
01261          opserr << "EPState::setTensorVar No tensorial vars supplied\n";
01262          ::exit(1);
01263       }
01264       for (int i = 0; i < getNTensorVar(); i++) {
01265    TensorVar[i] = rval[i];
01266     TensorVar[i].null_indices();
01267       }
01268 
01269 }
01270 
01271 //================================================================================
01272 void EPState::print() {
01273       opserr << *this;
01274 
01275 }
01276 
01277 
01278 //================================================================================
01279 // Set all state variables to initials
01280 
01281 void EPState::setInit() {
01282 
01283       stresstensor Stress0;
01284       straintensor Strain0;
01285 
01286       CurrentStress   = Stress_init;
01287       CurrentStrain   = Strain_init;
01288       ElasticStrain   = Strain0;
01289       PlasticStrain   = Strain0;
01290       dElasticStrain  = Strain0;
01291       dPlasticStrain  = Strain0;
01292       Eep = Eep_init;
01293 
01294       Stress_commit   = Stress_init;
01295       Strain_commit   = Strain_init;
01296       Eep_commit = Eep_init;
01297       ElasticStrain_commit = Strain0;
01298 
01299     int i;
01300       for (i = 0; i < NScalarVar; i++) {
01301           ScalarVar[i] = ScalarVar_init[i];
01302           ScalarVar_commit[i] = ScalarVar_init[i];
01303       }
01304 
01305       for (i = 0; i < NTensorVar; i++) {
01306          TensorVar[i] = TensorVar_init[i];
01307          TensorVar_commit[i] = TensorVar_init[i];
01308       }
01309 
01310       Converged = false;
01311 }
01312 
01313 //================================================================================
01314 int EPState::commitState ()
01315   {
01316 
01317 
01318 //      opserr << "\n\n\n\n int EPState::commitState ()\n\n\n\n";
01319 
01320 
01321       int err = 0;
01322       // commit the variables state
01323 //Guanzhou out 5-6-2004      CurrentStress   = Stress_init;
01324 //Guanzhou out 5-6-2004      CurrentStrain   = Strain_init;
01325 //Guanzhou out 5-6-2004      Eep = Eep_init;
01326 
01327       Stress_commit   = CurrentStress;
01328       Strain_commit   = CurrentStrain;
01329       Eep_commit = Eep;
01330 
01331 
01332       //GZ Mar2005
01333       ElasticStrain_commit = ElasticStrain;
01334 
01335     int i;
01336       for (i = 0; i < NScalarVar; i++) {
01337           //ScalarVar[i] = ScalarVar_init[i];
01338           ScalarVar_commit[i] = ScalarVar[i];
01339       }
01340 
01341       for (i = 0; i < NTensorVar; i++) {
01342          //TensorVar[i] = TensorVar_init[i];
01343          TensorVar_commit[i] = TensorVar[i];
01344       }
01345 
01346       return err;
01347 
01348   }
01349 
01350 //================================================================================
01351 int EPState::revertToLastCommit () {
01352       int err = 0;
01353       // revert the variables state  to last commited
01354       CurrentStress   = Stress_commit;
01355       CurrentStrain   = Strain_commit;
01356       Eep = Eep_commit;
01357 
01358       ElasticStrain = ElasticStrain_commit;
01359 
01360     int i;
01361       for (i = 0; i < NScalarVar; i++) {
01362           //ScalarVar[i] = ScalarVar_init[i];
01363           ScalarVar[i] = ScalarVar_commit[i];
01364       }
01365 
01366       for (i = 0; i < NTensorVar; i++) {
01367          //TensorVar[i] = TensorVar_init[i];
01368          TensorVar[i] = TensorVar_commit[i];
01369       }
01370 
01371       return err;
01372 
01373 }
01374 
01375 //================================================================================
01376 int EPState::revertToStart () {
01377 
01378       int err = 0;
01379       // revert the variables state to the initials
01380       CurrentStress   = Stress_init;
01381       CurrentStrain   = Strain_init;
01382       Eep = Eep_init;
01383 
01384       Stress_commit   = Stress_init;
01385       Strain_commit   = Strain_init;
01386       Eep_commit = Eep_init;
01387       //ElasticStrain_commit = Strain0;
01388 
01389     int i;
01390       for (i = 0; i < NScalarVar; i++) {
01391           ScalarVar[i] = ScalarVar_init[i];
01392           ScalarVar_commit[i] = ScalarVar_init[i];
01393       }
01394 
01395       for (i = 0; i < NTensorVar; i++) {
01396          TensorVar[i] = TensorVar_init[i];
01397          TensorVar_commit[i] = TensorVar_init[i];
01398       }
01399 
01400       return err;
01401 }
01402 
01403 
01404 
01405 
01406 
01407 //================================================================================
01408 // Overloaded Insertion Operator
01409 // prints an EPState's contents
01410 //================================================================================
01411 OPS_Stream & operator<< (OPS_Stream& os, const EPState & EPS)
01412 //ostream & operator<< (ostream& os, const EPState & EPS)
01413     {
01414       //        os.setf( ios::showpos | ios::scientific);
01415       os.precision(4);
01416         os.width(10);
01417 //ZC05/2004         os << endln << "Elastic plastic state parameters: "  << endln;
01418 //ZC05/2004 
01419 //ZC05/2004   int ef = EPS.getElasticflag();
01420 //ZC05/2004   os << "\tElastic Flag = " << ef << ";";
01421 //ZC05/2004   if (ef == 1)
01422 //ZC05/2004      os << " pressure dependent isotropic material (default case, for soil)." << endln;
01423 //ZC05/2004   else if (ef == 2)
01424 //ZC05/2004      os << " pressure independent isotropic material." << endln;
01425 //ZC05/2004   else if (ef == 3)
01426 //ZC05/2004      os << " pressure independent cross-anisotropic material." << endln;
01427 //ZC05/2004   else if (ef == 4)
01428 //ZC05/2004      os << " pressure dependent cross-anisotropic material." << endln;
01429 //ZC05/2004   else
01430 //ZC05/2004      os << " elastic portion code not correct. Flag must be 1, 2, 3 or 4." << endln;
01431 
01432 
01433 //ZC05/2004         os << "\tEo = " << EPS.getEo() << ";";
01434 //ZC05/2004         os << " E_Young = " << EPS.getE() << ";";
01435 //ZC05/2004         //os.width(10);
01436 //ZC05/2004   os << " nu_Poisson = " << EPS.getnu() << ";";
01437 //ZC05/2004         os << " \tE_v = " << EPS.getEv() << ";";
01438 //ZC05/2004         os << " nu_hv = " << EPS.getnuhv() << ";";
01439 //ZC05/2004   os << " G_hv = " << EPS.getGhv() << ";";
01440 //ZC05/2004   os << " rho = " << EPS.getrho() << endln;
01441 //ZC05/2004 
01442 //ZC05/2004         os << "\teo = " << EPS.geteo() << ";";
01443 //ZC05/2004         os << " ec = " << EPS.getec() << ";";
01444 //ZC05/2004         os << " Lambda = " << EPS.getLam() << ";";
01445 //ZC05/2004         os << " po = " << EPS.getpo() << ";";
01446   os << " e = " << EPS.gete() << endln;
01447   os << " psi = " << EPS.getpsi() << endln;
01448 //ZC05/2004         os << " a = " << EPS.geta() << ";";
01449 
01450   if ( EPS.getConverged() )
01451      os << "\tConverged = ok! ";
01452   else
01453      os << "\tConverged = no! " << endln;
01454 
01455         //os.width(10);
01456         os << endln << "\tCurrent Stress:" << EPS.getStress() << endln;
01457         os << "\tIterati Stress:" << EPS.getIterativeStress() << endln;
01458 
01459   os << "\tCurrent Strain:" << EPS.getStrain() << endln;
01460   os << "\tElasticStrain :" << EPS.getElasticStrain() << endln;
01461   os << "\tPlasticStrain :" << EPS.getPlasticStrain() << endln;
01462   os << "\tdElasticStrain:" << EPS.getdElasticStrain() << endln;
01463   os << "\tdPlasticStrain:" << EPS.getdPlasticStrain() << endln;
01464   os << "\tEep.rank():" << EPS.getEep().rank() << endln;
01465 
01466   //        os.unsetf( ios::showpos );
01467   int NS = EPS.getNScalarVar();
01468   int NT = EPS.getNTensorVar();
01469 
01470   os << endln << "\tNScalarVar = " << NS << endln;
01471 
01472     int i;
01473         for (i = 0; i < NS; i++) {
01474             os << "\tNo." << i+1 << " " << EPS.ScalarVar[i] << "; ";
01475   }
01476         os << endln << endln;
01477 
01478         os << "\tNTensorVar = " << NT;
01479         for (i = 0; i < NT; i++) {
01480     //           os.unsetf( ios::showpos);
01481            os << endln << "\tNo." << i+1 << " tensorial var:";
01482      //           os.setf( ios::showpos);
01483            os << EPS.TensorVar[i];
01484         }
01485 
01486         os << endln;
01487         return os;
01488     }
01489 
01490 #endif
01491 

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