Subversion Repositories OpenSees

Rev

Rev 3248 | Rev 3728 | 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
 
3549 fmk 21
// $Revision: 1.46 $
22
// $Date: 2008-07-21 22:53:02 $
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
 
3248 fmk 121
 
3130 fmk 122
// add by Gang Wang for Contact Element
123
extern int
124
TclModelBuilder_addZeroLengthContact2D(ClientData, Tcl_Interp *, int, TCL_Char **,
125
                              Domain*, TclModelBuilder *);
126
 
127
// add by Gang Wang for Contact Element
128
extern int
129
TclModelBuilder_addZeroLengthContact3D(ClientData, Tcl_Interp *, int, TCL_Char **,
130
                              Domain*, TclModelBuilder *);
131
 
36 mhscott 132
// MHS                         
133
extern int
1321 fmk 134
TclModelBuilder_addZeroLengthSection(ClientData, Tcl_Interp *, int, TCL_Char **,
135
                                     Domain*, TclModelBuilder *);
36 mhscott 136
 
137
// MHS
1068 fmk 138
extern int
1321 fmk 139
TclModelBuilder_addZeroLengthND(ClientData, Tcl_Interp *, int, TCL_Char **,
140
                                Domain*, TclModelBuilder *);
36 mhscott 141
 
142
 
2 fmk 143
// MHS
144
extern int
1321 fmk 145
TclModelBuilder_addBeamWithHinges(ClientData, Tcl_Interp *, int, TCL_Char **,
2 fmk 146
                                  Domain*, TclModelBuilder *);
147
extern int
1321 fmk 148
TclModelBuilder_addFourNodeQuad(ClientData, Tcl_Interp *, int, TCL_Char **,
2 fmk 149
                                Domain*, TclModelBuilder *);
3092 mhscott 150
 
317 fmk 151
extern int
2995 fmk 152
TclModelBuilder_addDispBeamColumnInt(ClientData, Tcl_Interp *, int, TCL_Char **,
153
                                  Domain*, TclModelBuilder *);
154
 
155
extern int
1321 fmk 156
TclModelBuilder_addForceBeamColumn(ClientData, Tcl_Interp *, int, TCL_Char **,
1225 mhscott 157
                                   Domain*, TclModelBuilder *);
317 fmk 158
 
1481 mhscott 159
// NM
160
extern int
161
TclModelBuilder_addBeamColumnJoint(ClientData, Tcl_Interp *, int, TCL_Char **,
162
                                   Domain*, TclModelBuilder *, int);
259 fmk 163
 
567 jeremic 164
//Boris Jeremic & Zhaohui
771 jeremic 165
extern int TclModelBuilder_addEightNodeBrick(ClientData,
166
                                             Tcl_Interp *,  
860 fmk 167
                                             int,
1321 fmk 168
                                             TCL_Char **,
860 fmk 169
                                             Domain*,
170
                                             TclModelBuilder *,
171
                                             int);
567 jeremic 172
//Boris Jeremic & Zhaohui
771 jeremic 173
extern int TclModelBuilder_addTwentyNodeBrick(ClientData,
174
                                              Tcl_Interp *,  
860 fmk 175
                                              int,
1321 fmk 176
                                              TCL_Char **,
860 fmk 177
                                              Domain*,
178
                                              TclModelBuilder *,
179
                                              int);
162 jeremic 180
 
771 jeremic 181
//Boris Jeremic & Xiaoyan 01/07/2002
182
extern int TclModelBuilder_addEightNodeBrick_u_p_U(ClientData,
183
                                                   Tcl_Interp *,  
860 fmk 184
                                                   int,
1321 fmk 185
                                                   TCL_Char **,
860 fmk 186
                                                   Domain*,
187
                                                   TclModelBuilder *,
188
                                                   int);
771 jeremic 189
//Boris Jeremic & Xiaoyan 01/07/2002
190
extern int TclModelBuilder_addTwentyNodeBrick_u_p_U(ClientData,
191
                                                    Tcl_Interp *,  
860 fmk 192
                                                    int,
1321 fmk 193
                                                    TCL_Char **,
860 fmk 194
                                                    Domain*,
195
                                                    TclModelBuilder *,
196
                                                    int);
162 jeremic 197
 
1605 jeremic 198
//Boris Jeremic & Guanzhou Jie 10/30/2003
199
extern int TclModelBuilder_addTwentySevenNodeBrick(ClientData,
200
                                                   Tcl_Interp *,
201
                                                   int,
202
                                                   TCL_Char **,
203
                                                   Domain*,
204
                                                   TclModelBuilder *,
205
                                                   int);
206
 
1622 jeremic 207
 
3248 fmk 208
// Andreas Schellenberg
209
extern int
210
TclModelBuilder_addGenericClient(ClientData , Tcl_Interp *,  int, TCL_Char **,
211
                                 Domain*, TclModelBuilder *, int argStart);
1622 jeremic 212
 
3248 fmk 213
extern int
214
TclModelBuilder_addGenericCopy(ClientData , Tcl_Interp *,  int, TCL_Char **,
215
                                 Domain*, TclModelBuilder *, int argStart);
216
 
217
 
1119 fmk 218
//Rohit Kraul
219
extern int
1321 fmk 220
TclModelBuilder_addElastic2dGNL(ClientData, Tcl_Interp *, int, TCL_Char **,
221
                                Domain *,TclModelBuilder *);
1119 fmk 222
extern int
1321 fmk 223
TclModelBuilder_addElement2dYS(ClientData, Tcl_Interp *, int, TCL_Char **,
224
                               Domain *,TclModelBuilder *);
771 jeremic 225
 
1517 fmk 226
// Zhaohui Yang
1622 jeremic 227
extern int
1535 mhscott 228
TclModelBuilder_addFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
1517 fmk 229
                                Domain*, TclModelBuilder *);
1119 fmk 230
 
1849 fmk 231
// Zhaohui Yang
232
extern int
233
TclModelBuilder_addBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
234
                                Domain*, TclModelBuilder *);
235
 
236
// Zhaohui Yang
237
extern int
238
TclModelBuilder_addNineFourNodeQuadUP(ClientData, Tcl_Interp *, int, TCL_Char **,
239
                                Domain*, TclModelBuilder *);
240
// Jinchi Lu
241
extern int
242
TclModelBuilder_addTwentyEightNodeBrickUP(ClientData, Tcl_Interp *, int, TCL_Char **,
243
                                Domain*, TclModelBuilder *);
244
// Jinchi Lu
245
extern int
246
TclModelBuilder_addTwentyNodeBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
247
                                Domain*, TclModelBuilder *);
248
 
1622 jeremic 249
// Boris Jeremic and Zhao Cheng
250
extern int
251
TclModelBuilder_addTLFD20nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
252
                                Domain*, TclModelBuilder *, int);
1517 fmk 253
 
2486 fmk 254
// Boris Jeremic and Zhao Cheng
255
extern int
256
TclModelBuilder_addTLFD8nBrick(ClientData, Tcl_Interp *, int, TCL_Char **,
257
                                Domain*, TclModelBuilder *, int);
258
 
259
 
260
// Boris Jeremic and Zhao Cheng
261
extern int
262
TclModelBuilder_addEightNode_LDBrick_u_p(ClientData, Tcl_Interp *, int, TCL_Char **,
263
                                Domain*, TclModelBuilder *, int);
264
 
265
// Boris Jeremic and Zhao Cheng
266
extern int
267
TclModelBuilder_addEightNode_Brick_u_p(ClientData, Tcl_Interp *, int, TCL_Char **,
268
                                Domain*, TclModelBuilder *, int);
269
 
2 fmk 270
int
271
TclModelBuilderElementCommand(ClientData clientData, Tcl_Interp *interp,
1321 fmk 272
                              int argc, TCL_Char **argv,
2 fmk 273
                              Domain *theTclDomain, TclModelBuilder *theTclBuilder)
274
{
275
  // ensure the destructor has not been called - 
276
  if (theTclBuilder == 0) {
1271 fmk 277
    opserr << "WARNING builder has been destroyed\n";    
2 fmk 278
    return TCL_ERROR;
279
  }
280
 
281
  // check at least two arguments so don't segemnt fault on strcmp  
282
  if (argc < 2) {
1271 fmk 283
    opserr << "WARNING need to specify an element type\n";
1399 fmk 284
    opserr << "Want: element eleType <specific element args> .. see manual for valid eleTypes & arguments\n";
2 fmk 285
    return TCL_ERROR;
286
  }
287
 
288
  if (strcmp(argv[1],"fTruss") == 0) {
289
    int eleArgStart = 1;
290
    int result = TclModelBuilder_addFeapTruss(clientData, interp, argc, argv,
291
                                              theTclDomain, theTclBuilder, eleArgStart);
292
    return result;
360 mhscott 293
  } else if (strcmp(argv[1],"truss") == 0 || strcmp(argv[1],"corotTruss") == 0) {
2 fmk 294
    int eleArgStart = 1;
295
    int result = TclModelBuilder_addTruss(clientData, interp, argc, argv,
1399 fmk 296
                                          theTclDomain, theTclBuilder, eleArgStart);
2 fmk 297
    return result;
317 fmk 298
  } else if (strcmp(argv[1],"elasticBeamColumn") == 0) {
2 fmk 299
    int eleArgStart = 1;
300
    int result = TclModelBuilder_addElasticBeam(clientData, interp, argc, argv,
1399 fmk 301
                                                theTclDomain, theTclBuilder, eleArgStart);    
2 fmk 302
    return result;
3092 mhscott 303
  }
304
  /*
305
else if (strcmp(argv[1],"nonlinearBeamColumn") == 0) {
1422 mhscott 306
    int result = TclModelBuilder_addNLBeamColumn(clientData, interp, argc, argv,
307
                                                 theTclDomain, theTclBuilder);
2 fmk 308
    return result;
317 fmk 309
  } else if (strcmp(argv[1],"dispBeamColumn") == 0) {
1399 fmk 310
    int result = TclModelBuilder_addDispBeamColumn(clientData, interp, argc, argv,
311
                                                   theTclDomain, theTclBuilder);
317 fmk 312
    return result;
2995 fmk 313
 
3092 mhscott 314
  }
315
  */
316
  else if (strcmp(argv[1],"dispBeamColumnInt") == 0) {
2995 fmk 317
    int result = TclModelBuilder_addDispBeamColumnInt(clientData, interp, argc, argv,
318
                                                   theTclDomain, theTclBuilder);
319
    return result;
320
 
3092 mhscott 321
  } else if (strcmp(argv[1],"forceBeamColumn") == 0 || strcmp(argv[1],"dispBeamColumn") == 0 || strcmp(argv[1],"elasticForceBeamColumn") == 0 || strcmp(argv[1],"nonlinearBeamColumn") == 0) {
1399 fmk 322
    int result = TclModelBuilder_addForceBeamColumn(clientData, interp, argc, argv,
323
                                                    theTclDomain, theTclBuilder);
1225 mhscott 324
    return result;
2434 mhscott 325
  } else if (strstr(argv[1],"beamWithHinges") != 0) {
2 fmk 326
          int result = TclModelBuilder_addBeamWithHinges(clientData, interp, argc, argv,
327
                                                 theTclDomain, theTclBuilder);
328
    return result;
1509 fmk 329
  } else if ((strcmp(argv[1],"quad") == 0) || (strcmp(argv[1],"stdQuad") == 0)) {
1399 fmk 330
    int result = TclModelBuilder_addFourNodeQuad(clientData, interp, argc, argv,
331
                                                 theTclDomain, theTclBuilder);
2 fmk 332
          return result;
317 fmk 333
  } else if (strcmp(argv[1],"enhancedQuad") == 0) {
334
    int result = TclModelBuilder_addEnhancedQuad(clientData, interp, argc, argv,
335
                                                 theTclDomain, theTclBuilder);
336
    return result;
337
  } else if ((strcmp(argv[1],"bbarQuad") == 0) || (strcmp(argv[1],"mixedQuad") == 0)) {
338
    int result = TclModelBuilder_addConstantPressureVolumeQuad(clientData, interp,
339
                                                               argc, argv,
340
                                                               theTclDomain,
341
                                                               theTclBuilder);
342
    return result;
576 fmk 343
  } else if ((strcmp(argv[1],"nineNodeMixedQuad") == 0)
344
             || (strcmp(argv[1],"nineNodeQuad") == 0)) {
345
    int result = TclModelBuilder_addNineNodeMixedQuad(clientData, interp,
346
                                                      argc, argv,
347
                                                      theTclDomain,
348
                                                      theTclBuilder);
349
    return result;
1517 fmk 350
  } else if (strcmp(argv[1],"quadUP") == 0) {
351
          int result = TclModelBuilder_addFourNodeQuadUP(clientData, interp, argc, argv,
352
                                                       theTclDomain, theTclBuilder);
353
          return result;
1849 fmk 354
  } else if (strcmp(argv[1],"brickUP") == 0) {
355
          int result = TclModelBuilder_addBrickUP(clientData, interp, argc, argv,
356
                                                       theTclDomain, theTclBuilder);
357
          return result;
358
  } else if (strcmp(argv[1],"9_4_QuadUP") == 0) {
359
          int result = TclModelBuilder_addNineFourNodeQuadUP(clientData, interp, argc, argv,
360
                                                       theTclDomain, theTclBuilder);
361
          return result;
362
  } else if (strcmp(argv[1],"20_8_BrickUP") == 0) {
363
          int result = TclModelBuilder_addTwentyEightNodeBrickUP(clientData, interp, argc, argv,
364
                                                       theTclDomain, theTclBuilder);
365
          return result;
366
  } else if (strcmp(argv[1],"20NodeBrick") == 0) {
367
          int result = TclModelBuilder_addTwentyNodeBrick(clientData, interp, argc, argv,
368
                                                       theTclDomain, theTclBuilder);
369
          return result;
3248 fmk 370
 
371
  } else if (strcmp(argv[1],"genericClient") == 0) {
372
    int eleArgStart = 1;
373
    int result = TclModelBuilder_addGenericClient(clientData, interp, argc, argv,
374
                                                  theTclDomain, theTclBuilder, eleArgStart);
375
    return result;
376
 
377
  } else if (strcmp(argv[1],"genericCopy") == 0) {
378
    int eleArgStart = 1;
379
    int result = TclModelBuilder_addGenericCopy(clientData, interp, argc, argv,
380
                                                theTclDomain, theTclBuilder, eleArgStart);
381
    return result;
382
 
1271 fmk 383
  } else if ((strcmp(argv[1],"shell") == 0) || (strcmp(argv[1],"shellMITC4") == 0) ||
384
             (strcmp(argv[1],"Shell") == 0) || (strcmp(argv[1],"ShellMITC4") == 0)) {
385
 
386
 
317 fmk 387
    int eleArgStart = 1;
388
    int result = TclModelBuilder_addShellMITC4(clientData, interp,
389
                                               argc, argv,
390
                                               theTclDomain,
391
                                               theTclBuilder,
392
                                               eleArgStart);
393
    return result;
1622 jeremic 394
  }
860 fmk 395
 
3248 fmk 396
  // Andreas Schellenberg
397
  else if (strcmp(argv[1],"genericClient") == 0) {
398
    int eleArgStart = 1;
399
    int result = TclModelBuilder_addGenericClient(clientData, interp, argc, argv,
400
                                                theTclDomain, theTclBuilder, eleArgStart);    
401
    return result;
402
  }
403
 
404
  else if (strcmp(argv[1],"genericCopy") == 0) {
405
    int eleArgStart = 1;
406
    int result = TclModelBuilder_addGenericCopy(clientData, interp, argc, argv,
407
                                                theTclDomain, theTclBuilder, eleArgStart);    
408
    return result;
409
  }
410
 
860 fmk 411
  //Boris Jeremic & Zhaohui
412
  else if (strcmp(argv[1],"Brick8N") == 0) {
413
 
414
    int eleArgStart = 1;
1622 jeremic 415
    int result = TclModelBuilder_addEightNodeBrick(clientData,
416
                                                   interp,
417
                                                   argc,
860 fmk 418
                                                   argv,
1622 jeremic 419
                                                   theTclDomain,
420
                                                   theTclBuilder,
860 fmk 421
                                                   eleArgStart);
422
    return result;
1622 jeremic 423
  }
860 fmk 424
 
425
  //Boris Jeremic & Zhaohui
426
  else if (strcmp(argv[1],"Brick20N") == 0) {
427
    int eleArgStart = 1;
428
    int result = TclModelBuilder_addTwentyNodeBrick(clientData,
429
                                                    interp,
430
                                                    argc,
431
                                                    argv,
432
                                                    theTclDomain,
433
                                                    theTclBuilder,
434
                                                    eleArgStart);
435
    return result;
771 jeremic 436
  }
860 fmk 437
 
1605 jeremic 438
  //Boris Jeremic & Guanzhou Jie
439
  else if (strcmp(argv[1],"Brick27N") == 0)
440
    {
441
      int eleArgStart = 1;
442
      int result = TclModelBuilder_addTwentySevenNodeBrick(clientData,
443
                                                           interp,
444
                                                           argc,
445
                                                           argv,
446
                                                           theTclDomain,
447
                                                           theTclBuilder,
448
                                                           eleArgStart);
449
                                                           return result;
450
    }
451
 
452
 
1622 jeremic 453
  // Boris jeremic & Zhao Cheng
454
  else if (strcmp(argv[1],"TLFD20nBrick") == 0) {
455
    int eleArgStart = 1;
456
    int result = TclModelBuilder_addTLFD20nBrick(clientData,
457
                                                   interp,
458
                                                   argc,
459
                                                   argv,
460
                                                   theTclDomain,
461
                                                   theTclBuilder,
462
                                                   eleArgStart);
463
    return result;
464
  }
465
 
2486 fmk 466
  // Boris jeremic & Zhao Cheng
467
  else if (strcmp(argv[1],"TLFD8nBrick") == 0) {
468
    int eleArgStart = 1;
469
    int result = TclModelBuilder_addTLFD8nBrick(clientData,
470
                                                   interp,
471
                                                   argc,
472
                                                   argv,
473
                                                   theTclDomain,
474
                                                   theTclBuilder,
475
                                                   eleArgStart);
476
    return result;
477
  }
478
 
860 fmk 479
  //Boris Jeremic & Zhaohui  
480
  else if (strcmp(argv[1],"Brick8N_u_p_U") == 0) {
481
    int eleArgStart = 1;
482
    int result = TclModelBuilder_addEightNodeBrick_u_p_U(clientData,
483
                                                         interp,
484
                                                         argc,
485
                                                         argv,
486
                                                         theTclDomain,
487
                                                         theTclBuilder,
488
                                                         eleArgStart);
489
    return result;
490
  }
491
  //Boris Jeremic & Zhaohui  
492
  else if (strcmp(argv[1],"Brick20N_u_p_U") == 0) {
493
    int eleArgStart = 1;
494
    int result = TclModelBuilder_addTwentyNodeBrick_u_p_U(clientData,
495
                                                          interp,
496
                                                          argc,
497
                                                          argv,
498
                                                          theTclDomain,
499
                                                          theTclBuilder,
500
                                                          eleArgStart);
501
    return result;
502
  }
2486 fmk 503
 
504
  // Boris Jeremic & Zhao Cheng
505
  else if (strcmp(argv[1],"EightNode_LDBrick_u_p") == 0) {
506
    int eleArgStart = 1;
507
    int result = TclModelBuilder_addEightNode_LDBrick_u_p(clientData,
508
                                                   interp,
509
                                                   argc,
510
                                                   argv,
511
                                                   theTclDomain,
512
                                                   theTclBuilder,
513
                                                   eleArgStart);
514
    return result;
515
  }
516
 
517
  // Boris Jeremic & Zhao Cheng
518
  else if (strcmp(argv[1],"EightNode_Brick_u_p") == 0) {
519
    int eleArgStart = 1;
520
    int result = TclModelBuilder_addEightNode_Brick_u_p(clientData,
521
                                                   interp,
522
                                                   argc,
523
                                                   argv,
524
                                                   theTclDomain,
525
                                                   theTclBuilder,
526
                                                   eleArgStart);
527
    return result;
528
  }
529
 
530
 
860 fmk 531
  else if (strcmp(argv[1],"stdBrick") == 0) {
532
    int eleArgStart = 1;
533
    int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
2266 fmk 534
                                          theTclDomain, theTclBuilder, eleArgStart);
860 fmk 535
    return result;
317 fmk 536
  } else if (strcmp(argv[1],"bbarBrick") == 0) {
860 fmk 537
    int eleArgStart = 1;
2266 fmk 538
    int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
539
                                          theTclDomain, theTclBuilder, eleArgStart);
860 fmk 540
    return result;
2266 fmk 541
  } else if (strcmp(argv[1],"flBrick") == 0) {
542
    int eleArgStart = 1;
543
    int result = TclModelBuilder_addBrick(clientData, interp, argc, argv,
544
                                          theTclDomain, theTclBuilder, eleArgStart);
545
    return result;
2 fmk 546
  } else if (strcmp(argv[1],"zeroLength") == 0) {
547
    int result = TclModelBuilder_addZeroLength(clientData, interp, argc, argv,
548
                                               theTclDomain, theTclBuilder);
549
    return result;
36 mhscott 550
  } else if (strcmp(argv[1],"zeroLengthSection") == 0) {
551
    int result = TclModelBuilder_addZeroLengthSection(clientData, interp, argc, argv,
552
                                               theTclDomain, theTclBuilder);
553
    return result;
3130 fmk 554
 
555
  } else if (strcmp(argv[1],"zeroLengthContact2D") == 0) {
556
    int result = TclModelBuilder_addZeroLengthContact2D(clientData, interp, argc, argv,
557
                                                        theTclDomain, theTclBuilder);
558
    return result;
559
 
560
  } else if (strcmp(argv[1],"zeroLengthContact3D") == 0) {
561
    int result = TclModelBuilder_addZeroLengthContact3D(clientData, interp, argc, argv,
562
                                                        theTclDomain, theTclBuilder);
563
    return result;
564
 
1074 mhscott 565
  } else if (strcmp(argv[1],"zeroLengthND") == 0) {
3549 fmk 566
    int result = TclModelBuilder_addZeroLengthND(clientData, interp, argc, argv,
567
                                                 theTclDomain, theTclBuilder);
568
    return result;
1068 fmk 569
  } else if ((strcmp(argv[1],"Joint2D") == 0) ||
1633 fmk 570
             (strcmp(argv[1],"Joint2d") == 0)) {
1068 fmk 571
    int result = TclModelBuilder_addJoint2D(clientData, interp, argc, argv,
1633 fmk 572
                                            theTclDomain, theTclBuilder);
1068 fmk 573
    return result;
1633 fmk 574
  } else if ((strcmp(argv[1],"Joint3D") == 0) ||
575
             (strcmp(argv[1],"Joint3d") == 0)) {
576
    int result = TclModelBuilder_addJoint3D(clientData, interp, argc, argv,
577
                                            theTclDomain, theTclBuilder);
578
    return result;
1119 fmk 579
  } else if ((strcmp(argv[1], "inelastic2dYS01")== 0) ||
580
             (strcmp(argv[1], "inelastic2dYS02")== 0) ||
581
             (strcmp(argv[1], "inelastic2dYS03")== 0) ||
582
             (strcmp(argv[1], "inelastic2dYS04")== 0) ||
583
             (strcmp(argv[1], "inelastic2dYS05")== 0)) {
584
    int result = TclModelBuilder_addElement2dYS (clientData, interp,
585
                                                 argc, argv,
586
                                                 theTclDomain, theTclBuilder);
587
    return result;     
588
  } else if ((strcmp(argv[1],"element2dGNL") == 0) ||
589
             (strcmp(argv[1],"elastic2dGNL") == 0)) {
590
    int result = TclModelBuilder_addElastic2dGNL(clientData, interp, argc, argv,
591
                                                 theTclDomain, theTclBuilder);
592
    return result;
1481 mhscott 593
  }
2046 fmk 594
 
1481 mhscott 595
  else if (strcmp(argv[1],"beamColumnJoint") == 0) {
596
    int eleArgStart = 1;
597
    int result = TclModelBuilder_addBeamColumnJoint(clientData, interp,
598
                                                    argc, argv, theTclDomain,
599
                                                    theTclBuilder, eleArgStart);
600
    return result;
601
  }
2046 fmk 602
 
1481 mhscott 603
  else {
2046 fmk 604
 
605
    //
606
    // maybe element in a package
607
    //
608
 
609
    // try existing loaded packages
610
 
611
    ElementPackageCommand *eleCommands = theElementPackageCommands;
612
    bool found = false;
613
    while (eleCommands != NULL && found == false) {
614
      if (strcmp(argv[1], eleCommands->funcName) == 0) {
615
        int result = (*(eleCommands->funcPtr))(clientData, interp, argc, argv, theTclDomain, theTclBuilder);
616
        return result;
617
      } else
618
        eleCommands = eleCommands->next;
619
    }
620
 
621
    // load new package
622
    void *libHandle;
623
    int (*funcPtr)(ClientData clientData, Tcl_Interp *interp,  int argc,
624
                   TCL_Char **argv, Domain*, TclModelBuilder *);      
625
    int eleNameLength = strlen(argv[1]);
626
    char *tclFuncName = new char[eleNameLength+12];
627
    strcpy(tclFuncName, "TclCommand_");
628
    strcpy(&tclFuncName[11], argv[1]);    
629
 
630
    int res = getLibraryFunction(argv[1], tclFuncName, &libHandle, (void **)&funcPtr);
631
 
2087 fmk 632
    delete [] tclFuncName;
2046 fmk 633
 
2087 fmk 634
    if (res == 0) {
2046 fmk 635
 
2087 fmk 636
      char *eleName = new char[eleNameLength+1];
637
      strcpy(eleName, argv[1]);
638
      ElementPackageCommand *theEleCommand = new ElementPackageCommand;
639
      theEleCommand->funcPtr = funcPtr;
640
      theEleCommand->funcName = eleName;       
641
      theEleCommand->next = theElementPackageCommands;
642
      theElementPackageCommands = theEleCommand;
643
 
644
      int result = (*funcPtr)(clientData, interp,
645
                              argc, argv,
646
                              theTclDomain, theTclBuilder);    
647
      return result;
648
    }
649
 
1119 fmk 650
    // element type not recognized
2046 fmk 651
    opserr << "WARNING unknown element type: " <<  argv[1] << " :check the manual\n";
2 fmk 652
    return TCL_ERROR;
2046 fmk 653
  }    
2 fmk 654
}