TclReinforcingSteel.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.4 $
00022 // $Date: 2006/01/19 19:19:12 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/TclReinforcingSteel.cpp,v $
00024 
00025 /* ****************************************************************** **
00026 ** THIS FILE WAS DEVELOPED AT UC DAVIS                                **
00027 **                                                                    **
00028 ** Programmed by: Jon Mohle (jfmohle@ucdavis.edu)                     **
00029 ** Supervisor: Sashi Kunnath (skkunnath@ucdavis.edu)                  **
00030 **                                                                    **
00031 ********************************************************************* */
00032 // Written: Jon Mohle
00033 // Created: August 2005
00034 
00035                                                                        
00036 
00037 #include <TclModelBuilder.h>
00038 #include <ReinforcingSteel.h>   // Jon Mohle
00039 
00040 #include <Vector.h>
00041 #include <string.h>
00042 #include <tcl.h>
00043 
00044 int
00045 TclCommand_ReinforcingSteel(ClientData clientData, Tcl_Interp *interp, int argc, 
00046                             TCL_Char **argv, TclModelBuilder *theTclBuilder)
00047 {
00048   UniaxialMaterial *theMaterial = 0;
00049   if (argc < 9) {
00050     opserr << "WARNING insufficient arguments\n";
00051     opserr << "Want: uniaxialMaterial ReinforcingSteel tag? fy? fu? Es? Esh? esh? eult? <-GABuck?> <-DMBuck?> <-CMFatigue?> <-MPCurveParams?> <-IsoHard?>" << endln;
00052         return TCL_ERROR;
00053   }
00054   
00055   int tag;
00056   double fy, fu, Es, Esh, esh, eult;
00057   double slen = 0.0;
00058   double Cf = 0.0;
00059   double alpha = -4.46;
00060   double Cd = 0.0;
00061   double beta = 1.0;
00062   double r = 1.0;
00063   double gama = 0.5;
00064   int buckModel = 0;
00065   double RC1 = 1.0/3.0;
00066   double RC2 = 18.0;
00067   double RC3 = 4.0;
00068   double a1 = 0.0;
00069   double hardLim = 0.01;
00070   
00071   if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK) {
00072     opserr << "WARNING invalid uniaxialMaterial ReinforcingSteel tag" << endln;
00073     return TCL_ERROR;           
00074   }
00075   
00076   if (Tcl_GetDouble(interp, argv[3], &fy) != TCL_OK) {
00077     opserr << "WARNING invalid fy\n";
00078     opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00079     return TCL_ERROR;   
00080   }
00081   
00082   if (Tcl_GetDouble(interp, argv[4], &fu) != TCL_OK) {
00083     opserr << "WARNING invalid fu\n";
00084     opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00085     return TCL_ERROR;
00086   }
00087   
00088   if (Tcl_GetDouble(interp, argv[5], &Es) != TCL_OK) {
00089     opserr << "WARNING invalid Es\n";
00090     opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00091     return TCL_ERROR;   
00092   }
00093   
00094   if (Tcl_GetDouble(interp, argv[6], &Esh) != TCL_OK) {
00095     opserr << "WARNING invalid Esh\n";
00096     opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00097     return TCL_ERROR;   
00098   }
00099   
00100   if (Tcl_GetDouble(interp, argv[7], &esh) != TCL_OK) {
00101     opserr << "WARNING invalid esh\n";
00102     opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00103     return TCL_ERROR;   
00104   }
00105   
00106   if (Tcl_GetDouble(interp, argv[8], &eult) != TCL_OK) {
00107     opserr << "WARNING invalid eult\n";
00108     opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00109     return TCL_ERROR;   
00110   }
00111   int argLoc = 9;
00112   while (argc > argLoc) {
00113           if (strcmp(argv[argLoc],"-GABuck") == 0) {
00114             if (argc < ++argLoc+4)  {
00115               opserr << "WARNING insufficient optional arguments for -GABuck\n";
00116                     opserr << "Want: <-GABuck lsr? beta? r? gama?>" << endln;
00117                     return TCL_ERROR;
00118             }
00119       
00120             buckModel = 1;
00121             if (Tcl_GetDouble(interp, argv[argLoc++], &slen) != TCL_OK) {
00122               opserr << "WARNING invalid lsr\n";
00123               opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00124               return TCL_ERROR; 
00125             }
00126             if (Tcl_GetDouble(interp, argv[argLoc++], &beta) != TCL_OK) {
00127         opserr << "WARNING invalid beta\n";
00128         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00129         return TCL_ERROR;       
00130       }
00131     
00132       if (Tcl_GetDouble(interp, argv[argLoc++], &r) != TCL_OK) {
00133         opserr << "WARNING invalid r\n";
00134         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00135         return TCL_ERROR;       
00136       }
00137     
00138       if (Tcl_GetDouble(interp, argv[argLoc++], &gama) != TCL_OK) {
00139         opserr << "WARNING invalid gama\n";
00140         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00141         return TCL_ERROR;       
00142       }
00143     }
00144           
00145     else if (strcmp(argv[argLoc],"-DMBuck") == 0) {
00146             if (argc < ++argLoc+1)  {
00147               opserr << "WARNING insufficient optional arguments for -DMBuck\n";
00148                     opserr << "Want: <-DMBuck lsr? <alpha?>>" << endln;
00149                     return TCL_ERROR;
00150             }
00151 
00152             buckModel = 2;
00153             if (Tcl_GetDouble(interp, argv[argLoc++], &slen) != TCL_OK) {
00154               opserr << "WARNING invalid lsr\n";
00155               opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00156               return TCL_ERROR; 
00157             }
00158       if (argc <= argLoc)  {
00159         beta = 1.0;
00160       } else if (argv[argLoc][0]!=45) {
00161         if (Tcl_GetDouble(interp, argv[argLoc++], &beta) != TCL_OK) {
00162           opserr << "WARNING invalid alpha\n";
00163           opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00164           return TCL_ERROR;     
00165         }
00166       }
00167       if (beta<0.75 || beta>1.0)
00168         opserr << "WARNING alpha usually is between 0.75 and 1.0\n";
00169           }
00170         
00171           else if (strcmp(argv[argLoc],"-CMFatigue") == 0) {
00172             if (argc < ++argLoc+3)  {
00173               opserr << "WARNING insufficient optional arguments for -CMFatigue\n";
00174                     opserr << "Want: <-CMFatigue Cf? alpha? Cd?>" << endln;
00175                     return TCL_ERROR;
00176             }
00177             if (Tcl_GetDouble(interp, argv[argLoc++], &Cf) != TCL_OK) {
00178         opserr << "WARNING invalid Cf\n";
00179         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00180         return TCL_ERROR;       
00181       }
00182       if (Tcl_GetDouble(interp, argv[argLoc++], &alpha) != TCL_OK) {
00183         opserr << "WARNING invalid alpha\n";
00184         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00185         return TCL_ERROR;       
00186       }
00187       if (Tcl_GetDouble(interp, argv[argLoc++], &Cd) != TCL_OK) {
00188         opserr << "WARNING invalid Cd\n";
00189         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00190         return TCL_ERROR;       
00191             }
00192           }
00193     else if (strcmp(argv[argLoc],"-MPCurveParams") == 0) {
00194       if (argc < ++argLoc+3)  {
00195               opserr << "WARNING insufficient optional arguments for -MPCurveParams\n";
00196                     opserr << "Want: <-CMFatigue R1? R2? R3?>" << endln;
00197                     return TCL_ERROR;
00198             }
00199       if (Tcl_GetDouble(interp, argv[argLoc++], &RC1) != TCL_OK) {
00200         opserr << "WARNING invalid RC1\n";
00201         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00202         return TCL_ERROR;       
00203       }
00204       if (Tcl_GetDouble(interp, argv[argLoc++], &RC2) != TCL_OK) {
00205         opserr << "WARNING invalid RC2\n";
00206         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00207         return TCL_ERROR;       
00208       }
00209       if (Tcl_GetDouble(interp, argv[argLoc++], &RC3) != TCL_OK) {
00210         opserr << "WARNING invalid RC3\n";
00211         opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00212         return TCL_ERROR;       
00213             }
00214     }
00215     else if (strcmp(argv[argLoc],"-IsoHard") == 0) {
00216       if (argc < ++argLoc+1) {
00217         a1 = 4.3;
00218         opserr << "uniaxialMaterial ReinforcingSteel -IsoHard: defaut values used\n";
00219       } else {
00220         if (argv[argLoc][0]==45) {
00221           a1 = 4.3;
00222         } else {
00223           if (Tcl_GetDouble(interp, argv[argLoc++], &a1) != TCL_OK) {
00224             opserr << "WARNING invalid a1\n";
00225             opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00226             return TCL_ERROR;   
00227           }
00228         }
00229         if (argc > argLoc) {
00230           if (argv[argLoc][0]==45) {
00231             a1 = 4.3;
00232           } else {
00233             if (Tcl_GetDouble(interp, argv[argLoc++], &hardLim) != TCL_OK) {
00234               opserr << "WARNING invalid hardening limit\n";
00235               opserr << "uniaxialMaterial ReinforcingSteel: " << tag << endln;
00236               return TCL_ERROR; 
00237             }
00238           }
00239         }
00240       }
00241     }
00242     
00243     else {
00244             opserr << "WARNING did not recognize optional flag\n";
00245             opserr << "Possible Optional Flags: <-GABuck?> <-DMBuck?> <-CMFatigue?> <-MPCurveParams?> <-IsoHard?>" << endln;
00246             return TCL_ERROR;
00247     }
00248   }
00249 
00250   // Parsing was successful, allocate the material
00251   theMaterial = new ReinforcingSteel(tag, fy, fu, Es, Esh, esh, eult, buckModel, slen, beta, r, gama, Cf, alpha, Cd, RC1, RC2, RC3, a1, hardLim);
00252 
00253   if (theMaterial != 0) 
00254     return theTclBuilder->addUniaxialMaterial(*theMaterial);
00255   else
00256     return -1;
00257 }

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