Bond_SP01.cpp

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // $Revision: 1.1 $
00022 // $Date: 2006/05/24 21:10:28 $
00023 
00024 // Written:             Jian Zhao, Iowa State University                04/2004
00025 // Revision:            Jian Zhao, University of Wisconsin, Milwaukee           04/2006
00026 //
00027 // Description: This file contains the class defination for Uniaxial material Bond_SP01. 
00028 //              Bond_SP01: Strain penetration of rebars at footings w/o bond damage.
00029 
00030 
00031 #include <Bond_SP01.h>
00032 #include <Vector.h>
00033 #include <Matrix.h>
00034 #include <Channel.h>
00035 #include <Information.h>
00036 #include <math.h>
00037 #include <float.h>
00038 
00039 Bond_SP01::Bond_SP01
00040 (int tag, double FY, double SY, double FU, double SU, double KZ, double r, double CD, double DB, double FC, double LA):
00041 UniaxialMaterial(tag,MAT_TAG_Bond_SP01),
00042 fy(FY), sy(SY),  fu(FU), su(SU), Kz(KZ), R(r), Cd(CD), db(DB), fc(FC), lba(LA)
00043 {
00044         // Check units.  Need parameters in ksi and in.
00045         if ( fy >= 1000 || sy >= 1)
00046                 opserr << "WARNING: For the Strain-Penetration Model: input values in ksi and in." << endln;
00047 
00048         
00049         // Set bar stress-slip envelope 
00050         Cr = 1.01;                              //% need to be large than 1 pretty arbitary
00051         Ks = pow(R,Kz/2.5);             //% pretty arbitary
00052 
00053         // Assume symmetric envelope 
00054         E0 = fy/sy;
00055 
00056         // bond condition (for future use) 
00057     la = fy*db*1000.0/40.0/pow(fc*1000,0.5);    // effective anchorage length
00058 
00059         // Set all history and state variables to initial values
00060         this->revertToStart ();
00061 
00062 }
00063 
00064 Bond_SP01::Bond_SP01
00065 (int tag, double FY, double SY, double FU, double SU, double KZ, double r): 
00066 UniaxialMaterial(tag,MAT_TAG_Bond_SP01),
00067  fy(FY), sy(SY), fu(FU), su(SU), Kz(KZ), R(r), Cd(0.0), db(1.0), fc(4.35), lba(0.0)
00068 {
00069         // Check units.  Need parameters in ksi and in.
00070         if (fy >= 1000 || sy >= 1)
00071                 opserr << "WARNING: WARNING: For the Strain-Penetration Model: input values in ksi and in." << endln;
00072 
00073         
00074         // Set bar stress-slip envelope  (yield point)
00075         Cr = 1.01;                              //% need to be large than 1 pretty arbitary
00076         Ks = pow(R,Kz/2.5);             //% pretty arbitary
00077 
00078         // Assume symmetric envelope 
00079         E0 = fy/sy;
00080 
00081         // bond condition (for calculation) 
00082     la = fy*db*1000.0/40.0/pow(fc*1000,0.5);    // effective anchorage length
00083 
00084         // Set all history and state variables to initial values
00085         this->revertToStart ();
00086 }
00087 
00088 Bond_SP01::Bond_SP01 ():
00089 UniaxialMaterial(0,MAT_TAG_Bond_SP01),
00090 fy(64.0), sy(0.021), fu(102.2), su(1.0), Kz(0.3), R(.8), Cd(0.0), db(1.0), fc(4.35), lba(0.0)
00091 {
00092         // constructor w/o parameter.  does nothing
00093 
00094 }
00095 
00096 Bond_SP01::~Bond_SP01 ()
00097 {
00098 }
00099 
00100 int Bond_SP01::setTrialStrain (double strain, double strainRate)
00101 {
00102   // Reset history variables to last converged state
00103   TRSlip = CRSlip;                      // Return slip
00104   TRLoad = CRLoad;                      // Return load
00105   TRSlope = CRSlope;                    // Return slope
00106   TmaxHSlip = CmaxHSlip;                // Maximum slip in tension
00107   TminHSlip = CminHSlip;                // Maximum slip in compression
00108   Tloading = Cloading;          // Loading flag
00109   TYieldFlag = CYieldFlag;      // Yield flag
00110   
00111   // Set trial slip
00112   Tslip = strain;
00113   
00114   // Determine change in slip from last converged state
00115   double dslip = Tslip - Cslip;
00116   
00117   // Calculate the trial state given the trial Strain
00118   determineTrialState (Tslip, dslip);
00119 
00120   return 0;
00121 }
00122 
00123 int Bond_SP01::setTrial (double strain, double &stress, double &tangent, double strainRate)
00124 {
00125   // Reset history variables to last converged state
00126   TRSlip = CRSlip;                      // Return slip
00127   TRLoad = CRLoad;                      // Return load
00128   TRSlope = CRSlope;                    // Return slope
00129   TmaxHSlip = CmaxHSlip;                // Maximum slip in tension
00130   TminHSlip = CminHSlip;                // Maximum slip in compression
00131   Tloading = Cloading;          // Loading flag
00132   TYieldFlag = CYieldFlag;      // Yield flag
00133   
00134   // Set trial Strain
00135   Tslip = strain;
00136   
00137   // Determine change in Strain from last converged state
00138   double dslip;
00139   dslip = Tslip - Cslip;
00140   
00141   // Calculate the trial state given the trial Strain
00142   determineTrialState (Tslip, dslip);
00143   
00144   stress = Tload;
00145   tangent = Ttangent;
00146   
00147   return 0;
00148 }
00149 
00150 void Bond_SP01::determineTrialState (double ts, double dslip)
00151 {
00152 
00153         double maxrs;                           // maximum return slip in tension in history
00154         double maxrl;                           // maximum return load in tension in history
00155         double maxvgs;                          // maximum return vergin slip in tension in history
00156         double minrs;                           // maximum return slip in compression in history
00157         double minrl;                           // maximum return load in compression in history
00158         double minvgs;                          // maximum return vergin slip in compression in history
00159         double rslip;                           // last return slip 
00160         double rload;                           // last return load
00161         double rsvg;                            // last return vergin slip
00162         double trs;                                     // this return slip
00163         double trl;                                     // this return load
00164         double trsvg;                           // this return vergin slip
00165         double Eun;                                     // unloading slope (tension --> compression)
00166         double Ere;                                     // reloading slope (compression --> tension)
00167         double Er;                                      // return slope 
00168         double kkk = 0.38;                      // unloading slope (damage)
00169         double templ, temps;            // temporary virables
00170 
00171         double ss;                                      // normalized slip
00172         double Sy;                                      // dummy yield slip to keep reloadig slope E0
00173         double ssy;                                     // ratio of slip to Sy
00174         double suy;                                     // ratio of dummy su to Sy
00175         double ft;                                      // normalized load
00176         double st;                                      // normalized slope
00177         
00178         if (fabs(dslip) <= DBL_EPSILON)             //ignore trivial slip change
00179     {
00180                 Tload = Cload;
00181                 return;
00182         }
00183 
00184         if (Tloading == 0)
00185         {
00186                 Tload = getEnvelopeStress(ts);
00187                 if (dslip > 0.0) 
00188                 {
00189                         Tloading = 1;
00190                         CminHSlip = -ts;                        //avoid divided by zero
00191                 }
00192                 else
00193                 {
00194                         Tloading = -1;
00195                         CmaxHSlip = -ts;                        //avoid divided by zero
00196                 }
00197                 return;
00198         }
00199 
00200         if (TYieldFlag == 0)
00201         {
00202                 if (fabs(ts) <= sy)
00203                 {
00204                         Tload = ts*E0;
00205                         Ttangent = E0;
00206                 }
00207                 else
00208                 {
00209                         TYieldFlag = 1;
00210                         Tload = getEnvelopeStress(ts);
00211                 }
00212 
00213                 if (Tloading > 0 && dslip < 0.0 && Cslip > TmaxHSlip)
00214                         TmaxHSlip = Cslip;
00215                 if (Tloading < 0 && dslip > 0.0 && Cslip < TminHSlip)
00216                         TminHSlip = Cslip;
00217 
00218                 return;
00219         }
00220 
00221         //set limits
00222         maxrs = TmaxHSlip;
00223         maxrl = getEnvelopeStress(maxrs);
00224         if (maxrs > sy)
00225         {
00226                 Eun = E0/pow(maxrs/sy,kkk);
00227         }
00228         else
00229         {
00230                 Eun = E0;
00231         }
00232         maxvgs = maxrs-maxrl/Eun;
00233 
00234         minrs = TminHSlip;
00235         minrl = getEnvelopeStress(minrs);
00236         if (minrs < -sy)
00237         {
00238                 Ere = E0/pow(-minrs/sy,kkk);
00239         }
00240         else
00241         {
00242                 Ere = E0;
00243         }
00244         minvgs = minrs-minrl/Ere;
00245 
00246         rslip = TRSlip;
00247         rload = TRLoad;
00248         Er = TRSlope;
00249         rsvg = rslip-rload/Er;
00250 
00251         //get load for a slip
00252         if (Tloading > 0.0)                                     //(Cloading>0): was loading (tension)
00253         {
00254                 if (dslip > 0.0)                                        //%(dslip>0): keep loading (tension)
00255                 {
00256                         if (ts >= maxrs)                                        //%%envelope stress
00257                         {
00258                                 Tload = getEnvelopeStress(ts);
00259                         }
00260                         else                                                            //%% ts < maxrs
00261                         {
00262                                 if (ts >= rsvg)                                 //%%curve reloading (tension)
00263                                 {
00264                                         Sy = maxrl/Ere;
00265                                         suy = (maxrs-rsvg)/Sy;
00266                                         if (ts-rsvg <= Ks*(maxrs-rsvg))
00267                                         {
00268                                                 ssy = (ts-rsvg)/Sy; 
00269                                                 ss = ssy/(suy-ssy);
00270                                                 ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00271                                                 Tload = ft*maxrl;
00272                                                 st = pow(suy,(1-R))/pow(suy-ssy,2)/pow((pow(1/suy,R)+pow(ss,R)),(1/R+1));
00273                                                 Ttangent = st*Ere;
00274                                         }
00275                                         else
00276                                         {
00277                                                 ssy = Ks*(maxrs-rsvg)/Sy; 
00278                                                 ss = ssy/(suy-ssy);
00279                                                 ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00280                                                 templ = ft*maxrl;
00281                                                 temps = Ks*(maxrs-rsvg)+rsvg;
00282                                                 Tload = templ+(maxrl-templ)/(maxrs-temps)*(ts-temps);
00283                                                 Ttangent = (maxrl-templ)/(maxrs-temps);
00284                                         }
00285                                 }
00286                                 else                                                    //%% ts < rsvg
00287                                 {
00288                                         if (ts >= rslip)                        //%%linear reloading (tension)
00289                                         {
00290                                                 Tload = rload*(ts-rsvg)/(rslip-rsvg);
00291                                                 Ttangent = Er;
00292                                         }
00293                                         else                                            //%%ts > rsvg not possible for safety
00294                                         {
00295                                                 Tload = rload;
00296                                         }
00297                 }
00298                         }
00299                 }
00300                 else                                                            //%(dslip<0): turn unloading (compression)
00301                 {
00302                         Tloading = -1;
00303                         TRSlip = Cslip;
00304                         TRLoad = Cload;
00305                         if (Cslip > TmaxHSlip)
00306                         {
00307                                 TmaxHSlip = Cslip;
00308                     if (TmaxHSlip > sy)
00309                                 {
00310                                         TRSlope = E0/pow(TmaxHSlip/sy, kkk);
00311                                 }
00312                                 else
00313                                 {
00314                                         TRSlope = E0;
00315                                 }
00316                         }
00317                         Er = TRSlope;
00318 
00319                         trs = TRSlip;
00320                         trl = TRLoad;
00321                         trsvg = trs-trl/Er;
00322         
00323                         if (trsvg > 0.0 && CminHSlip == 0.0)    //%%guess a minimum return slip
00324                                 CminHSlip = -sy*trsvg/su;
00325 
00326                         if (ts > trs)                                           //%%not possible for safety
00327                         {
00328                                 Tload = trl;
00329                         }
00330                         else
00331                         {
00332                                 if (ts > trsvg)                                 //%%linear unloading (compression)
00333                                 {
00334                                         Tload = trl*(ts-trsvg)/(trs-trsvg);
00335                                         Ttangent = Er;
00336                                 }
00337                                 else
00338                                 {
00339                                         if (ts > minrs)                         //%%curve unloading (compression)
00340                                         {
00341                                                 Sy = minrl/Eun;
00342                                                 suy = (minrs-trsvg)/Sy;
00343                                                 if (ts-trsvg >= Ks*(minrs-trsvg))
00344                                                 {
00345                                                         ssy = (ts-trsvg)/Sy; 
00346                                                         ss = ssy/(suy-ssy);
00347                                                         ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00348                                                         Tload = ft*minrl;
00349                                                         st = pow(suy,(1-R))/pow(suy-ssy,2)/pow((pow(1/suy,R)+pow(ss,R)),(1/R+1));
00350                                                         Ttangent = st*Eun;
00351                                                 }
00352                                         else
00353                                                 {
00354                                                         ssy = Ks*(minrs-trsvg)/Sy; 
00355                                                         ss = ssy/(suy-ssy);
00356                                                         ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00357                                                         templ = ft*minrl;
00358                                                         temps = Ks*(minrs-trsvg)+trsvg;
00359                                                         Tload = templ+(minrl-templ)/(minrs-temps)*(ts-temps);
00360                                                         Ttangent = (minrl-templ)/(minrs-temps);
00361                                                 }
00362                                         }
00363                                         else                                            //%%envelope stress
00364                                         {
00365                                                 Tload = getEnvelopeStress(ts);
00366                                         }
00367                                 }
00368                         }
00369 
00370                 }
00371         }
00372         else                                                            //(Tloading<0): was unloading (compression)
00373         {
00374                 if (dslip < 0.0)                                        //%(dslip<0): keep unloading (compression)
00375                 {
00376                         if (ts <= minrs)                                        //%%envelope stress
00377                         {
00378                                 Tload = getEnvelopeStress(ts);
00379                         }
00380                         else                                                            //%% ts > minrs                                                         
00381                         {
00382                                 if (ts <= rsvg)                                 //%%curve unloading (compression)
00383                                 {
00384                                         Sy = minrl/Eun;
00385                                         suy = (minrs-rsvg)/Sy;
00386                                         if (ts-rsvg >= Ks*(minrs-rsvg))
00387                                         {
00388                                                 ssy = (ts-rsvg)/Sy; 
00389                                                 ss = ssy/(suy-ssy);
00390                                                 ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00391                                                 Tload = ft*minrl;
00392                                                 st = pow(suy,(1-R))/pow(suy-ssy,2)/pow((pow(1/suy,R)+pow(ss,R)),(1/R+1));
00393                                                 Ttangent = st*Eun;
00394                                         }
00395                                         else
00396                                         {
00397                                                 ssy = Ks*(minrs-rsvg)/Sy; 
00398                                                 ss = ssy/(suy-ssy);
00399                                                 ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00400                                                 templ = ft*minrl;
00401                                                 temps = Ks*(minrs-rsvg)+rsvg;
00402                                                 Tload = templ+(minrl-templ)/(minrs-temps)*(ts-temps);
00403                                                 Ttangent = (minrl-templ)/(minrs-temps);
00404                                         }
00405                                 }
00406                                 else                                                    //%% ts > rsvg
00407                                 {
00408                                         if (ts <= rslip)                        //%%linear unloading (compression)
00409                                         {
00410                                                 Tload = rload*(ts-rsvg)/(rslip-rsvg);
00411                                                 Ttangent = E0;
00412                                         }
00413                                         else                                            //%%not possible for safety
00414                                         {
00415                     Tload = rload;
00416                                         }
00417                                 }
00418                         }
00419                 }
00420                 else                                                            //(dslip>0): turn loading (tension)
00421                 {
00422                         Tloading = 1;
00423                         TRSlip = Cslip;
00424                         TRLoad = Cload;
00425                         if (Cslip < TminHSlip)
00426                         {
00427                                 TminHSlip = Cslip;
00428                     if (TminHSlip < -sy)
00429                                 {
00430                                         TRSlope = E0/pow(-TminHSlip/sy, kkk);
00431                                 }
00432                                 else
00433                                 {
00434                                         TRSlope = E0;
00435                                 }
00436                         }
00437                         Er = TRSlope;
00438 
00439                         trs = TRSlip;
00440                         trl = TRLoad;
00441                         trsvg = trs-trl/Er;
00442         
00443                         if (trsvg < 0.0 && CmaxHSlip == 0.0)
00444                                 CmaxHSlip = sy*trsvg/(-su);
00445 
00446                         if (ts < trs)                                           //%%not possible for safety
00447                         {
00448                                 Tload = trl;
00449                         }
00450                         else                                                            //%% ts > trs
00451                         {
00452                                 if (ts < trsvg)                                 //%%linear unloading (compression)
00453                                 {
00454                                         Tload = trl*(ts-trsvg)/(trs-trsvg);
00455                                         Ttangent = Er;
00456                                 }
00457                                 else                                                    //%% ts > trsvg
00458                                 {
00459                                         if (ts < maxrs)                         //%%curve reloading (compression)
00460                                         {
00461                                                 Sy = maxrl/Ere;
00462                                                 suy = (maxrs-rsvg)/Sy;
00463                                                 if (ts-trsvg <= Ks*(maxrs-trsvg))
00464                                                 {
00465                                                         ssy = (ts-trsvg)/Sy; 
00466                                                         ss = ssy/(suy-ssy);
00467                                                         ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00468                                                         Tload = ft*maxrl;
00469                                                         st = pow(suy,(1-R))/pow(suy-ssy,2)/pow((pow(1/suy,R)+pow(ss,R)),(1/R+1));
00470                                                         Ttangent = st*Ere;
00471                                                 }
00472                                                 else
00473                                                 {
00474                                                         ssy = Ks*(maxrs-trsvg)/Sy; 
00475                                                         ss = ssy/(suy-ssy);
00476                                                         ft = ss/pow((pow(1/suy,R)+pow(ss,R)),(1/R));
00477                                                         templ = ft*maxrl;
00478                                                         temps = Ks*(maxrs-trsvg)+trsvg;
00479                                                         Tload = templ+(maxrl-templ)/(maxrs-temps)*(ts-temps);
00480                                                         Ttangent = (maxrl-templ)/(maxrs-temps);
00481                                                 }
00482                                         }
00483                                         else                                            //%%envelope stress
00484                                         {
00485                                                 Tload = getEnvelopeStress(ts);
00486                                         }
00487                                 }
00488                         }
00489                         if (Cslip < TminHSlip)
00490                         {
00491                                 TminHSlip = Cslip;
00492                         }
00493         }
00494     }
00495 
00496         // Detect load reversals and determine damage indexes
00497         //this->detectloadReversal (dslip);
00498 }
00499 
00500 double Bond_SP01::getEnvelopeStress (double s)
00501 {
00502         double ss;                                      // normalized slip
00503         double ft;                                      // normalized load
00504         double st;                                      // normalized slope
00505         double ssy;                                     // the ratio of s-Sy to Sy
00506         double suy;                                     // the ratio of su-Sy to Sy
00507         double load;
00508         
00509         if (fabs(s) < DBL_EPSILON)
00510         {
00511                 load = 0.0;
00512                 Ttangent = E0;
00513                 return load;
00514         }
00515 
00516         if (s > 0.0)                            //tension side
00517         {
00518                 if (s <= sy)
00519                 {
00520                         load = s*E0;                     //%stress
00521                         Ttangent = E0;                   //%slope
00522                 }
00523                 else 
00524                 {
00525                         if (s < su)
00526                         {
00527                                 ssy = (s-sy)/sy;
00528                                 suy = (su-sy)/sy;
00529                                 ss = ssy/(suy-ssy);
00530                                 ft = ss/pow((pow(1/suy/Kz,Cr)+pow(ss,Cr)),1/Cr);
00531                                 load = fy+ft*(fu-fy);
00532                                 st = (pow(suy,(1-Cr))/pow(Kz,Cr)/pow((suy-ssy),2))/pow((pow(1/suy/Kz,Cr)+pow(ss,Cr)),(1/Cr+1));
00533                                 Ttangent = st*E0;
00534                         }
00535                         else
00536                         {
00537                                 load = fu;
00538                                 Ttangent = 0.0;
00539                         }
00540                 }
00541         }
00542         else                                            //compression side
00543         {
00544                 if (s >= -sy)
00545                 {
00546                         load = s*E0;
00547                         Ttangent = E0;
00548                 }
00549                 else 
00550                 {
00551                         if (s > -su)
00552                         {
00553                                 ssy = (s-(-sy))/(-sy);
00554                                 suy = (su-sy)/sy;
00555                                 ss = ssy/(suy-ssy);
00556                                 ft = ss/pow((pow(1/suy/Kz,Cr)+pow(ss,Cr)),1/Cr);
00557                                 load = -fy+ft*(-fu+fy);
00558                                 st = (pow(suy,(1-Cr))/pow(Kz,Cr)/pow((suy-ssy),2))/pow((pow(1/suy/Kz,Cr)+pow(ss,Cr)),(1/Cr+1));
00559                                 Ttangent = st*E0;
00560                         }
00561                         else
00562                         {
00563                                 load = -fu;
00564                                 Ttangent = 0.0;
00565                         }
00566                 }
00567         }
00568 
00569         return load;
00570 }
00571 
00572 double Bond_SP01::getStrain ()
00573 {
00574    return Tslip;
00575 }
00576 
00577 double Bond_SP01::getStress ()
00578 {
00579    return Tload;
00580 }
00581 
00582 double Bond_SP01::getTangent ()
00583 {
00584    return Ttangent;
00585 }
00586 
00587 double Bond_SP01::getInitialTangent()
00588 {
00589         return fy/sy;
00590 }
00591 
00592 int Bond_SP01::commitState ()
00593 {
00594         // History variables
00595         CRSlip = TRSlip;                        // Return slip
00596         CRLoad = TRLoad;                        // Return load
00597         CRSlope = TRSlope;                      // Return slope
00598         CmaxHSlip = TmaxHSlip;          // Maximum slip in tension
00599         CminHSlip = TminHSlip;          // Maximum slip in compression
00600         Cloading = Tloading;            // Loading flag
00601         CYieldFlag = TYieldFlag;        // Yield flag
00602 
00603         // State variables
00604         Cslip = Tslip;
00605         Cload = Tload;
00606         Ctangent = Ttangent;
00607 
00608         return 0;
00609 }
00610 
00611 int Bond_SP01::revertToLastCommit ()
00612 {
00613         // Reset trial history variables to last committed state
00614         TRSlip = CRSlip;                        // Return slip
00615         TRLoad = CRLoad;                        // Return load
00616         TRSlope = CRSlope;                      // Return slope
00617         TmaxHSlip = CmaxHSlip;          // Maximum slip in tension
00618         TminHSlip = CminHSlip;          // Maximum slip in compression
00619         Tloading = Cloading;            // Loading flag
00620         TYieldFlag = CYieldFlag;        // Yield flag
00621 
00622         // Reset trial state variables to last committed state
00623         Tslip = Cslip;
00624         Tload = Cload;
00625         Ttangent = Ctangent;
00626 
00627         return 0;
00628 }
00629 
00630 int Bond_SP01::revertToStart ()
00631 {
00632         // History variables
00633         CRSlip = 0.0;
00634         CRLoad = 0.0;
00635         CRSlope = E0;                   
00636         CmaxHSlip = 0.0;
00637         CminHSlip = 0.0;
00638         Cloading = 0;
00639         CYieldFlag = 0;
00640 
00641         TRSlip = 0.0;
00642         TRLoad = 0.0;
00643         TRSlope = E0;                   
00644         TmaxHSlip = 0.0;
00645         TminHSlip = 0.0;
00646         Tloading = 0;
00647         TYieldFlag = 0;
00648 
00649         // State variables
00650         Cslip = 0.0;
00651         Cload = 0.0;
00652         Ctangent = E0;           
00653 
00654         Tslip = 0.0;
00655         Tload = 0.0;
00656         Ttangent = E0; 
00657 
00658         return 0;
00659 }
00660 
00661 UniaxialMaterial* Bond_SP01::getCopy ()
00662 {
00663    Bond_SP01* theCopy = new Bond_SP01(this->getTag(), fy, sy, fu, su, Kz, R, Cd, db, fc, lba);
00664 
00665    // Converged history variables
00666    theCopy->CRSlip = CRSlip;
00667    theCopy->CRLoad = CRLoad;
00668    theCopy->CRSlope = CRSlope;
00669    theCopy->CmaxHSlip = CmaxHSlip;
00670    theCopy->CminHSlip = CminHSlip;
00671    theCopy->Cloading = Cloading;
00672    theCopy->CYieldFlag = CYieldFlag;
00673 
00674    // Trial history variables
00675    theCopy->TRSlip = TRSlip;
00676    theCopy->TRLoad = TRLoad;
00677    theCopy->TRSlope = TRSlope;
00678    theCopy->TmaxHSlip = TmaxHSlip;
00679    theCopy->TminHSlip = TminHSlip;
00680    theCopy->Tloading = Tloading;
00681    theCopy->TYieldFlag = TYieldFlag;
00682 
00683    // Converged state variables
00684    theCopy->Cslip = Cslip;
00685    theCopy->Cload = Cload;
00686    theCopy->Ctangent = Ctangent;
00687 
00688    // Trial state variables
00689    theCopy->Tslip = Tslip;
00690    theCopy->Tload = Tload;
00691    theCopy->Ttangent = Ttangent;
00692 
00693    // Other global virables
00694    theCopy->Cr = Cr;
00695    theCopy->Ks = Ks;
00696    theCopy->E0 = E0;
00697    theCopy->la = la;
00698 
00699    return theCopy;
00700 }
00701 
00702 int Bond_SP01::sendSelf (int commitTag, Channel& theChannel)
00703 {
00704    return -1;
00705 }
00706 
00707 int Bond_SP01::recvSelf (int commitTag, Channel& theChannel,
00708                                 FEM_ObjectBroker& theBroker)
00709 {
00710    return -1;
00711 }
00712 
00713 void Bond_SP01::Print (OPS_Stream& s, int flag)
00714 {
00715    s << "Bond_SP01 tag: " << this->getTag() << endln;
00716    s << "  sy: " << sy << " ";
00717    s << "  fy: " << fy << " ";
00718    s << "  su: " << su << " ";
00719    s << "  fu: " << fu << " ";
00720    s << "  Kz: " << Kz << " ";
00721    s << "  R: " << R << " ";
00722    s << "  Cd: " << Cd << " ";
00723    s << "  db: " << db << " ";
00724    s << "  fc: " << fc << " ";
00725    s << "  lba:" << lba << " ";
00726 }
00727 
00728 

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