00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <TclModelBuilder.h>
00038 #include <ReinforcingSteel.h>
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
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 }