Subversion Repositories OpenSees

Rev

Rev 2995 | Rev 3130 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 fmk 1
/* ****************************************************************** **
2
**    OpenSees - Open System for Earthquake Engineering Simulation    **
3
**          Pacific Earthquake Engineering Research Center            **
4
**                                                                    **
5
**                                                                    **
6
** (C) Copyright 1999, The Regents of the University of California    **
7
** All Rights Reserved.                                               **
8
**                                                                    **
9
** Commercial use of this program without express permission of the   **
10
** University of California, Berkeley, is strictly prohibited.  See   **
11
** file 'COPYRIGHT'  in main directory for information on usage and   **
12
** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
13
**                                                                    **
14
** Developed by:                                                      **
15
**   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
16
**   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
17
**   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
18
**                                                                    **
19
** ****************************************************************** */
20
 
3092 mhscott 21
// $Revision: 1.43 $
22
// $Date: 2007-10-13 20:43:57 $
2 fmk 23
// $Source: /usr/local/cvs/OpenSees/SRC/element/TclElementCommands.cpp,v $
24
 
25
// Written: fmk 
26
// Created: 07/99
27
// Revision: A
28
//
29
// Description: This file contains the implementation of the TclElementCommands.
30
// The file contains the routine TclElementCommands which is invoked by the
31
// TclModelBuilder.
32
//
33
// What: "@(#) TclModelBuilder.C, revA"
34
 
35
#include <stdlib.h>
36
#include <string.h>
1271 fmk 37
#include <OPS_Stream.h>
2 fmk 38
#include <Domain.h>
39
 
887 jeremic 40
#include <ElasticBeam2d.h>
41
#include <ElasticBeam3d.h>
42
 
43
//Zhaohui Yang (UCD)
44
#include <EightNodeBrick.h>
45
#include <TwentyNodeBrick.h>
46
 
47
#include <CrdTransf2d.h>
48
#include <CrdTransf3d.h>
49
 
2 fmk 50
#include <TclModelBuilder.h>
2046 fmk 51
#include <packages.h>
2 fmk 52
 
53
//
54
// SOME STATIC POINTERS USED IN THE FUNCTIONS INVOKED BY THE INTERPRETER
55
//
56
 
2046 fmk 57
 
58
typedef struct elementPackageCommand {
59
  char *funcName;
60
  int (*funcPtr)(ClientData clientData, Tcl_Interp *interp,  int argc,
61
                 TCL_Char **argv, Domain*, TclModelBuilder *);
62
  struct elementPackageCommand *next;
63
} ElementPackageCommand;
64
 
65
static ElementPackageCommand *theElementPackageCommands = NULL;
66
 
1321 fmk 67
extern void printCommand(int argc, TCL_Char **argv);
2 fmk 68
 
69
// 
70
// THE PROTOTYPES OF THE FUNCTIONS INVOKED BY THE INTERPRETER
71
//
72
 
73
extern int
74
TclModelBuilder_addFeapTruss(ClientData clientData, Tcl_Interp *interp,  int argc,
1321 fmk 75
                             TCL_Char **argv, Domain*, TclModelBuilder *, int argStart);
2 fmk 76
 
77
extern int
78
TclModelBuilder_addTruss(ClientData clientData, Tcl_Interp *interp,  int argc,
1321 fmk 79
                         TCL_Char **argv, Domain*, TclModelBuilder *, int argStart);
317 fmk 80
 
579 mhscott 81
extern int
2 fmk 82
TclModelBuilder_addElasticBeam(ClientData clientData, Tcl_Interp *interp,  int argc,
1321 fmk 83
                               TCL_Char **argv, Domain*, TclModelBuilder *, int argStart);
2 fmk 84
 
317 fmk 85
extern int
86
TclModelBuilder_addBrick(ClientData clientData, Tcl_Interp *interp,
1321 fmk 87
                         int argc, TCL_Char **argv, Domain*,
317 fmk 88
                         TclModelBuilder *, int argStart);
89
 
90
extern int
91
TclModelBuilder_addShellMITC4(ClientData clientData, Tcl_Interp *interp,
1321 fmk 92
                              int argc, TCL_Char **argv, Domain*,
317 fmk 93
                              TclModelBuilder *, int argStart);
94
 
95
extern int
1321 fmk 96
TclModelBuilder_addConstantPressureVolumeQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
317 fmk 97
                                              Domain*, TclModelBuilder *);
98
 
99
extern int
1321 fmk 100
TclModelBuilder_addJoint2D(ClientData, Tcl_Interp *, int, TCL_Char **,
101
                           Domain*, TclModelBuilder *);
1068 fmk 102
 
103
extern int
1633 fmk 104
TclModelBuilder_addJoint3D(ClientData, Tcl_Interp *, int, TCL_Char **,
105
                           Domain*, TclModelBuilder *);
106
 
107
extern int
1321 fmk 108
TclModelBuilder_addEnhancedQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
317 fmk 109
                                Domain*, TclModelBuilder *);
110
 
576 fmk 111
extern int
1321 fmk 112
TclModelBuilder_addNineNodeMixedQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
576 fmk 113
                                     Domain*, TclModelBuilder *);
317 fmk 114
 
576 fmk 115
 
2 fmk 116
// GLF                         
117
extern int
1321 fmk 118
TclModelBuilder_addZeroLength(ClientData, Tcl_Interp *, int, TCL_Char **,
2 fmk 119
                              Domain*, TclModelBuilder *);
120
 
36 mhscott 121
// MHS                         
122
extern int
1321 fmk 123
TclModelBuilder_addZeroLengthSection(ClientData, Tcl_Interp *, int, TCL_Char **,
124
                                     Domain*, TclModelBuilder *);
36 mhscott 125
 
126
// MHS
1068 fmk 127
extern int
1321 fmk 128
TclModelBuilder_addZeroLengthND(ClientData, Tcl_Interp *, int, TCL_Char **,
129
                                Domain*, TclModelBuilder *);
36 mhscott 130
 
131
 
2 fmk 132
// MHS
133
extern int
1321 fmk 134
TclModelBuilder_addBeamWithHinges(ClientData, Tcl_Interp *, int, TCL_Char **,
2 fmk 135
                                  Domain*, TclModelBuilder *);
136
extern int
1321 fmk 137
TclModelBuilder_addFourNodeQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
2 fmk 138
                                Domain*, TclModelBuilder *);
3092 mhscott 139
 
317 fmk 140
extern int
2995 fmk 141
TclModelBuilder_addDispBeamColumnInt(ClientData, Tcl_Interp *, int, TCL_Char **,
142
                                  Domain*, TclModelBuilder *);
143
 
144
extern int
1321 fmk 145
TclModelBuilder_addForceBeamColumn(ClientData, Tcl_Interp *, int, TCL_Char **,
1225 mhscott 146
                                   Domain*, TclModelBuilder *);
317 fmk 147
 
1481 mhscott 148
// NM
149
extern int
150
TclModelBuilder_addBeamColumnJoint(ClientData, Tcl_Interp *, int, TCL_Char **,
151
                                   Domain*, TclModelBuilder *, int);
259 fmk 152
 
567 jeremic 153
//Boris Jeremic & Zhaohui
771 jeremic 154
extern int TclModelBuilder_addEightNodeBrick(ClientData,
155
                                             Tcl_Interp *,  
860 fmk 156
                                             int,
1321 fmk 157
                                             TCL_Char **,
860 fmk 158
                                             Domain*,
159
                                             TclModelBuilder *,
160
                                             int);
567 jeremic 161
//Boris Jeremic & Zhaohui
771 jeremic 162
extern int TclModelBuilder_addTwentyNodeBrick(ClientData,
163
                                              Tcl_Interp *,  
860 fmk 164
                                              int,
1321 fmk 165
                                              TCL_Char **,
860 fmk 166
                                              Domain*,
167
                                              TclModelBuilder *,
168
                                              int);
162 jeremic 169
 
771 jeremic 170
//Boris Jeremic & Xiaoyan 01/07/2002
171
extern int TclModelBuilder_addEightNodeBrick_u_p_U(ClientData,
172
                                                   Tcl_Interp *,  
860 fmk 173
                                                   int,
1321 fmk 174
                                                   TCL_Char **,
860 fmk 175
                                                   Domain*,
176
                                                   TclModelBuilder *,
177
                                                   int);
771 jeremic 178
//Boris Jeremic & Xiaoyan 01/07/2002
179
extern int TclModelBuilder_addTwentyNodeBrick_u_p_U(ClientData,
180
                                                    Tcl_Interp *,  
860 fmk 181
                                                    int,
1321 fmk 182
                                                    TCL_Char **,
860 fmk 183
                                                    Domain*,
184
                                                    TclModelBuilder *,
185
                                                    int);
162 jeremic 186
 
1605 jeremic 187
//Boris Jeremic & Guanzhou Jie 10/30/2003
188
extern int TclModelBuilder_addTwentySevenNodeBrick(ClientData,
189
                                                   Tcl_Interp *,
190
                                                   int,
191
                                                   TCL_Char **,
192
                                                   Domain*,
193
                                                   TclModelBuilder *,
194
                                                   int);
195
 
1622 jeremic 196
 
197
 
1119 fmk 198
//Rohit Kraul
199
extern int
1321 fmk 200
TclModelBuilder_addElastic2dGNL(ClientData, Tcl_Interp *, int, TCL_Char **,
201
                                Domain *,TclModelBuilder *);
1119 fmk 202
extern int
1321 fmk 203
TclModelBuilder_addElement2dYS(ClientData, Tcl_Interp *, int, TCL_Char **,
204
                               Domain *,TclModelBuilder *);
771 jeremic 205
 
1517 fmk 206
// Zhaohui Yang
1622 jeremic 207
extern int
1535 mhscott 208
TclModelBuilder_addFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
1517 fmk 209
                                Domain*, TclModelBuilder *);
1119 fmk 210
 
1849 fmk 211
// Zhaohui Yang
212
extern int
213
TclModelBuilder_addBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
214
                                Domain*, TclModelBuilder *);
215
 
216
// Zhaohui Yang
217
extern int
218
TclModelBuilder_addNineFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
219
                                Domain*, TclModelBuilder *);
220
// Jinchi Lu
221
extern int
222
TclModelBuilder_addTwentyEightNodeBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
223
                                Domain*, TclModelBuilder *);
224
// Jinchi Lu
225
extern int
226
TclModelBuilder_addTwentyNodeBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
227
                                Domain*, TclModelBuilder *);
228
 
1622 jeremic 229
// Boris Jeremic and Zhao Cheng
230
extern int
231
TclModelBuilder_addTLFD20nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
232
                                Domain*, TclModelBuilder *, int);
1517 fmk 233
 
2486 fmk 234
// Boris Jeremic and Zhao Cheng
235
extern int
236
TclModelBuilder_addTLFD8nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
237
                                Domain*, TclModelBuilder *, int);
238
 
239
 
240
// Boris Jeremic and Zhao Cheng
241
extern int
242
TclModelBuilder_addEightNode_LDBrick_u_p(ClientData, Tcl_Interp *, int, TCL_Char **,
243
                                Domain*, TclModelBuilder *, int);
244
 
245
// Boris Jeremic and Zhao Cheng
246
extern int
247
TclModelBuilder_addEightNode_Brick_u_p(ClientData, Tcl_Interp *, int, TCL_Char **,
248
                                Domain*, TclModelBuilder *, int);
249
 
2 fmk 250
int
251
TclModelBuilderElementCommand(ClientData clientData, Tcl_Interp *interp,
1321 fmk 252
                              int argc, TCL_Char **argv,
2 fmk 253
                              Domain *theTclDomain, TclModelBuilder *theTclBuilder)
254
{
255
  // ensure the destructor has not been called - 
256
  if (theTclBuilder == 0) {
1271 fmk 257
    opserr << "WARNING builder has been destroyed\n";    
2 fmk 258
    return TCL_ERROR;
259
  }
260
 
261
  // check at least two arguments so don't segemnt fault on strcmp  
262
  if (argc < 2) {
1271 fmk 263
    opserr << "WARNING need to specify an element type\n";
1399 fmk 264
    opserr << "Want: element eleType <specific element args> .. see manual for valid eleTypes & arguments\n";
2 fmk 265
    return TCL_ERROR;
266
  }
267
 
268
  if (strcmp(argv[1],"fTruss") == 0) {
269
    int eleArgStart = 1;
270
    int result = TclModelBuilder_addFeapTruss(clientData, interp, argc, argv,
271
                                              theTclDomain, theTclBuilder, eleArgStart);
272
    return result;
360 mhscott 273
  } else if (strcmp(argv[1],"truss") == 0 || strcmp(argv[1],"corotTruss") == 0) {
2 fmk 274
    int eleArgStart = 1;
275
    int result = TclModelBuilder_addTruss(clientData, interp, argc, argv,
1399 fmk 276
                                          theTclDomain, theTclBuilder, eleArgStart);
2 fmk 277
    return result;
317 fmk 278
  } else if (strcmp(argv[1],"elasticBeamColumn") == 0) {
2 fmk 279
    int eleArgStart = 1;
280
    int result = TclModelBuilder_addElasticBeam(clientData, interp, argc, argv,
1399 fmk 281
                                                theTclDomain, theTclBuilder, eleArgStart);    
2 fmk 282
    return result;
3092 mhscott 283
  }
284
  /*
285
else if (strcmp(argv[1],"nonlinearBeamColumn") == 0) {
1422 mhscott 286
    int result = TclModelBuilder_addNLBeamColumn(clientData, interp, argc, argv,
287
                                                 theTclDomain, theTclBuilder);
2 fmk 288
    return result;
317 fmk 289
  } else if (strcmp(argv[1],"dispBeamColumn") == 0) {
1399 fmk 290
    int result = TclModelBuilder_addDispBeamColumn(clientData, interp, argc, argv,
291
                                                   theTclDomain, theTclBuilder);
317 fmk 292
    return result;
2995 fmk 293
 
3092 mhscott 294
  }
295
  */
296
  else if (strcmp(argv[1],"dispBeamColumnInt") == 0) {
2995 fmk 297
    int result = TclModelBuilder_addDispBeamColumnInt(clientData, interp, argc, argv,
298
                                                   theTclDomain, theTclBuilder);
299
    return result;
300
 
3092 mhscott 301
  } else if (strcmp(argv[1],"forceBeamColumn") == 0 || strcmp(argv[1],"dispBeamColumn") == 0 || strcmp(argv[1],"elasticForceBeamColumn") == 0 || strcmp(argv[1],"nonlinearBeamColumn") == 0) {
1399 fmk 302
    int result = TclModelBuilder_addForceBeamColumn(clientData, interp, argc, argv,
303
                                                    theTclDomain, theTclBuilder);
1225 mhscott 304
    return result;
2434 mhscott 305
  } else if (strstr(argv[1],"beamWithHinges") != 0) {
2 fmk 306
          int result = TclModelBuilder_addBeamWithHinges(clientData, interp, argc, argv,
307
                                                 theTclDomain, theTclBuilder);
308
    return result;
1509 fmk 309
  } else if ((strcmp(argv[1],"quad") == 0) || (strcmp(argv[1],"stdQuad") == 0)) {
1399 fmk 310
    int result = TclModelBuilder_addFourNodeQuad(clientData, interp, argc, argv,
311
                                                 theTclDomain, theTclBuilder);
2 fmk 312
          return result;
317 fmk 313
  } else if (strcmp(argv[1],"enhancedQuad") == 0) {
314
    int result = TclModelBuilder_addEnhancedQuad(clientData, interp, argc, argv,
315
                                                 theTclDomain, theTclBuilder);
316
    return result;
317
  } else if ((strcmp(argv[1],"bbarQuad") == 0) || (strcmp(argv[1],"mixedQuad") == 0)) {
318
    int result = TclModelBuilder_addConstantPressureVolumeQuad(clientData, interp,
319
                                                               argc, argv,
320
                                                               theTclDomain,
321
                                                               theTclBuilder);
322
    return result;
576 fmk 323
  } else if ((strcmp(argv[1],"nineNodeMixedQuad") == 0)
324
             || (strcmp(argv[1],"nineNodeQuad") == 0)) {
325
    int result = TclModelBuilder_addNineNodeMixedQuad(clientData, interp,
326
                                                      argc, argv,
327
                                                      theTclDomain,
328
                                                      theTclBuilder);
329
    return result;
1517 fmk 330
  } else if (strcmp(argv[1],"quadUP") == 0) {
331
          int result = TclModelBuilder_addFourNodeQuadUP(clientData, interp, argc, argv,
332
                                                       theTclDomain, theTclBuilder);
333
          return result;
1849 fmk 334
  } else if (strcmp(argv[1],"brickUP") == 0) {
335
          int result = TclModelBuilder_addBrickUP(clientData, interp, argc, argv,
336
                                                       theTclDomain, theTclBuilder);
337
          return result;
338
  } else if (strcmp(argv[1],"9_4_QuadUP") == 0) {
339
          int result = TclModelBuilder_addNineFourNodeQuadUP(clientData, interp, argc, argv,
340
                                                       theTclDomain, theTclBuilder);
341
          return result;
342
  } else if (strcmp(argv[1],"20_8_BrickUP") == 0) {
343
          int result = TclModelBuilder_addTwentyEightNodeBrickUP(clientData, interp, argc, argv,
344
                                                       theTclDomain, theTclBuilder);
345
          return result;
346
  } else if (strcmp(argv[1],"20NodeBrick") == 0) {
347
          int result = TclModelBuilder_addTwentyNodeBrick(clientData, interp, argc, argv,
348
                                                       theTclDomain, theTclBuilder);
349
          return result;
1271 fmk 350
  } else if ((strcmp(argv[1],"shell") == 0) || (strcmp(argv[1],"shellMITC4") == 0) ||
351
             (strcmp(argv[1],"Shell") == 0) || (strcmp(argv[1],"ShellMITC4") == 0)) {
352
 
353
 
317 fmk 354
    int eleArgStart = 1;
355
    int result = TclModelBuilder_addShellMITC4(clientData, interp,
356
                                               argc, argv,
357
                                               theTclDomain,
358
                                               theTclBuilder,
359
                                               eleArgStart);
360
    return result;
1622 jeremic 361
  }
860 fmk 362
 
363
  //Boris Jeremic & Zhaohui
364
  else if (strcmp(argv[1],"Brick8N") == 0) {
365
 
366
    int eleArgStart = 1;
1622 jeremic 367
    int result = TclModelBuilder_addEightNodeBrick(clientData,
368
                                                   interp,
369
                                                   argc,
860 fmk 370
                                                   argv,
1622 jeremic 371
                                                   theTclDomain,
372
                                                   theTclBuilder,
860 fmk 373
                                                   eleArgStart);
374
    return result;
1622 jeremic 375
  }
860 fmk 376
 
377
  //Boris Jeremic & Zhaohui
378
  else if (strcmp(argv[1],"Brick20N") == 0) {
379
    int eleArgStart = 1;
380
    int result = TclModelBuilder_addTwentyNodeBrick(clientData,
381
                                                    interp,
382
                                                    argc,
383
                                                    argv,
384
                                                    theTclDomain,
385
                                                    theTclBuilder,
386
                                                    eleArgStart);
387
    return result;
771 jeremic 388
  }
860 fmk 389
 
1605 jeremic 390
  //Boris Jeremic & Guanzhou Jie
391
  else if (strcmp(argv[1],"Brick27N") == 0)
392
    {
393
      int eleArgStart = 1;
394
      int result = TclModelBuilder_addTwentySevenNodeBrick(clientData,
395
                                                           interp,
396
                                                           argc,
397
                                                           argv,
398
                                                           theTclDomain,
399
                                                           theTclBuilder,
400
                                                           eleArgStart);
401
                                                           return result;
402
    }
403
 
404
 
1622 jeremic 405
  // Boris jeremic & Zhao Cheng
406
  else if (strcmp(argv[1],"TLFD20nBrick") == 0) {
407
    int eleArgStart = 1;
408
    int result = TclModelBuilder_addTLFD20nBrick(clientData,
409
                                                   interp,
410
                                                   argc,
411
                                                   argv,
412
                                                   theTclDomain,
413
                                                   theTclBuilder,
414
                                                   eleArgStart);
415
    return result;
416
  }
417
 
2486 fmk 418
  // Boris jeremic & Zhao Cheng
419
  else if (strcmp(argv[1],"TLFD8nBrick") == 0) {
420
    int eleArgStart = 1;
421
    int result = TclModelBuilder_addTLFD8nBrick(clientData,
422
                                                   interp,
423
                                                   argc,
424
                                                   argv,
425
                                                   theTclDomain,
426
                                                   theTclBuilder,
427
                                                   eleArgStart);
428
    return result;
429
  }
430
 
860 fmk 431
  //Boris Jeremic & Zhaohui  
432
  else if (strcmp(argv[1],"Brick8N_u_p_U") == 0) {
433
    int eleArgStart = 1;
434
    int result = TclModelBuilder_addEightNodeBrick_u_p_U(clientData,
435
                                                         interp,
436
                                                         argc,
437
                                                         argv,
438
                                                         theTclDomain,
439
                                                         theTclBuilder,
440
                                                         eleArgStart);
441
    return result;
442
  }
443
  //Boris Jeremic & Zhaohui  
444
  else if (strcmp(argv[1],"Brick20N_u_p_U") == 0) {
445
    int eleArgStart = 1;
446
    int result = TclModelBuilder_addTwentyNodeBrick_u_p_U(clientData,
447
                                                          interp,
448
                                                          argc,
449
                                                          argv,
450
                                                          theTclDomain,
451
                                                          theTclBuilder,
452
                                                          eleArgStart);
453
    return result;
454
  }
2486 fmk 455
 
456
  // Boris Jeremic & Zhao Cheng
457
  else if (strcmp(argv[1],"EightNode_LDBrick_u_p") == 0) {
458
    int eleArgStart = 1;
459
    int result = TclModelBuilder_addEightNode_LDBrick_u_p(clientData,
460
                                                   interp,
461
                                                   argc,
462
                                                   argv,
463
                                                   theTclDomain,
464
                                                   theTclBuilder,
465
                                                   eleArgStart);
466
    return result;
467
  }
468
 
469
  // Boris Jeremic & Zhao Cheng
470
  else if (strcmp(argv[1],"EightNode_Brick_u_p") == 0) {
471
    int eleArgStart = 1;
472
    int result = TclModelBuilder_addEightNode_Brick_u_p(clientData,
473
                                                   interp,
474
                                                   argc,
475
                                                   argv,
476
                                                   theTclDomain,
477
                                                   theTclBuilder,
478
                                                   eleArgStart);
479
    return result;
480
  }
481
 
482
 
860 fmk 483
  else if (strcmp(argv[1],"stdBrick") == 0) {
484
    int eleArgStart = 1;
485
    int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
2266 fmk 486
                                          theTclDomain, theTclBuilder, eleArgStart);
860 fmk 487
    return result;
317 fmk 488
  } else if (strcmp(argv[1],"bbarBrick") == 0) {
860 fmk 489
    int eleArgStart = 1;
2266 fmk 490
    int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
491
                                          theTclDomain, theTclBuilder, eleArgStart);
860 fmk 492
    return result;
2266 fmk 493
  } else if (strcmp(argv[1],"flBrick") == 0) {
494
    int eleArgStart = 1;
495
    int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
496
                                          theTclDomain, theTclBuilder, eleArgStart);
497
    return result;
2 fmk 498
  } else if (strcmp(argv[1],"zeroLength") == 0) {
499
    int result = TclModelBuilder_addZeroLength(clientData, interp, argc, argv,
500
                                               theTclDomain, theTclBuilder);
501
    return result;
36 mhscott 502
  } else if (strcmp(argv[1],"zeroLengthSection") == 0) {
503
    int result = TclModelBuilder_addZeroLengthSection(clientData, interp, argc, argv,
504
                                               theTclDomain, theTclBuilder);
505
    return result;
1074 mhscott 506
  } else if (strcmp(argv[1],"zeroLengthND") == 0) {
1271 fmk 507
    opserr << "element zeroLengthND is no longer available, please use "
508
         << "the zeroLengthSection element instead" << endln;
1074 mhscott 509
    return TCL_ERROR;
1068 fmk 510
  } else if ((strcmp(argv[1],"Joint2D") == 0) ||
1633 fmk 511
             (strcmp(argv[1],"Joint2d") == 0)) {
1068 fmk 512
    int result = TclModelBuilder_addJoint2D(clientData, interp, argc, argv,
1633 fmk 513
                                            theTclDomain, theTclBuilder);
1068 fmk 514
    return result;
1633 fmk 515
  } else if ((strcmp(argv[1],"Joint3D") == 0) ||
516
             (strcmp(argv[1],"Joint3d") == 0)) {
517
    int result = TclModelBuilder_addJoint3D(clientData, interp, argc, argv,
518
                                            theTclDomain, theTclBuilder);
519
    return result;
1119 fmk 520
  } else if ((strcmp(argv[1], "inelastic2dYS01")== 0) ||
521
             (strcmp(argv[1], "inelastic2dYS02")== 0) ||
522
             (strcmp(argv[1], "inelastic2dYS03")== 0) ||
523
             (strcmp(argv[1], "inelastic2dYS04")== 0) ||
524
             (strcmp(argv[1], "inelastic2dYS05")== 0)) {
525
    int result = TclModelBuilder_addElement2dYS (clientData, interp,
526
                                                 argc, argv,
527
                                                 theTclDomain, theTclBuilder);
528
    return result;     
529
  } else if ((strcmp(argv[1],"element2dGNL") == 0) ||
530
             (strcmp(argv[1],"elastic2dGNL") == 0)) {
531
    int result = TclModelBuilder_addElastic2dGNL(clientData, interp, argc, argv,
532
                                                 theTclDomain, theTclBuilder);
533
    return result;
1481 mhscott 534
  }
2046 fmk 535
 
1481 mhscott 536
  else if (strcmp(argv[1],"beamColumnJoint") == 0) {
537
    int eleArgStart = 1;
538
    int result = TclModelBuilder_addBeamColumnJoint(clientData, interp,
539
                                                    argc, argv, theTclDomain,
540
                                                    theTclBuilder, eleArgStart);
541
    return result;
542
  }
2046 fmk 543
 
1481 mhscott 544
  else {
2046 fmk 545
 
546
    //
547
    // maybe element in a package
548
    //
549
 
550
    // try existing loaded packages
551
 
552
    ElementPackageCommand *eleCommands = theElementPackageCommands;
553
    bool found = false;
554
    while (eleCommands != NULL && found == false) {
555
      if (strcmp(argv[1], eleCommands->funcName) == 0) {
556
        int result = (*(eleCommands->funcPtr))(clientData, interp, argc, argv, theTclDomain, theTclBuilder);
557
        return result;
558
      } else
559
        eleCommands = eleCommands->next;
560
    }
561
 
562
    // load new package
563
    void *libHandle;
564
    int (*funcPtr)(ClientData clientData, Tcl_Interp *interp,  int argc,
565
                   TCL_Char **argv, Domain*, TclModelBuilder *);      
566
    int eleNameLength = strlen(argv[1]);
567
    char *tclFuncName = new char[eleNameLength+12];
568
    strcpy(tclFuncName, "TclCommand_");
569
    strcpy(&tclFuncName[11], argv[1]);    
570
 
571
    int res = getLibraryFunction(argv[1], tclFuncName, &libHandle, (void **)&funcPtr);
572
 
2087 fmk 573
    delete [] tclFuncName;
2046 fmk 574
 
2087 fmk 575
    if (res == 0) {
2046 fmk 576
 
2087 fmk 577
      char *eleName = new char[eleNameLength+1];
578
      strcpy(eleName, argv[1]);
579
      ElementPackageCommand *theEleCommand = new ElementPackageCommand;
580
      theEleCommand->funcPtr = funcPtr;
581
      theEleCommand->funcName = eleName;       
582
      theEleCommand->next = theElementPackageCommands;
583
      theElementPackageCommands = theEleCommand;
584
 
585
      int result = (*funcPtr)(clientData, interp,
586
                              argc, argv,
587
                              theTclDomain, theTclBuilder);    
588
      return result;
589
    }
590
 
1119 fmk 591
    // element type not recognized
2046 fmk 592
    opserr << "WARNING unknown element type: " <<  argv[1] << " :check the manual\n";
2 fmk 593
    return TCL_ERROR;
2046 fmk 594
  }    
2 fmk 595
}