TclElementCommands.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.41 $
00022 // $Date: 2006/08/11 17:19:24 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/element/TclElementCommands.cpp,v $
00024                                                                         
00025 // Written: fmk 
00026 // Created: 07/99
00027 // Revision: A
00028 //
00029 // Description: This file contains the implementation of the TclElementCommands.
00030 // The file contains the routine TclElementCommands which is invoked by the
00031 // TclModelBuilder.
00032 //
00033 // What: "@(#) TclModelBuilder.C, revA"
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 //Zhaohui Yang (UCD)
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 // SOME STATIC POINTERS USED IN THE FUNCTIONS INVOKED BY THE INTERPRETER
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 // THE PROTOTYPES OF THE FUNCTIONS INVOKED BY THE INTERPRETER
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 // GLF                         
00117 extern int 
00118 TclModelBuilder_addZeroLength(ClientData, Tcl_Interp *, int, TCL_Char **,
00119                               Domain*, TclModelBuilder *);
00120 
00121 // MHS                         
00122 extern int 
00123 TclModelBuilder_addZeroLengthSection(ClientData, Tcl_Interp *, int, TCL_Char **,
00124                                      Domain*, TclModelBuilder *);
00125 
00126 // MHS
00127 extern int 
00128 TclModelBuilder_addZeroLengthND(ClientData, Tcl_Interp *, int, TCL_Char **,
00129                                 Domain*, TclModelBuilder *);
00130 
00131 
00132 // REMO
00133 extern int 
00134 TclModelBuilder_addNLBeamColumn(ClientData, Tcl_Interp *, int, TCL_Char **,
00135                                 Domain*, TclModelBuilder *);
00136                         
00137 // MHS
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 // NM
00152 extern int
00153 TclModelBuilder_addBeamColumnJoint(ClientData, Tcl_Interp *, int, TCL_Char **,
00154                                    Domain*, TclModelBuilder *, int);
00155 
00156 //Boris Jeremic & Zhaohui
00157 extern int TclModelBuilder_addEightNodeBrick(ClientData, 
00158                                              Tcl_Interp *,  
00159                                              int, 
00160                                              TCL_Char **,
00161                                              Domain*, 
00162                                              TclModelBuilder *, 
00163                                              int);
00164 //Boris Jeremic & Zhaohui
00165 extern int TclModelBuilder_addTwentyNodeBrick(ClientData, 
00166                                               Tcl_Interp *,  
00167                                               int, 
00168                                               TCL_Char **,
00169                                               Domain*, 
00170                                               TclModelBuilder *, 
00171                                               int);
00172 
00173 //Boris Jeremic & Xiaoyan 01/07/2002
00174 extern int TclModelBuilder_addEightNodeBrick_u_p_U(ClientData, 
00175                                                    Tcl_Interp *,  
00176                                                    int, 
00177                                                    TCL_Char **,
00178                                                    Domain*, 
00179                                                    TclModelBuilder *, 
00180                                                    int);
00181 //Boris Jeremic & Xiaoyan 01/07/2002
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 //Boris Jeremic & Guanzhou Jie 10/30/2003
00191 extern int TclModelBuilder_addTwentySevenNodeBrick(ClientData, 
00192                                                    Tcl_Interp *, 
00193                                                    int, 
00194                                                    TCL_Char **, 
00195                                                    Domain*, 
00196                                                    TclModelBuilder *, 
00197                                                    int);
00198 
00199 
00200 
00201 //Rohit Kraul
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 // Zhaohui Yang
00210 extern int
00211 TclModelBuilder_addFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00212                                 Domain*, TclModelBuilder *);
00213 
00214 // Zhaohui Yang
00215 extern int
00216 TclModelBuilder_addBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00217                                 Domain*, TclModelBuilder *);
00218 
00219 // Zhaohui Yang
00220 extern int
00221 TclModelBuilder_addNineFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00222                                 Domain*, TclModelBuilder *);
00223 // Jinchi Lu
00224 extern int
00225 TclModelBuilder_addTwentyEightNodeBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
00226                                 Domain*, TclModelBuilder *);
00227 // Jinchi Lu
00228 extern int
00229 TclModelBuilder_addTwentyNodeBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
00230                                 Domain*, TclModelBuilder *);
00231 
00232 // Boris Jeremic and Zhao Cheng
00233 extern int
00234 TclModelBuilder_addTLFD20nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
00235                                 Domain*, TclModelBuilder *, int);
00236 
00237 // Boris Jeremic and Zhao Cheng
00238 extern int
00239 TclModelBuilder_addTLFD8nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
00240                                 Domain*, TclModelBuilder *, int);
00241                                 
00242                                 
00243 // Boris Jeremic and Zhao Cheng
00244 extern int
00245 TclModelBuilder_addEightNode_LDBrick_u_p(ClientData, Tcl_Interp *, int, TCL_Char **,
00246                                 Domain*, TclModelBuilder *, int);
00247 
00248 // Boris Jeremic and Zhao Cheng
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   // ensure the destructor has not been called - 
00259   if (theTclBuilder == 0) {
00260     opserr << "WARNING builder has been destroyed\n";    
00261     return TCL_ERROR;
00262   }
00263 
00264   // check at least two arguments so don't segemnt fault on strcmp  
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   //Boris Jeremic & Zhaohui
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   //Boris Jeremic & Zhaohui
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   //Boris Jeremic & Guanzhou Jie
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   // Boris jeremic & Zhao Cheng
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   // Boris jeremic & Zhao Cheng
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   //Boris Jeremic & Zhaohui  
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   //Boris Jeremic & Zhaohui  
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   // Boris Jeremic & Zhao Cheng
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   // Boris Jeremic & Zhao Cheng
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     // maybe element in a package
00541     //
00542 
00543     // try existing loaded packages
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     // load new package
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     // element type not recognized
00585     opserr << "WARNING unknown element type: " <<  argv[1] << " :check the manual\n";
00586     return TCL_ERROR;
00587   }    
00588 }

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