00001 #include <stdlib.h>
00002 #include <string.h>
00003 #include <OPS_Stream.h>
00004
00005 #include <Domain.h>
00006 #include <Node.h>
00007 #include <Matrix.h>
00008
00009 #include <CyclicModel.h>
00010 #include <Inelastic2DYS01.h>
00011 #include <Inelastic2DYS02.h>
00012 #include <Inelastic2DYS03.h>
00013
00014
00015
00016 #include <YieldSurface_BC.h>
00017 #include <TclModelBuilder.h>
00018
00019 #define tcl_debug 0
00020
00021
00022
00023
00024 int
00025 TclModelBuilder_addElement2dYS01 (ClientData clientData, Tcl_Interp *interp,
00026 int argc, TCL_Char **argv,
00027 Domain *theDomain, TclModelBuilder *theBuilder)
00028 {
00029
00030
00031
00032 if(tcl_debug)
00033 opserr << " TclModelBuilder_addElement2dGNL \n";
00034
00035 if (argc < 11)
00036 {
00037 opserr << "WARNING insufficient arguments\n";
00038 opserr << "element element2dYS tag? Nd1? Nd2? A? E? Iz? ysID1? ysID2? algo?";
00039
00040 return TCL_ERROR;
00041 }
00042
00043 int tag, ndI, ndJ;
00044 double E, A, I;
00045
00046 int ysID1, ysID2;
00047 int rf_algo;
00048
00049 if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK)
00050 {
00051 opserr << "WARNING invalid element2dYS tag" << endln;
00052 return TCL_ERROR;
00053 }
00054 if(tcl_debug) opserr << "\tElement tag = " << tag << "\n";
00055
00056 if (Tcl_GetInt (interp, argv[3], &ndI) != TCL_OK)
00057 {
00058 opserr << "WARNING invalid node I\n";
00059 opserr << "element2dYS: " << tag << endln;
00060 return TCL_ERROR;
00061 }
00062
00063 if (Tcl_GetInt (interp, argv[4], &ndJ) != TCL_OK)
00064 {
00065 opserr << "WARNING invalid node J\n";
00066 opserr << "element2dYS: " << tag << endln;
00067 return TCL_ERROR;
00068 }
00069
00070
00071 if (Tcl_GetDouble(interp, argv[5], &A) != TCL_OK)
00072 {
00073 opserr << "WARNING invalid A\n";
00074 opserr << "element2dYS: " << tag << endln;
00075 return TCL_ERROR;
00076 }
00077
00078 if (Tcl_GetDouble(interp, argv[6], &E) != TCL_OK)
00079 {
00080 opserr << "WARNING invalid E\n";
00081 opserr << "element2dYS: " << tag << endln;
00082 return TCL_ERROR;
00083 }
00084
00085 if (Tcl_GetDouble(interp, argv[7], &I) != TCL_OK)
00086 {
00087 opserr << "WARNING invalid I\n";
00088 opserr << "element2dYS: " << tag << endln;
00089 return TCL_ERROR;
00090 }
00091
00092 if (Tcl_GetInt (interp, argv[8], &ysID1) != TCL_OK)
00093 {
00094 opserr << "WARNING invalid ysID1\n";
00095 opserr << "element2dYS: " << tag << endln;
00096 return TCL_ERROR;
00097 }
00098
00099 if (Tcl_GetInt (interp, argv[9], &ysID2) != TCL_OK)
00100 {
00101 opserr << "WARNING invalid ysID2\n";
00102 opserr << "element2dYS: " << tag << endln;
00103 return TCL_ERROR;
00104 }
00105
00106 if (Tcl_GetInt (interp, argv[10], &rf_algo) != TCL_OK)
00107 {
00108 opserr << "WARNING invalid ysID1\n";
00109 opserr << "element2dYS: " << tag << endln;
00110 return TCL_ERROR;
00111 }
00112
00113 YieldSurface_BC *theYS1 = theBuilder->getYieldSurface_BC(ysID1);
00114 if(theYS1 == 0)
00115 {
00116 opserr << "WARNING element2dYS: " << tag << "\n";
00117 opserr << " no yield surface exists with tag: " << ysID1 << endln;
00118 return TCL_ERROR;
00119 }
00120
00121 YieldSurface_BC *theYS2 = theBuilder->getYieldSurface_BC(ysID2);
00122 if(theYS2 == 0)
00123 {
00124 opserr << "WARNING element2dYS: " << tag << "\n";
00125 opserr << " no yield surface exists with tag: " << ysID2 << endln;
00126 return TCL_ERROR;
00127 }
00128
00129
00130
00131
00132 Element *theElement = new Inelastic2DYS01(tag, A, E, I, ndI, ndJ, theYS1, theYS2, rf_algo);
00133
00134 if(tcl_debug) opserr << "\tElement created\n";
00135
00136
00137 if (theElement == 0)
00138 {
00139 opserr << "WARNING ran out of memory creating element\n";
00140 opserr << "element2dYS: " << tag << endln;
00141 opserr << "\a";
00142 return TCL_ERROR;
00143 }
00144
00145 if (theDomain->addElement(theElement) == false)
00146 {
00147 opserr << "WARNING TclElmtBuilder - addelement2dYS - could not add element to domain ";
00148 opserr << tag << endln;
00149 opserr << "\a";
00150 return TCL_ERROR;
00151 }
00152
00153 if(tcl_debug) opserr << "\tElement number " << tag << " added to domain - returning\n";
00154
00155 return TCL_OK;
00156 }
00157
00158
00159 int
00160 TclModelBuilder_addElement2dYS02 (ClientData clientData, Tcl_Interp *interp,
00161 int argc, TCL_Char **argv,
00162 Domain *theDomain, TclModelBuilder *theBuilder)
00163 {
00164
00165
00166
00167 if(tcl_debug)
00168 opserr << " TclModelBuilder_addElement2dGNL \n";
00169
00170 if (argc < 14)
00171 {
00172 opserr << "WARNING insufficient arguments\n";
00173 opserr << "element element2dYS tag? Nd1? Nd2? A? E? Iz? ysID1? ysID2? cycType? wt? power? algo?";
00174
00175 return TCL_ERROR;
00176 }
00177
00178 int tag, ndI, ndJ;
00179 double E, A, I;
00180
00181 int ysID1, ysID2;
00182 int cyc_type;
00183
00184
00185 int rf_algo=-1;
00186
00187 if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK)
00188 {
00189 opserr << "WARNING invalid element2dYS tag" << endln;
00190 return TCL_ERROR;
00191 }
00192 if(tcl_debug) opserr << "\tElement tag = " << tag << "\n";
00193
00194 if (Tcl_GetInt (interp, argv[3], &ndI) != TCL_OK)
00195 {
00196 opserr << "WARNING invalid node I\n";
00197 opserr << "element2dYS: " << tag << endln;
00198 return TCL_ERROR;
00199 }
00200
00201 if (Tcl_GetInt (interp, argv[4], &ndJ) != TCL_OK)
00202 {
00203 opserr << "WARNING invalid node J\n";
00204 opserr << "element2dYS: " << tag << endln;
00205 return TCL_ERROR;
00206 }
00207
00208
00209 if (Tcl_GetDouble(interp, argv[5], &A) != TCL_OK)
00210 {
00211 opserr << "WARNING invalid A\n";
00212 opserr << "element2dYS: " << tag << endln;
00213 return TCL_ERROR;
00214 }
00215
00216 if (Tcl_GetDouble(interp, argv[6], &E) != TCL_OK)
00217 {
00218 opserr << "WARNING invalid E\n";
00219 opserr << "element2dYS: " << tag << endln;
00220 return TCL_ERROR;
00221 }
00222
00223 if (Tcl_GetDouble(interp, argv[7], &I) != TCL_OK)
00224 {
00225 opserr << "WARNING invalid I\n";
00226 opserr << "element2dYS: " << tag << endln;
00227 return TCL_ERROR;
00228 }
00229
00230 if (Tcl_GetInt (interp, argv[8], &ysID1) != TCL_OK)
00231 {
00232 opserr << "WARNING invalid ysID1\n";
00233 opserr << "element2dYS: " << tag << endln;
00234 return TCL_ERROR;
00235 }
00236
00237 if (Tcl_GetInt (interp, argv[9], &ysID2) != TCL_OK)
00238 {
00239 opserr << "WARNING invalid ysID2\n";
00240 opserr << "element2dYS: " << tag << endln;
00241 return TCL_ERROR;
00242 }
00243
00244 if (Tcl_GetInt(interp, argv[10], &cyc_type) != TCL_OK)
00245 {
00246 opserr << "WARNING invalid cyc_type\n";
00247 opserr << "element2dYS: " << tag << endln;
00248 return TCL_ERROR;
00249 }
00250
00251
00252
00253
00254
00255
00256
00257
00258 double delpmax, alfa, beta;
00259 if (Tcl_GetDouble (interp, argv[11], &delpmax) != TCL_OK)
00260 {
00261 opserr << "WARNING invalid power\n";
00262 opserr << "element2dYS: " << tag << endln;
00263 return TCL_ERROR;
00264 }
00265
00266 if (Tcl_GetDouble (interp, argv[12], &alfa) != TCL_OK)
00267 {
00268 opserr << "WARNING invalid power\n";
00269 opserr << "element2dYS: " << tag << endln;
00270 return TCL_ERROR;
00271 }
00272
00273 if (Tcl_GetDouble (interp, argv[13], &beta) != TCL_OK)
00274 {
00275 opserr << "WARNING invalid rfalgo\n";
00276 opserr << "element2dYS: " << tag << endln;
00277 return TCL_ERROR;
00278 }
00279
00280 YieldSurface_BC *theYS1 = theBuilder->getYieldSurface_BC(ysID1);
00281 if(theYS1 == 0)
00282 {
00283 opserr << "WARNING element2dYS: " << tag << "\n";
00284 opserr << " no yield surface exists with tag: " << ysID1 << endln;
00285 return TCL_ERROR;
00286 }
00287
00288 YieldSurface_BC *theYS2 = theBuilder->getYieldSurface_BC(ysID2);
00289 if(theYS2 == 0)
00290 {
00291 opserr << "WARNING element2dYS: " << tag << "\n";
00292 opserr << " no yield surface exists with tag: " << ysID2 << endln;
00293 return TCL_ERROR;
00294 }
00295
00296
00297
00298
00299
00300 CyclicModel *theModel = theBuilder->getCyclicModel(cyc_type);
00301
00302 Element *theElement = new Inelastic2DYS02(tag, A, E, I, ndI, ndJ, theYS1, theYS2, theModel, delpmax, alfa, beta, rf_algo);
00303 opserr << "Inelastic2DYS02 created\n";
00304
00305 if(tcl_debug) opserr << "\tElement created\n";
00306
00307
00308 if (theElement == 0)
00309 {
00310 opserr << "WARNING ran out of memory creating element\n";
00311 opserr << "element2dYS: " << tag << endln;
00312 opserr << "\a";
00313 return TCL_ERROR;
00314 }
00315
00316 opserr << "Inelastic2DYS02 adding to domain\n";
00317
00318 if (theDomain->addElement(theElement) == false)
00319 {
00320 opserr << "WARNING TclElmtBuilder - addelement2dYS - could not add element to domain ";
00321 opserr << tag << endln;
00322 opserr << "\a";
00323 return TCL_ERROR;
00324 }
00325
00326
00327 opserr << "Inelastic2DYS02 #" << tag << " added to domain - returning\n";
00328
00329 return TCL_OK;
00330 }
00331
00332
00333 int
00334 TclModelBuilder_addElement2dYS03 (ClientData clientData, Tcl_Interp *interp,
00335 int argc, TCL_Char **argv,
00336 Domain *theDomain, TclModelBuilder *theBuilder)
00337 {
00338
00339
00340
00341 if(tcl_debug)
00342 opserr << " TclModelBuilder_addElement2dGNL \n";
00343
00344 if (argc < 11)
00345 {
00346 opserr << "WARNING insufficient arguments\n";
00347 opserr << "element element2dYS03 tag? Nd1? Nd2? A_ten? A_com? E? IzPos? IzNeg? ysID1? ysID2? algo?";
00348
00349 return TCL_ERROR;
00350 }
00351
00352 int tag, ndI, ndJ;
00353 double E, aTens, aComp, Ipos, Ineg;
00354
00355 int ysID1, ysID2;
00356
00357 int rf_algo;
00358
00359 if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK)
00360 {
00361 opserr << "WARNING invalid element2dYS tag" << endln;
00362 return TCL_ERROR;
00363 }
00364 if(tcl_debug) opserr << "\tElement tag = " << tag << "\n";
00365
00366 if (Tcl_GetInt (interp, argv[3], &ndI) != TCL_OK)
00367 {
00368 opserr << "WARNING invalid node I\n";
00369 opserr << "element2dYS: " << tag << endln;
00370 return TCL_ERROR;
00371 }
00372
00373 if (Tcl_GetInt (interp, argv[4], &ndJ) != TCL_OK)
00374 {
00375 opserr << "WARNING invalid node J\n";
00376 opserr << "element2dYS: " << tag << endln;
00377 return TCL_ERROR;
00378 }
00379
00380
00381 if (Tcl_GetDouble(interp, argv[5], &aTens) != TCL_OK)
00382 {
00383 opserr << "WARNING invalid A\n";
00384 opserr << "element2dYS: " << tag << endln;
00385 return TCL_ERROR;
00386 }
00387
00388 if (Tcl_GetDouble(interp, argv[6], &aComp) != TCL_OK)
00389 {
00390 opserr << "WARNING invalid A\n";
00391 opserr << "element2dYS: " << tag << endln;
00392 return TCL_ERROR;
00393 }
00394
00395 if (Tcl_GetDouble(interp, argv[7], &E) != TCL_OK)
00396 {
00397 opserr << "WARNING invalid E\n";
00398 opserr << "element2dYS: " << tag << endln;
00399 return TCL_ERROR;
00400 }
00401
00402 if (Tcl_GetDouble(interp, argv[8], &Ipos) != TCL_OK)
00403 {
00404 opserr << "WARNING invalid I\n";
00405 opserr << "element2dYS: " << tag << endln;
00406 return TCL_ERROR;
00407 }
00408
00409 if (Tcl_GetDouble(interp, argv[9], &Ineg) != TCL_OK)
00410 {
00411 opserr << "WARNING invalid I\n";
00412 opserr << "element2dYS: " << tag << endln;
00413 return TCL_ERROR;
00414 }
00415
00416 if (Tcl_GetInt (interp, argv[10], &ysID1) != TCL_OK)
00417 {
00418 opserr << "WARNING invalid ysID1\n";
00419 opserr << "element2dYS: " << tag << endln;
00420 return TCL_ERROR;
00421 }
00422
00423 if (Tcl_GetInt (interp, argv[11], &ysID2) != TCL_OK)
00424 {
00425 opserr << "WARNING invalid ysID2\n";
00426 opserr << "element2dYS: " << tag << endln;
00427 return TCL_ERROR;
00428 }
00429
00430 if (Tcl_GetInt (interp, argv[12], &rf_algo) != TCL_OK)
00431 {
00432 opserr << "WARNING invalid ysID1\n";
00433 opserr << "element2dYS: " << tag << endln;
00434 return TCL_ERROR;
00435 }
00436
00437 YieldSurface_BC *theYS1 = theBuilder->getYieldSurface_BC(ysID1);
00438 if(theYS1 == 0)
00439 {
00440 opserr << "WARNING element2dYS: " << tag << "\n";
00441 opserr << " no yield surface exists with tag: " << ysID1 << endln;
00442 return TCL_ERROR;
00443 }
00444
00445 YieldSurface_BC *theYS2 = theBuilder->getYieldSurface_BC(ysID2);
00446 if(theYS2 == 0)
00447 {
00448 opserr << "WARNING element2dYS: " << tag << "\n";
00449 opserr << " no yield surface exists with tag: " << ysID2 << endln;
00450 return TCL_ERROR;
00451 }
00452
00453
00454
00455
00456
00457
00458 Element *theElement = new Inelastic2DYS03(tag, aTens, aComp, E,
00459 Ipos, Ineg, ndI, ndJ,
00460 theYS1, theYS2, rf_algo);
00461
00462 opserr << "Inelastic2DYS03 created\n";
00463
00464 if(tcl_debug) opserr << "\tElement created\n";
00465
00466
00467 if (theElement == 0)
00468 {
00469 opserr << "WARNING ran out of memory creating element\n";
00470 opserr << "element2dYS: " << tag << endln;
00471 opserr << "\a";
00472 return TCL_ERROR;
00473 }
00474
00475 opserr << "Inelastic2DYS03 adding to domain\n";
00476
00477 if (theDomain->addElement(theElement) == false)
00478 {
00479 opserr << "WARNING TclElmtBuilder - addelement2dYS - could not add element to domain ";
00480 opserr << tag << endln;
00481 opserr << "\a";
00482 return TCL_ERROR;
00483 }
00484
00485 if(tcl_debug)
00486 opserr << "Inelastic2DYS03 #" << tag << " added to domain - returning\n";
00487
00488 return TCL_OK;
00489 }
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761 int
00762 TclModelBuilder_addElement2dYS (ClientData clientData, Tcl_Interp *interp,
00763 int argc, TCL_Char **argv,
00764 Domain *theTclDomain, TclModelBuilder *theTclBuilder)
00765 {
00766
00767 if (strcmp(argv[1],"inelastic2dYS01") == 0) {
00768 int result = TclModelBuilder_addElement2dYS01(clientData, interp, argc, argv,
00769 theTclDomain, theTclBuilder);
00770 return result;
00771 }
00772 else if (strcmp(argv[1],"inelastic2dYS02") == 0) {
00773 int result = TclModelBuilder_addElement2dYS02(clientData, interp, argc, argv,
00774 theTclDomain, theTclBuilder);
00775 return result;
00776 }
00777
00778 else if (strcmp(argv[1],"inelastic2dYS03") == 0) {
00779 int result = TclModelBuilder_addElement2dYS03(clientData, interp, argc, argv,
00780 theTclDomain, theTclBuilder);
00781 return result;
00782 }
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796 else
00797
00798 return TCL_ERROR;
00799
00800 }