TclZeroLength.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.5 $
00022 // $Date: 2003/02/25 23:33:12 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/element/zeroLength/TclZeroLength.cpp,v $
00024                                                                         
00025                                                                         
00026 // File: ~/element/zeroLength/TclZeroLength.C
00027 // 
00028 // Written: fmk
00029 // Created: 01/00
00030 //
00031 // Description: This file contains the implementation of the command used 
00032 // to add zero length elements to the model.
00033 
00034 
00035 #include <stdlib.h>
00036 #include <string.h>
00037 #include <tcl.h>
00038 
00039 #include <ZeroLength.h>
00040 //#include <ZeroLengthND.h>
00041 #include <ZeroLengthSection.h>
00042 #include <TclModelBuilder.h>
00043 #include <ID.h>
00044 #include <Vector.h>
00045 #include <Domain.h>
00046 
00047 
00048 int
00049 TclModelBuilder_addZeroLength(ClientData clientData, Tcl_Interp *interp,
00050                               int argc, TCL_Char **argv,
00051                               Domain *theDomain,
00052                               TclModelBuilder *theBuilder) {
00053 
00054     int ndm = theBuilder->getNDM(); // the spatial dimension of the problem
00055 
00056     //
00057     // first scan the command line to obtain eleID, iNode, jNode, material ID's
00058     // and their directions, and the orientation of ele xPrime and yPrime not
00059     // along the global x and y axis
00060     //
00061     
00062     int eleTag, iNode, jNode;
00063     
00064     // a quick check on number of args
00065     if (argc < 9) {
00066       opserr << "WARNING too few arguments " <<
00067         "want - element ZeroLength eleTag? iNode? jNode? " <<
00068         "-mat matID1? ... -dir dirMat1? .. " <<
00069         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00070 
00071         return TCL_ERROR;
00072     }
00073 
00074     // get the ele tag 
00075     if (Tcl_GetInt(interp, argv[2], &eleTag) != TCL_OK) {
00076       opserr << "WARNING invalied eleTag " << argv[2] <<
00077         "- element ZeroLength eleTag? iNode? jNode? -mat matID1? ... -dir dirMat1? .. " <<
00078         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00079         return TCL_ERROR;
00080     }
00081 
00082     // get the two end nodes
00083     if (Tcl_GetInt(interp, argv[3], &iNode) != TCL_OK) {
00084       opserr << "WARNING invalied iNode " << argv[3] << 
00085         "- element ZeroLength eleTag? iNode? jNode? " <<
00086         "-mat matID1? ... -dir dirMat1? .. " <<
00087         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00088 
00089         return TCL_ERROR;
00090     }
00091 
00092     if (Tcl_GetInt(interp, argv[4], &jNode) != TCL_OK) {
00093       opserr << "WARNING invalid jNode " << argv[4] <<
00094         "- element ZeroLength eleTag? iNode? jNode? " <<
00095         "-mat matID1? ... -dir dirMat1? .. " <<
00096         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00097         return TCL_ERROR;
00098     }
00099 
00100     // create an array of material pointers, to do this first count
00101     // the materials to create the array then get matID's and from ModelBuilder
00102     // obtain pointers to the material objects
00103 
00104     // read the number of materials
00105     int numMat = 0;
00106     if (strcmp(argv[5],"-mat") != 0) {
00107       opserr << "WARNING expecting -mat flag %s %s %s %s\n" << argv[5] <<
00108         "- element ZeroLength eleTag? iNode? jNode? " <<
00109         "-mat matID1? ... -dir dirMat1? .. " <<
00110         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00111 
00112         return TCL_ERROR;       
00113     }
00114 
00115     int argi = 6; 
00116     while ((argi < argc) && (strcmp(argv[argi],"-dir") != 0)) {
00117         numMat++;
00118         argi++;
00119     }
00120 
00121     if (argi == argc) { // check we encounterd the -dirn flag
00122       opserr << "WARNING no -dirn flag encountered " <<
00123         "- element ZeroLength eleTag? iNode? jNode? " <<
00124         "-mat matID1? ... -dir dirMat1? .. " <<
00125         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00126         return TCL_ERROR;
00127     }   
00128 
00129     if (numMat == 0) {
00130       opserr << "WARNING no materials specified " << 
00131         "- element ZeroLength eleTag? iNode? jNode? " <<
00132         "-mat <matID1? ... -dir irMat1? .. " <<
00133         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00134         return TCL_ERROR;
00135     }
00136 
00137     // create the array
00138     UniaxialMaterial **theMats = new UniaxialMaterial *[numMat];
00139     if (theMats == 0) {
00140       opserr << "WARNING out of memory " <<
00141         "creating material array of size " << numMat <<
00142         "- element ZeroLength eleTag? iNode? jNode? " <<
00143         "-mat matID1? ... -dir dirMat1? .. " <<
00144         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00145         return TCL_ERROR;
00146     }
00147 
00148     // fill in the material array
00149     argi=6; 
00150     for (int i=0; i<numMat; i++) {
00151 
00152         int matID;      
00153 
00154         // read the material tag
00155         if (Tcl_GetInt(interp, argv[argi], &matID) != TCL_OK) {
00156           opserr << "WARNING invalid matID " << argv[argi] <<
00157             "- element ZeroLength eleTag? iNode? jNode? " <<
00158             "-mat matID1? ... -dir dirMat1? .. " <<
00159             "<-orient x1? x2? x3? y1? y2? y3?>\n";
00160             delete [] theMats;      
00161             return TCL_ERROR;
00162         } else {
00163 
00164             // get a pointer to the material from the modelbuilder          
00165             argi++;
00166             UniaxialMaterial *theMat = theBuilder->getUniaxialMaterial(matID);
00167             if (theMat == 0) {
00168               opserr << "WARNING no material " << matID <<
00169                 "exitsts - element ZeroLength eleTag? iNode? jNode? " <<
00170                 "-mat matID1? ... -dir dirMat1? .. " <<
00171                 "<-orient x1? x2? x3? y1? y2? y3?>\n"  ;
00172                 delete [] theMats;              
00173                 return TCL_ERROR;               
00174             } else {
00175                 
00176                 // add the material to the array
00177                 theMats[i] = theMat;
00178             }
00179         }
00180     }
00181     
00182 
00183     // now read the dirn ID's for the materials added
00184     argi = 6 + numMat;
00185     if (strcmp(argv[argi],"-dir") != 0) {
00186       opserr << "WARNING expecting -dirn flag " << argv[argi] << 
00187           "- element ZeroLength eleTag? iNode? jNode? " <<
00188           "-mat matID1? ... -dir dirMat1? .. " <<
00189         "<-orient x1? x2? x3? y1? y2? y3?>\n";
00190 
00191     delete [] theMats;
00192         return TCL_ERROR;       
00193     }    
00194     if ((argi + numMat) > argc) {
00195         opserr << "WARNING not enough directions provided for ele " << eleTag <<
00196           "- element ZeroLength eleTag? iNode? jNode? " <<
00197           "-mat matID1? ... -dir dirMat1? .. " <<
00198           "<-orient x1? x2? x3? y1? y2? y3?>\n";
00199         
00200         delete [] theMats;      
00201         return TCL_ERROR;               
00202     }
00203     
00204     // create an ID to hold the directions
00205     ID theDirns(numMat);
00206     argi++; 
00207     int dirnID; 
00208 
00209     // read the dirn identifiers
00210     for (int j=0; j<numMat; j++) {
00211         if (Tcl_GetInt(interp, argv[argi], &dirnID) != TCL_OK) {
00212           opserr << "WARNING invalid directiion " << argv[argi] <<
00213             "- element ZeroLength eleTag? iNode? jNode? " <<
00214             "-mat matID1? ... -dir dirMat1? .. " <<
00215             "<-orient x1? x2? x3? y1? y2? y3?>\n";      
00216           
00217           delete [] theMats;        
00218           return TCL_ERROR;
00219         } else {
00220           theDirns[j] = dirnID -1; // the minus g3 to C++
00221           argi++;
00222         }
00223     }
00224 
00225     // create the vectors for the element orientation
00226     Vector x(3); x(0) = 1.0; x(1) = 0.0; x(2) = 0.0;
00227     Vector y(3); y(0) = 0.0; y(1) = 1.0; y(2) = 0.0;
00228 
00229     // finally check the command line to see if user specified orientation
00230     if (argi < argc) {
00231         if (strcmp(argv[argi],"-orient") == 0) {
00232             if (argc < (argi+7)) {
00233               opserr << "WARNING not enough paramaters after -orient flag for ele " << eleTag <<
00234                 "- element ZeroLength eleTag? iNode? jNode? " <<
00235                 "-mat matID1? ... -dir dirMat1? .. " <<
00236                 "<-orient x1? x2? x3? y1? y2? y3?>\n";        
00237               delete [] theMats;                
00238               return TCL_ERROR;         
00239             } else {
00240               argi++;
00241               double value;
00242               // read the x values
00243               for (int i=0; i<3; i++)  {
00244                 if (Tcl_GetDouble(interp, argv[argi], &value) != TCL_OK) {
00245                   opserr << "WARNING invalid -orient value for ele  " << eleTag << argv[i] <<
00246                     "- element ZeroLength eleTag? iNode? jNode? " <<
00247                     "-mat matID1? ... -dir dirMat1? .. " <<
00248                     "<-orient x1? x2? x3? y1? y2? y3?>\n";      
00249                   delete [] theMats;                    
00250                   return TCL_ERROR;
00251                     } else {
00252                         argi++;
00253                         x(i) = value;
00254                     }
00255                 }
00256                 // read the y values
00257                 for (int j=0; j<3; j++)  {
00258                     if (Tcl_GetDouble(interp, argv[argi], &value) != TCL_OK) {
00259                       opserr << "WARNING invalid -orient value for ele  " <<
00260                         eleTag << argv[argi] <<
00261                         "- element ZeroLength eleTag? iNode? jNode? " <<
00262                         "-mat matID1? ... -dir dirMat1? .. " <<
00263                         "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00264                       delete [] theMats;                        
00265                       return TCL_ERROR;
00266                     } else {
00267                       argi++;
00268                       y(j) = value;             
00269                     }
00270                 }
00271             }
00272         }
00273     }
00274     
00275     //
00276     // now we create the element and add it to the domain
00277     //
00278 
00279     Element *theEle;
00280     theEle = new ZeroLength(eleTag, ndm, iNode, jNode, x, y, numMat, theMats, theDirns);
00281     if (theEle == 0) {
00282         delete [] theMats;      
00283         return TCL_ERROR;
00284     }
00285    
00286     if (theDomain->addElement(theEle) == false) {
00287         delete [] theMats;
00288         return TCL_ERROR;
00289     }
00290 
00291     // return the memory we stole and return OK
00292     delete [] theMats;    
00293     return TCL_OK;
00294 }
00295 
00296 
00297 
00298 
00299 int
00300 TclModelBuilder_addZeroLengthSection(ClientData clientData, Tcl_Interp *interp,
00301                               int argc, TCL_Char **argv,
00302                               Domain *theDomain,
00303                               TclModelBuilder *theBuilder) {
00304 
00305     int ndm = theBuilder->getNDM(); // the spatial dimension of the problem
00306 
00307     //
00308     // first scan the command line to obtain eleID, iNode, jNode, material ID's
00309     // and their directions, and the orientation of ele xPrime and yPrime not
00310     // along the global x and y axis
00311     //
00312     
00313     int eleTag, iNode, jNode;
00314     
00315     // a quick check on number of args
00316     if (argc < 6) {
00317         opserr << "WARNING too few arguments " <<
00318           "want - element zeroLengthSection eleTag? iNode? jNode? " <<
00319           "secTag? " <<
00320           "<-orient x1? x2? x3? y1? y2? y3?>\n";
00321         return TCL_ERROR;
00322     }
00323 
00324     // get the ele tag 
00325     if (Tcl_GetInt(interp, argv[2], &eleTag) != TCL_OK) {
00326       opserr << "WARNING invalied eleTag " << argv[2] <<
00327         "- element zeroLengthSection eleTag? iNode? jNode? " <<
00328         "secTag? " <<
00329         "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00330         return TCL_ERROR;
00331     }
00332 
00333     // get the two end nodes
00334     if (Tcl_GetInt(interp, argv[3], &iNode) != TCL_OK) {
00335       opserr << "WARNING invalied iNode " << argv[3] <<
00336         "- element zeroLengthSection eleTag? iNode? jNode? " <<
00337         "secTag? " <<
00338         "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00339 
00340       return TCL_ERROR;
00341     }
00342 
00343     if (Tcl_GetInt(interp, argv[4], &jNode) != TCL_OK) {
00344       opserr << "WARNING invalid jNode " << argv[4] <<
00345         "- element zeroLengthSection eleTag? iNode? jNode? " <<
00346         "secTag? " <<
00347         "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00348       return TCL_ERROR;
00349     }
00350 
00351         int secTag;
00352 
00353     if (Tcl_GetInt(interp, argv[5], &secTag) != TCL_OK) {
00354       opserr << "WARNING invalid secTag " << argv[5] <<
00355         "- element zeroLengthSection eleTag? iNode? jNode? " <<
00356         "secTag? " <<
00357         "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00358       return TCL_ERROR;
00359     }
00360 
00361     // create the vectors for the element orientation
00362     Vector x(3); x(0) = 1.0; x(1) = 0.0; x(2) = 0.0;
00363     Vector y(3); y(0) = 0.0; y(1) = 1.0; y(2) = 0.0;
00364 
00365         int argi = 6;
00366 
00367     // finally check the command line to see if user specified orientation
00368     if (argi < argc) {
00369       if (strcmp(argv[argi],"-orient") == 0) {
00370         if (argc < (argi+7)) {
00371           opserr << "WARNING not enough paramaters after -orient flag for ele " <<
00372             eleTag << "- element zeroLengthSection eleTag? iNode? jNode? secTag? " <<
00373             "<-orient x1? x2? x3? y1? y2? y3?>\n";                      
00374           return TCL_ERROR;             
00375         } else {
00376           argi++;
00377           double value;
00378           // read the x values
00379           for (int i=0; i<3; i++)  {
00380             if (Tcl_GetDouble(interp, argv[argi], &value) != TCL_OK) {
00381               opserr << "WARNING invalid -orient value for ele  " <<
00382                 eleTag << argv[argi] <<
00383                 "- element zeroLengthSection eleTag? iNode? jNode secTag? " <<
00384                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00385               return TCL_ERROR;
00386             } else {
00387               argi++;
00388               x(i) = value;
00389             }
00390           }
00391           // read the y values
00392           for (int j=0; j<3; j++)  {
00393             if (Tcl_GetDouble(interp, argv[argi], &value) != TCL_OK) {
00394               opserr << "WARNING invalid -orient value for ele  " <<
00395                 eleTag << argv[argi] <<
00396                 "- element zeroLengthSection eleTag? iNode? jNode? secTag? " <<
00397                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00398               return TCL_ERROR;
00399             } else {
00400               argi++;
00401               y(j) = value;             
00402             }
00403           }
00404         }
00405       }
00406     }
00407     
00408     //
00409     // now we create the element and add it to the domain
00410     //
00411 
00412     SectionForceDeformation *theSection = theBuilder->getSection(secTag);
00413     
00414     if (theSection == 0) {
00415       opserr << "zeroLengthSection -- no section with tag " << secTag << " exists in Domain\n";
00416       return TCL_ERROR;         
00417     }
00418     
00419     Element *theEle = new ZeroLengthSection(eleTag, ndm, iNode, jNode, x, y, *theSection);
00420     
00421     if (theEle == 0)
00422       return TCL_ERROR;
00423     
00424     if (theDomain->addElement(theEle) == false)
00425       return TCL_ERROR;
00426     
00427     return TCL_OK;
00428 }
00429 
00430 /*
00431 int
00432 TclModelBuilder_addZeroLengthND(ClientData clientData, Tcl_Interp *interp,
00433                               int argc, TCL_Char **argv,
00434                               Domain *theDomain,
00435                               TclModelBuilder *theBuilder) {
00436 
00437     int ndm = theBuilder->getNDM(); // the spatial dimension of the problem
00438 
00439     //
00440     // first scan the command line to obtain eleID, iNode, jNode, material ID's
00441     // and their directions, and the orientation of ele xPrime and yPrime not
00442     // along the global x and y axis
00443     //
00444     
00445     int eleTag, iNode, jNode;
00446     
00447     // a quick check on number of args
00448     if (argc < 6) {
00449         opserr << "WARNING too few arguments %s %s %s\n" <<
00450                                 "want - element zeroLengthND eleTag? iNode? jNode? " <<
00451                                 "NDTag? <1DTag?>" <<
00452                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";
00453         return TCL_ERROR;
00454     }
00455 
00456     // get the ele tag 
00457     if (Tcl_GetInt(interp, argv[2], &eleTag) != TCL_OK) {
00458         opserr << "WARNING invalied eleTag %s %s %s %s\n" << 
00459                                 argv[2],
00460                                 "- element zeroLengthND eleTag? iNode? jNode? " <<
00461                                 "NDTag? <1DTag?>" <<
00462                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00463         return TCL_ERROR;
00464     }
00465 
00466     // get the two end nodes
00467     if (Tcl_GetInt(interp, argv[3], &iNode) != TCL_OK) {
00468         opserr << "WARNING invalied iNode %s %s %s %s\n" << 
00469                                 argv[3],
00470                                 "- element zeroLengthND eleTag? iNode? jNode? " <<
00471                                 "NDTag? <1DTag?>" <<
00472                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00473         return TCL_ERROR;
00474     }
00475 
00476     if (Tcl_GetInt(interp, argv[4], &jNode) != TCL_OK) {
00477         opserr << "WARNING invalid jNode %s %s %s %s\n" << 
00478                                 argv[4],
00479                                 "- element zeroLengthND eleTag? iNode? jNode? " <<
00480                                 "NDTag? <1DTag?>" <<
00481                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00482         return TCL_ERROR;
00483     }
00484 
00485         int NDTag;
00486 
00487     if (Tcl_GetInt(interp, argv[5], &NDTag) != TCL_OK) {
00488         opserr << "WARNING invalid NDTag %s %s %s %s\n" << 
00489                                 argv[5],
00490                                 "- element zeroLengthND eleTag? iNode? jNode? " <<
00491                                 "NDTag? <1DTag?>" <<
00492                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00493         return TCL_ERROR;
00494     }
00495 
00496         UniaxialMaterial *the1DMat = 0;
00497 
00498         int argi = 6;
00499 
00500         if (argc > 6 && strcmp(argv[6],"-orient") != 0) {
00501 
00502                 int uniTag;
00503 
00504                 if (Tcl_GetInt(interp, argv[6], &uniTag) != TCL_OK) {
00505                         opserr << "WARNING invalid 1DTag %s %s %s %s\n" << 
00506                                         argv[5],
00507                                         "- element zeroLengthND eleTag? iNode? jNode? " <<
00508                                         "NDTag? <1DTag?>" <<
00509                                         "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00510                         return TCL_ERROR;
00511                 }
00512 
00513                 the1DMat = theBuilder->getUniaxialMaterial(uniTag);
00514 
00515                 if (the1DMat == 0)
00516                         opserr << "WARNING UniaxialMaterial %d not found in model, %s" <<
00517                                 uniTag, "proceeding without\n";
00518 
00519                 argi = 7;
00520         }
00521 
00522     // create the vectors for the element orientation
00523     Vector x(3); x(0) = 1.0; x(1) = 0.0; x(2) = 0.0;
00524     Vector y(3); y(0) = 0.0; y(1) = 1.0; y(2) = 0.0;
00525 
00526     // finally check the command line to see if user specified orientation
00527     if (argi < argc) {
00528         if (strcmp(argv[argi],"-orient") == 0) {
00529             if (argc < (argi+7)) {
00530                 opserr << "WARNING %s %d %s %s %s %s\n" << 
00531                                 "not enough paramaters after -orient flag for ele " <<
00532                                 eleTag,
00533                                 "- element zeroLengthND eleTag? iNode? jNode? " <<
00534                                 "NDTag? <1DTag?>" <<
00535                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00536                 return TCL_ERROR;               
00537             } else {
00538                 argi++;
00539                 double value;
00540                 // read the x values
00541                 for (int i=0; i<3; i++)  {
00542                     if (Tcl_GetDouble(interp, argv[argi], &value) != TCL_OK) {
00543                         opserr << "WARNING %s %d %s %s %s %s\n" << 
00544                                                 "invalid -orient value for ele  " <<
00545                                                 eleTag,
00546                                                 argv[argi],
00547                                                 "- element zeroLengthND eleTag? iNode? jNode? " <<
00548                                                 "NDTag? <1DTag?>" <<
00549                                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00550                         return TCL_ERROR;
00551                     } else {
00552                         argi++;
00553                         x(i) = value;
00554                     }
00555                 }
00556                 // read the y values
00557                 for (int j=0; j<3; j++)  {
00558                     if (Tcl_GetDouble(interp, argv[argi], &value) != TCL_OK) {
00559                         opserr << "WARNING %s %d %s %s %s %s\n" << 
00560                                                 "invalid -orient value for ele  " <<
00561                                                 eleTag,
00562                                                 argv[argi],
00563                                                 "- element zeroLengthND eleTag? iNode? jNode? " <<
00564                                                 "NDTag? <1DTag?>" <<
00565                                                 "<-orient x1? x2? x3? y1? y2? y3?>\n";  
00566                         return TCL_ERROR;
00567                     } else {
00568                         argi++;
00569                         y(j) = value;           
00570                     }
00571                 }
00572             }
00573         }
00574     }
00575     
00576     //
00577     // now we create the element and add it to the domain
00578     //
00579 
00580         NDMaterial *theNDMat = theBuilder->getNDMaterial(NDTag);
00581 
00582         if (theNDMat == 0) {
00583                 opserr << "%s -- no NDMaterial with tag %d exists in Domain\n" << 
00584                         "zeroLengthND" << NDTag);       
00585                 return TCL_ERROR;               
00586         }
00587 
00588         Element *theEle = 0;
00589 
00590         if (the1DMat == 0)
00591                 theEle = new ZeroLengthND(eleTag, ndm, iNode, jNode, x, y, *theNDMat);
00592         else
00593                 theEle = new ZeroLengthND(eleTag, ndm, iNode, jNode, x, y, *theNDMat, *the1DMat);
00594     
00595         if (theEle == 0)
00596                 return TCL_ERROR;
00597    
00598     if (theDomain->addElement(theEle) == false)
00599                 return TCL_ERROR;
00600 
00601     return TCL_OK;
00602 }
00603 */

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