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 #include <stdlib.h>
00036 #include <string.h>
00037 #include <OPS_Stream.h>
00038 #include <Domain.h>
00039
00040 #include <ElasticBeam2d.h>
00041 #include <ElasticBeam3d.h>
00042
00043
00044 #include <EightNodeBrick.h>
00045 #include <TwentyNodeBrick.h>
00046
00047 #include <CrdTransf2d.h>
00048 #include <CrdTransf3d.h>
00049
00050 #include <TclModelBuilder.h>
00051 #include <packages.h>
00052
00053
00054
00055
00056
00057
00058 typedef struct elementPackageCommand {
00059 char *funcName;
00060 int (*funcPtr)(ClientData clientData, Tcl_Interp *interp, int argc,
00061 TCL_Char **argv, Domain*, TclModelBuilder *);
00062 struct elementPackageCommand *next;
00063 } ElementPackageCommand;
00064
00065 static ElementPackageCommand *theElementPackageCommands = NULL;
00066
00067 extern void printCommand(int argc, TCL_Char **argv);
00068
00069
00070
00071
00072
00073 extern int
00074 TclModelBuilder_addFeapTruss(ClientData clientData, Tcl_Interp *interp, int argc,
00075 TCL_Char **argv, Domain*, TclModelBuilder *, int argStart);
00076
00077 extern int
00078 TclModelBuilder_addTruss(ClientData clientData, Tcl_Interp *interp, int argc,
00079 TCL_Char **argv, Domain*, TclModelBuilder *, int argStart);
00080
00081 extern int
00082 TclModelBuilder_addElasticBeam(ClientData clientData, Tcl_Interp *interp, int argc,
00083 TCL_Char **argv, Domain*, TclModelBuilder *, int argStart);
00084
00085 extern int
00086 TclModelBuilder_addBrick(ClientData clientData, Tcl_Interp *interp,
00087 int argc, TCL_Char **argv, Domain*,
00088 TclModelBuilder *, int argStart);
00089
00090 extern int
00091 TclModelBuilder_addShellMITC4(ClientData clientData, Tcl_Interp *interp,
00092 int argc, TCL_Char **argv, Domain*,
00093 TclModelBuilder *, int argStart);
00094
00095 extern int
00096 TclModelBuilder_addConstantPressureVolumeQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
00097 Domain*, TclModelBuilder *);
00098
00099 extern int
00100 TclModelBuilder_addJoint2D(ClientData, Tcl_Interp *, int, TCL_Char **,
00101 Domain*, TclModelBuilder *);
00102
00103 extern int
00104 TclModelBuilder_addJoint3D(ClientData, Tcl_Interp *, int, TCL_Char **,
00105 Domain*, TclModelBuilder *);
00106
00107 extern int
00108 TclModelBuilder_addEnhancedQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
00109 Domain*, TclModelBuilder *);
00110
00111 extern int
00112 TclModelBuilder_addNineNodeMixedQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
00113 Domain*, TclModelBuilder *);
00114
00115
00116
00117 extern int
00118 TclModelBuilder_addZeroLength(ClientData, Tcl_Interp *, int, TCL_Char **,
00119 Domain*, TclModelBuilder *);
00120
00121
00122 extern int
00123 TclModelBuilder_addZeroLengthSection(ClientData, Tcl_Interp *, int, TCL_Char **,
00124 Domain*, TclModelBuilder *);
00125
00126
00127 extern int
00128 TclModelBuilder_addZeroLengthND(ClientData, Tcl_Interp *, int, TCL_Char **,
00129 Domain*, TclModelBuilder *);
00130
00131
00132
00133 extern int
00134 TclModelBuilder_addNLBeamColumn(ClientData, Tcl_Interp *, int, TCL_Char **,
00135 Domain*, TclModelBuilder *);
00136
00137
00138 extern int
00139 TclModelBuilder_addBeamWithHinges(ClientData, Tcl_Interp *, int, TCL_Char **,
00140 Domain*, TclModelBuilder *);
00141 extern int
00142 TclModelBuilder_addFourNodeQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
00143 Domain*, TclModelBuilder *);
00144 extern int
00145 TclModelBuilder_addDispBeamColumn(ClientData, Tcl_Interp *, int, TCL_Char **,
00146 Domain*, TclModelBuilder *);
00147 extern int
00148 TclModelBuilder_addForceBeamColumn(ClientData, Tcl_Interp *, int, TCL_Char **,
00149 Domain*, TclModelBuilder *);
00150
00151
00152 extern int
00153 TclModelBuilder_addBeamColumnJoint(ClientData, Tcl_Interp *, int, TCL_Char **,
00154 Domain*, TclModelBuilder *, int);
00155
00156
00157 extern int TclModelBuilder_addEightNodeBrick(ClientData,
00158 Tcl_Interp *,
00159 int,
00160 TCL_Char **,
00161 Domain*,
00162 TclModelBuilder *,
00163 int);
00164
00165 extern int TclModelBuilder_addTwentyNodeBrick(ClientData,
00166 Tcl_Interp *,
00167 int,
00168 TCL_Char **,
00169 Domain*,
00170 TclModelBuilder *,
00171 int);
00172
00173
00174 extern int TclModelBuilder_addEightNodeBrick_u_p_U(ClientData,
00175 Tcl_Interp *,
00176 int,
00177 TCL_Char **,
00178 Domain*,
00179 TclModelBuilder *,
00180 int);
00181
00182 extern int TclModelBuilder_addTwentyNodeBrick_u_p_U(ClientData,
00183 Tcl_Interp *,
00184 int,
00185 TCL_Char **,
00186 Domain*,
00187 TclModelBuilder *,
00188 int);
00189
00190
00191 extern int TclModelBuilder_addTwentySevenNodeBrick(ClientData,
00192 Tcl_Interp *,
00193 int,
00194 TCL_Char **,
00195 Domain*,
00196 TclModelBuilder *,
00197 int);
00198
00199
00200
00201
00202 extern int
00203 TclModelBuilder_addElastic2dGNL(ClientData, Tcl_Interp *, int, TCL_Char **,
00204 Domain *,TclModelBuilder *);
00205 extern int
00206 TclModelBuilder_addElement2dYS(ClientData, Tcl_Interp *, int, TCL_Char **,
00207 Domain *,TclModelBuilder *);
00208
00209
00210 extern int
00211 TclModelBuilder_addFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00212 Domain*, TclModelBuilder *);
00213
00214
00215 extern int
00216 TclModelBuilder_addBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00217 Domain*, TclModelBuilder *);
00218
00219
00220 extern int
00221 TclModelBuilder_addNineFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00222 Domain*, TclModelBuilder *);
00223
00224 extern int
00225 TclModelBuilder_addTwentyEightNodeBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00226 Domain*, TclModelBuilder *);
00227
00228 extern int
00229 TclModelBuilder_addTwentyNodeBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
00230 Domain*, TclModelBuilder *);
00231
00232
00233 extern int
00234 TclModelBuilder_addTLFD20nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
00235 Domain*, TclModelBuilder *, int);
00236
00237
00238 extern int
00239 TclModelBuilder_addTLFD8nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
00240 Domain*, TclModelBuilder *, int);
00241
00242
00243
00244 extern int
00245 TclModelBuilder_addEightNode_LDBrick_u_p(ClientData, Tcl_Interp *, int, TCL_Char **,
00246 Domain*, TclModelBuilder *, int);
00247
00248
00249 extern int
00250 TclModelBuilder_addEightNode_Brick_u_p(ClientData, Tcl_Interp *, int, TCL_Char **,
00251 Domain*, TclModelBuilder *, int);
00252
00253 int
00254 TclModelBuilderElementCommand(ClientData clientData, Tcl_Interp *interp,
00255 int argc, TCL_Char **argv,
00256 Domain *theTclDomain, TclModelBuilder *theTclBuilder)
00257 {
00258
00259 if (theTclBuilder == 0) {
00260 opserr << "WARNING builder has been destroyed\n";
00261 return TCL_ERROR;
00262 }
00263
00264
00265 if (argc < 2) {
00266 opserr << "WARNING need to specify an element type\n";
00267 opserr << "Want: element eleType <specific element args> .. see manual for valid eleTypes & arguments\n";
00268 return TCL_ERROR;
00269 }
00270
00271 if (strcmp(argv[1],"fTruss") == 0) {
00272 int eleArgStart = 1;
00273 int result = TclModelBuilder_addFeapTruss(clientData, interp, argc, argv,
00274 theTclDomain, theTclBuilder, eleArgStart);
00275 return result;
00276 } else if (strcmp(argv[1],"truss") == 0 || strcmp(argv[1],"corotTruss") == 0) {
00277 int eleArgStart = 1;
00278 int result = TclModelBuilder_addTruss(clientData, interp, argc, argv,
00279 theTclDomain, theTclBuilder, eleArgStart);
00280 return result;
00281 } else if (strcmp(argv[1],"elasticBeamColumn") == 0) {
00282 int eleArgStart = 1;
00283 int result = TclModelBuilder_addElasticBeam(clientData, interp, argc, argv,
00284 theTclDomain, theTclBuilder, eleArgStart);
00285 return result;
00286 } else if (strcmp(argv[1],"nonlinearBeamColumn") == 0) {
00287 int result = TclModelBuilder_addNLBeamColumn(clientData, interp, argc, argv,
00288 theTclDomain, theTclBuilder);
00289 return result;
00290 } else if (strcmp(argv[1],"dispBeamColumn") == 0) {
00291 int result = TclModelBuilder_addDispBeamColumn(clientData, interp, argc, argv,
00292 theTclDomain, theTclBuilder);
00293 return result;
00294 } else if (strcmp(argv[1],"forceBeamColumn") == 0) {
00295 int result = TclModelBuilder_addForceBeamColumn(clientData, interp, argc, argv,
00296 theTclDomain, theTclBuilder);
00297 return result;
00298 } else if (strstr(argv[1],"beamWithHinges") != 0) {
00299 int result = TclModelBuilder_addBeamWithHinges(clientData, interp, argc, argv,
00300 theTclDomain, theTclBuilder);
00301 return result;
00302 } else if ((strcmp(argv[1],"quad") == 0) || (strcmp(argv[1],"stdQuad") == 0)) {
00303 int result = TclModelBuilder_addFourNodeQuad(clientData, interp, argc, argv,
00304 theTclDomain, theTclBuilder);
00305 return result;
00306 } else if (strcmp(argv[1],"enhancedQuad") == 0) {
00307 int result = TclModelBuilder_addEnhancedQuad(clientData, interp, argc, argv,
00308 theTclDomain, theTclBuilder);
00309 return result;
00310 } else if ((strcmp(argv[1],"bbarQuad") == 0) || (strcmp(argv[1],"mixedQuad") == 0)) {
00311 int result = TclModelBuilder_addConstantPressureVolumeQuad(clientData, interp,
00312 argc, argv,
00313 theTclDomain,
00314 theTclBuilder);
00315 return result;
00316 } else if ((strcmp(argv[1],"nineNodeMixedQuad") == 0)
00317 || (strcmp(argv[1],"nineNodeQuad") == 0)) {
00318 int result = TclModelBuilder_addNineNodeMixedQuad(clientData, interp,
00319 argc, argv,
00320 theTclDomain,
00321 theTclBuilder);
00322 return result;
00323 } else if (strcmp(argv[1],"quadUP") == 0) {
00324 int result = TclModelBuilder_addFourNodeQuadUP(clientData, interp, argc, argv,
00325 theTclDomain, theTclBuilder);
00326 return result;
00327 } else if (strcmp(argv[1],"brickUP") == 0) {
00328 int result = TclModelBuilder_addBrickUP(clientData, interp, argc, argv,
00329 theTclDomain, theTclBuilder);
00330 return result;
00331 } else if (strcmp(argv[1],"9_4_QuadUP") == 0) {
00332 int result = TclModelBuilder_addNineFourNodeQuadUP(clientData, interp, argc, argv,
00333 theTclDomain, theTclBuilder);
00334 return result;
00335 } else if (strcmp(argv[1],"20_8_BrickUP") == 0) {
00336 int result = TclModelBuilder_addTwentyEightNodeBrickUP(clientData, interp, argc, argv,
00337 theTclDomain, theTclBuilder);
00338 return result;
00339 } else if (strcmp(argv[1],"20NodeBrick") == 0) {
00340 int result = TclModelBuilder_addTwentyNodeBrick(clientData, interp, argc, argv,
00341 theTclDomain, theTclBuilder);
00342 return result;
00343 } else if ((strcmp(argv[1],"shell") == 0) || (strcmp(argv[1],"shellMITC4") == 0) ||
00344 (strcmp(argv[1],"Shell") == 0) || (strcmp(argv[1],"ShellMITC4") == 0)) {
00345
00346
00347 int eleArgStart = 1;
00348 int result = TclModelBuilder_addShellMITC4(clientData, interp,
00349 argc, argv,
00350 theTclDomain,
00351 theTclBuilder,
00352 eleArgStart);
00353 return result;
00354 }
00355
00356
00357 else if (strcmp(argv[1],"Brick8N") == 0) {
00358
00359 int eleArgStart = 1;
00360 int result = TclModelBuilder_addEightNodeBrick(clientData,
00361 interp,
00362 argc,
00363 argv,
00364 theTclDomain,
00365 theTclBuilder,
00366 eleArgStart);
00367 return result;
00368 }
00369
00370
00371 else if (strcmp(argv[1],"Brick20N") == 0) {
00372 int eleArgStart = 1;
00373 int result = TclModelBuilder_addTwentyNodeBrick(clientData,
00374 interp,
00375 argc,
00376 argv,
00377 theTclDomain,
00378 theTclBuilder,
00379 eleArgStart);
00380 return result;
00381 }
00382
00383
00384 else if (strcmp(argv[1],"Brick27N") == 0)
00385 {
00386 int eleArgStart = 1;
00387 int result = TclModelBuilder_addTwentySevenNodeBrick(clientData,
00388 interp,
00389 argc,
00390 argv,
00391 theTclDomain,
00392 theTclBuilder,
00393 eleArgStart);
00394 return result;
00395 }
00396
00397
00398
00399 else if (strcmp(argv[1],"TLFD20nBrick") == 0) {
00400 int eleArgStart = 1;
00401 int result = TclModelBuilder_addTLFD20nBrick(clientData,
00402 interp,
00403 argc,
00404 argv,
00405 theTclDomain,
00406 theTclBuilder,
00407 eleArgStart);
00408 return result;
00409 }
00410
00411
00412 else if (strcmp(argv[1],"TLFD8nBrick") == 0) {
00413 int eleArgStart = 1;
00414 int result = TclModelBuilder_addTLFD8nBrick(clientData,
00415 interp,
00416 argc,
00417 argv,
00418 theTclDomain,
00419 theTclBuilder,
00420 eleArgStart);
00421 return result;
00422 }
00423
00424
00425 else if (strcmp(argv[1],"Brick8N_u_p_U") == 0) {
00426 int eleArgStart = 1;
00427 int result = TclModelBuilder_addEightNodeBrick_u_p_U(clientData,
00428 interp,
00429 argc,
00430 argv,
00431 theTclDomain,
00432 theTclBuilder,
00433 eleArgStart);
00434 return result;
00435 }
00436
00437 else if (strcmp(argv[1],"Brick20N_u_p_U") == 0) {
00438 int eleArgStart = 1;
00439 int result = TclModelBuilder_addTwentyNodeBrick_u_p_U(clientData,
00440 interp,
00441 argc,
00442 argv,
00443 theTclDomain,
00444 theTclBuilder,
00445 eleArgStart);
00446 return result;
00447 }
00448
00449
00450 else if (strcmp(argv[1],"EightNode_LDBrick_u_p") == 0) {
00451 int eleArgStart = 1;
00452 int result = TclModelBuilder_addEightNode_LDBrick_u_p(clientData,
00453 interp,
00454 argc,
00455 argv,
00456 theTclDomain,
00457 theTclBuilder,
00458 eleArgStart);
00459 return result;
00460 }
00461
00462
00463 else if (strcmp(argv[1],"EightNode_Brick_u_p") == 0) {
00464 int eleArgStart = 1;
00465 int result = TclModelBuilder_addEightNode_Brick_u_p(clientData,
00466 interp,
00467 argc,
00468 argv,
00469 theTclDomain,
00470 theTclBuilder,
00471 eleArgStart);
00472 return result;
00473 }
00474
00475
00476 else if (strcmp(argv[1],"stdBrick") == 0) {
00477 int eleArgStart = 1;
00478 int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
00479 theTclDomain, theTclBuilder, eleArgStart);
00480 return result;
00481 } else if (strcmp(argv[1],"bbarBrick") == 0) {
00482 int eleArgStart = 1;
00483 int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
00484 theTclDomain, theTclBuilder, eleArgStart);
00485 return result;
00486 } else if (strcmp(argv[1],"flBrick") == 0) {
00487 int eleArgStart = 1;
00488 int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
00489 theTclDomain, theTclBuilder, eleArgStart);
00490 return result;
00491 } else if (strcmp(argv[1],"zeroLength") == 0) {
00492 int result = TclModelBuilder_addZeroLength(clientData, interp, argc, argv,
00493 theTclDomain, theTclBuilder);
00494 return result;
00495 } else if (strcmp(argv[1],"zeroLengthSection") == 0) {
00496 int result = TclModelBuilder_addZeroLengthSection(clientData, interp, argc, argv,
00497 theTclDomain, theTclBuilder);
00498 return result;
00499 } else if (strcmp(argv[1],"zeroLengthND") == 0) {
00500 opserr << "element zeroLengthND is no longer available, please use "
00501 << "the zeroLengthSection element instead" << endln;
00502 return TCL_ERROR;
00503 } else if ((strcmp(argv[1],"Joint2D") == 0) ||
00504 (strcmp(argv[1],"Joint2d") == 0)) {
00505 int result = TclModelBuilder_addJoint2D(clientData, interp, argc, argv,
00506 theTclDomain, theTclBuilder);
00507 return result;
00508 } else if ((strcmp(argv[1],"Joint3D") == 0) ||
00509 (strcmp(argv[1],"Joint3d") == 0)) {
00510 int result = TclModelBuilder_addJoint3D(clientData, interp, argc, argv,
00511 theTclDomain, theTclBuilder);
00512 return result;
00513 } else if ((strcmp(argv[1], "inelastic2dYS01")== 0) ||
00514 (strcmp(argv[1], "inelastic2dYS02")== 0) ||
00515 (strcmp(argv[1], "inelastic2dYS03")== 0) ||
00516 (strcmp(argv[1], "inelastic2dYS04")== 0) ||
00517 (strcmp(argv[1], "inelastic2dYS05")== 0)) {
00518 int result = TclModelBuilder_addElement2dYS (clientData, interp,
00519 argc, argv,
00520 theTclDomain, theTclBuilder);
00521 return result;
00522 } else if ((strcmp(argv[1],"element2dGNL") == 0) ||
00523 (strcmp(argv[1],"elastic2dGNL") == 0)) {
00524 int result = TclModelBuilder_addElastic2dGNL(clientData, interp, argc, argv,
00525 theTclDomain, theTclBuilder);
00526 return result;
00527 }
00528
00529 else if (strcmp(argv[1],"beamColumnJoint") == 0) {
00530 int eleArgStart = 1;
00531 int result = TclModelBuilder_addBeamColumnJoint(clientData, interp,
00532 argc, argv, theTclDomain,
00533 theTclBuilder, eleArgStart);
00534 return result;
00535 }
00536
00537 else {
00538
00539
00540
00541
00542
00543
00544
00545 ElementPackageCommand *eleCommands = theElementPackageCommands;
00546 bool found = false;
00547 while (eleCommands != NULL && found == false) {
00548 if (strcmp(argv[1], eleCommands->funcName) == 0) {
00549 int result = (*(eleCommands->funcPtr))(clientData, interp, argc, argv, theTclDomain, theTclBuilder);
00550 return result;
00551 } else
00552 eleCommands = eleCommands->next;
00553 }
00554
00555
00556 void *libHandle;
00557 int (*funcPtr)(ClientData clientData, Tcl_Interp *interp, int argc,
00558 TCL_Char **argv, Domain*, TclModelBuilder *);
00559 int eleNameLength = strlen(argv[1]);
00560 char *tclFuncName = new char[eleNameLength+12];
00561 strcpy(tclFuncName, "TclCommand_");
00562 strcpy(&tclFuncName[11], argv[1]);
00563
00564 int res = getLibraryFunction(argv[1], tclFuncName, &libHandle, (void **)&funcPtr);
00565
00566 delete [] tclFuncName;
00567
00568 if (res == 0) {
00569
00570 char *eleName = new char[eleNameLength+1];
00571 strcpy(eleName, argv[1]);
00572 ElementPackageCommand *theEleCommand = new ElementPackageCommand;
00573 theEleCommand->funcPtr = funcPtr;
00574 theEleCommand->funcName = eleName;
00575 theEleCommand->next = theElementPackageCommands;
00576 theElementPackageCommands = theEleCommand;
00577
00578 int result = (*funcPtr)(clientData, interp,
00579 argc, argv,
00580 theTclDomain, theTclBuilder);
00581 return result;
00582 }
00583
00584
00585 opserr << "WARNING unknown element type: " << argv[1] << " :check the manual\n";
00586 return TCL_ERROR;
00587 }
00588 }