00001
00002
00003
00004 #include <TclModelBuilder.h>
00005 #include <string.h>
00006 #include <Vector.h>
00007
00008 #include <YieldSurface_BC.h>
00009 #include <YS_Section2D01.h>
00010 #include <YS_Section2D02.h>
00011
00012 #include <SoilFootingSection2d.h>
00013
00014
00015
00016
00017 static void printCommand(int argc, TCL_Char **argv)
00018 {
00019 opserr << "Input command: ";
00020 for (int i=0; i<argc; i++)
00021 opserr << argv[i] << " ";
00022 opserr << endln;
00023 }
00024
00025 SectionForceDeformation*
00026 TclModelBuilderYS_SectionCommand(ClientData clienData, Tcl_Interp *interp, int argc,
00027 TCL_Char **argv, TclModelBuilder *theBuilder)
00028 {
00029 if (argc < 3) {
00030 opserr << "WARNING insufficient number of arguments\n";
00031 printCommand(argc, argv);
00032 return 0;
00033 }
00034
00035 int tag;
00036 if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK) {
00037 opserr << "WARNING invalid section tag\n";
00038 printCommand(argc, argv);
00039 return 0;
00040 }
00041
00042 SectionForceDeformation *theModel = 0;
00043
00044 if (strcmp(argv[1],"YS_Section2D01") == 0 ||
00045 strcmp(argv[1],"YS_Section2d01") == 0) {
00046
00047 if (argc < 7) {
00048 opserr << "WARNING invalid number of arguments\n";
00049 printCommand(argc,argv);
00050 opserr << "Want: section YS_Section2D01 tag? E? A? Iz? ysTag? <algo?>" << endln;
00051 return 0;
00052 }
00053
00054 int algo, ysTag;
00055 double E, A, Iz;
00056 int indx = 3;
00057
00058 if (Tcl_GetDouble (interp, argv[indx++], &E) != TCL_OK) {
00059 opserr << "WARNING invalid E" << endln;
00060 opserr << " section: " << tag << endln;
00061 return 0;
00062 }
00063
00064 if (Tcl_GetDouble (interp, argv[indx++], &A) != TCL_OK) {
00065 opserr << "WARNING invalid A" << endln;
00066 opserr << " section: " << tag << endln;
00067 return 0;
00068 }
00069
00070 if (Tcl_GetDouble (interp, argv[indx++], &Iz) != TCL_OK) {
00071 opserr << "WARNING invalid Iz" << endln;
00072 opserr << " section: " << tag << endln;
00073 return 0;
00074 }
00075
00076 if (Tcl_GetInt (interp, argv[indx++], &ysTag) != TCL_OK) {
00077 opserr << "WARNING invalid ysTag" << endln;
00078 opserr << " section: " << tag << endln;
00079 return 0;
00080 }
00081
00082 YieldSurface_BC *ys = theBuilder->getYieldSurface_BC(ysTag);
00083
00084 if (ys == 0) {
00085 opserr << "WARNING yield surface does not exist\n";
00086 opserr << "yieldSurface: " << ysTag;
00087 opserr << "\nsection YieldSurface: " << tag << endln;
00088 return 0;
00089 }
00090
00091 bool useKr = true;
00092 if(argc > indx) {
00093 if (Tcl_GetInt(interp, argv[indx++], &algo) != TCL_OK) {
00094 opserr << "WARNING invalid algo" << endln;
00095 opserr << " section: " << tag << endln;
00096 return 0;
00097 }
00098 if(algo == 0)
00099 useKr = false;
00100 }
00101
00102 theModel = new YS_Section2D01(tag,E, A, Iz, ys, useKr);
00103 }
00104
00105 else if (strcmp(argv[1],"YS_Section2D02") == 0 ||
00106 strcmp(argv[1],"YS_Section2d02") == 0) {
00107
00108 if (argc < 8) {
00109 opserr << "WARNING invalid number of arguments\n";
00110 printCommand(argc,argv);
00111 opserr << "Want: section YS_Section2D01 tag? E? A? Iz? maxPlastRot? ysTag? <algo?>" << endln;
00112 return 0;
00113 }
00114
00115 int algo, ysTag;
00116 double E, A, Iz, maxPlstkRot;
00117 int indx = 3;
00118
00119 if (Tcl_GetDouble (interp, argv[indx++], &E) != TCL_OK) {
00120 opserr << "WARNING invalid E" << endln;
00121 opserr << " section: " << tag << endln;
00122 return 0;
00123 }
00124
00125 if (Tcl_GetDouble (interp, argv[indx++], &A) != TCL_OK) {
00126 opserr << "WARNING invalid A" << endln;
00127 opserr << " section: " << tag << endln;
00128 return 0;
00129 }
00130
00131 if (Tcl_GetDouble (interp, argv[indx++], &Iz) != TCL_OK) {
00132 opserr << "WARNING invalid Iz" << endln;
00133 opserr << " section: " << tag << endln;
00134 return 0;
00135 }
00136
00137 if (Tcl_GetDouble (interp, argv[indx++], &maxPlstkRot) != TCL_OK) {
00138 opserr << "WARNING maxPlstkRot " << endln;
00139 opserr << " section: " << tag << endln;
00140 return 0;
00141 }
00142
00143 if (Tcl_GetInt (interp, argv[indx++], &ysTag) != TCL_OK) {
00144 opserr << "WARNING invalid ysTag" << endln;
00145 opserr << " section: " << tag << endln;
00146 return 0;
00147 }
00148
00149 YieldSurface_BC *ys = theBuilder->getYieldSurface_BC(ysTag);
00150
00151 if (ys == 0) {
00152 opserr << "WARNING yield surface does not exist\n";
00153 opserr << "yieldSurface: " << ysTag;
00154 opserr << "\nsection YieldSurface: " << tag << endln;
00155 return 0;
00156 }
00157
00158 bool useKr = true;
00159 if(argc > indx) {
00160 if (Tcl_GetInt(interp, argv[indx++], &algo) != TCL_OK) {
00161 opserr << "WARNING invalid algo" << endln;
00162 opserr << " section: " << tag << endln;
00163 return 0;
00164 }
00165 if(algo == 0)
00166 useKr = false;
00167 }
00168
00169 theModel = new YS_Section2D02(tag,E, A, Iz, maxPlstkRot, ys, useKr);
00170 }
00171
00172
00173
00174
00175
00176 else if ((strcmp(argv[1], "soilFootingSection2d") == 0) ||
00177 (strcmp(argv[1], "SoilFootingSection2d") == 0) )
00178 {
00179
00180 if (argc < 10) {
00181 opserr << "WARNING invalid number of arguments\n";
00182 printCommand(argc,argv);
00183 opserr << "Want: section soilFootingSection2d tag? FS? Vult? L? Kv? dL?" << endln;
00184 return 0;
00185 }
00186
00187 double FS, Vult, L, Kv, Kh, Rv, deltaL;
00188 int indx = 3;
00189
00190 if (Tcl_GetDouble (interp, argv[indx++], &FS) != TCL_OK) {
00191 opserr << "WARNING invalid FS" << endln;
00192 opserr << " section: " << tag << endln;
00193 return 0;
00194 }
00195
00196 if (Tcl_GetDouble (interp, argv[indx++], &Vult) != TCL_OK) {
00197 opserr << "WARNING invalid Vult" << endln;
00198 opserr << " section: " << tag << endln;
00199 return 0;
00200 }
00201
00202 if (Tcl_GetDouble (interp, argv[indx++], &L) != TCL_OK) {
00203 opserr << "WARNING invalid L" << endln;
00204 opserr << " section: " << tag << endln;
00205 return 0;
00206 }
00207
00208 if (Tcl_GetDouble (interp, argv[indx++], &Kv) != TCL_OK) {
00209 opserr << "WARNING invalid Kv" << endln;
00210 opserr << " section: " << tag << endln;
00211 return 0;
00212 }
00213
00214 if (Tcl_GetDouble (interp, argv[indx++], &Kh) != TCL_OK) {
00215 opserr << "WARNING invalid Kh" << endln;
00216 opserr << " section: " << tag << endln;
00217 return 0;
00218 }
00219
00220 if (Tcl_GetDouble (interp, argv[indx++], &Rv) != TCL_OK) {
00221 opserr << "WARNING invalid Rv" << endln;
00222 opserr << " section: " << tag << endln;
00223 return 0;
00224 }
00225
00226 if (Tcl_GetDouble (interp, argv[indx++], &deltaL) != TCL_OK) {
00227 opserr << "WARNING invalid Kv" << endln;
00228 opserr << " section: " << tag << endln;
00229 return 0;
00230 }
00231
00232 theModel = new SoilFootingSection2d (tag, FS, Vult, L, Kv, Kh, Rv, deltaL);
00233 }
00234
00235
00236 return theModel;
00237 }