TclSnapMaterialCommand.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: 2005/01/14 23:45:58 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/snap/TclSnapMaterialCommand.cpp,v $
00024 
00025 // Written: Arash Altoontash, Gregory Deierlein,
00026 // Created: Feb 2002
00027 // Modified: Arash June 2004
00028 //
00029 // Description: This file contains the implementation of the
00030 // TclModelBuilder_addSnapMaterial() function. 
00031 
00032 //#include <SnapBilinearMaterial.h>
00033 //#include <SnapCloughMaterial.h>
00034 //#include <SnapPinchMaterial.h>
00035 
00036 #include <Pinching.h>
00037 #include <Clough.h>
00038 #include <PinchingDamage.h>
00039 #include <CloughDamage.h>
00040 #include <Bilinear.h>
00041 #include <DamageModel.h>
00042 
00043 #include <TclModelBuilder.h>
00044 #include <Vector.h>
00045 #include <string.h>
00046 
00047 static void printCommand(int argc, TCL_Char **argv)
00048 {
00049   opserr << "Input command: ";
00050   for (int i=0; i<argc; i++)
00051     opserr << argv[i] << " ";
00052   opserr << endln;
00053 } 
00054 
00055 UniaxialMaterial *
00056 TclModelBuilder_addSnapMaterial(ClientData clientData, Tcl_Interp *interp, int argc, 
00057                                 TCL_Char **argv, TclModelBuilder *theTclBuilder)
00058 {
00059         if (argc < 3) {
00060                 opserr << "WARNING insufficient number of arguments for the Snap material model\n";
00061                 printCommand(argc, argv);
00062                 return 0;
00063         }
00064         
00065         int tag;
00066         if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK) {
00067                 opserr << "WARNING invalid uniaxialMaterial tag\n";
00068                 printCommand(argc, argv);
00069                 return 0;
00070         }
00071         
00072         UniaxialMaterial *theMaterial = 0;
00073 
00074         if (strcmp(argv[1],"Bilinear") == 0) {
00075                 if (argc < 15) {
00076                         opserr << "WARNING insufficient arguments\n";
00077                         opserr << "Want: uniaxialMaterial Bilinear tag? ..." << endln;
00078                         return 0;
00079                 }
00080                 
00081                 Vector input(12);
00082                 double temp;
00083                 
00084                 for (int i = 3, j = 0; j < 12; i++, j++) {
00085                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00086                                 opserr << "WARNING invalid input, data " << i << endln;
00087                                 printCommand(argc, argv);
00088                                 return 0;
00089                         }
00090                         input(j) = temp;
00091                 }
00092                 
00093                 DamageModel *strength;
00094                 if ( (int) input(9) == 0 )
00095                 {
00096                         strength = NULL;
00097                 }
00098                 else
00099                 {
00100                         strength = theTclBuilder->getDamageModel( (int) input(9) );
00101                         
00102                         if (strength == 0) {
00103                                 opserr << "WARNING damage model for strength deterioration not found\n";
00104                                 opserr << "Damage Model: " << input(9);
00105                                 opserr << "\nBinilear material: " << tag << endln;
00106                                 exit (-1);
00107                         }
00108                 }
00109                 
00110                 DamageModel *stiffness;
00111                 if ( (int) input(10) == 0 )
00112                 {
00113                         stiffness = NULL;
00114                 }
00115                 else
00116                 {
00117                         stiffness = theTclBuilder->getDamageModel( (int) input(10) );
00118                         
00119                         if (stiffness == 0) {
00120                                 opserr << "WARNING damage model for stiffness deterioration not found\n";
00121                                 opserr << "Damage Model: " << input(10);
00122                                 opserr << "\nBinilear material: " << tag << endln;
00123                                 exit (-1);
00124                         }
00125                 }
00126 
00127                 DamageModel *capping;
00128                 if ( (int) input(11) == 0 )
00129                 {
00130                         capping = NULL;
00131                 }
00132                 else
00133                 {
00134                         capping = theTclBuilder->getDamageModel( (int) input(11) );
00135                         
00136                         if (capping == 0) {
00137                                 opserr << "WARNING damage model for capping deterioration not found\n";
00138                                 opserr << "Damage Model: " << input(11);
00139                                 opserr << "\nBinilear material: " << tag << endln;
00140                                 exit (-1);
00141                         }
00142                 }
00143 
00144                 theMaterial = new Bilinear(tag, input, strength, stiffness,capping);
00145         } 
00146         
00147         else if ( strcmp(argv[1],"Clough") == 0 || strcmp(argv[1],"clough") == 0 ) {
00148                 
00149                 if ( argc < 19 ) {
00150                         opserr << "WARNING insufficient arguments\n";
00151                         printCommand(argc,argv);
00152                         opserr << "Want: uniaxialMaterial Clough_Damage tag? ..." << endln;
00153                         return 0;
00154                 }
00155                 
00156                 Vector input(16);
00157                 double temp;
00158                 
00159                 for (int i = 3, j = 0; j < 16; i++, j++) {
00160                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00161                                 opserr << "WARNING invalid input, data " << i << endln;
00162                                 printCommand(argc, argv);
00163                                 return 0;
00164                         }
00165                         input(j) = temp;
00166                 }
00167                 
00168                 theMaterial = new Clough(tag, input);
00169         }
00170         
00171         else if ( strcmp(argv[1],"Clough_Damage") == 0 || strcmp(argv[1],"CloughDamage") == 0 ||
00172                 strcmp(argv[1],"Clough_Damage") == 0 || strcmp(argv[1],"CloughDamage") == 0 ) {
00173                 if ( argc < 15 ) {
00174                         opserr << "WARNING insufficient arguments\n";
00175                         printCommand(argc,argv);
00176                         opserr << "Want: uniaxialMaterial Clough tag? ..." << endln;
00177                         return 0;
00178                 }
00179                 
00180                 Vector input(12);
00181                 double temp;
00182                 
00183                 for (int i = 3, j = 0; j < 12; i++, j++) {
00184                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00185                                 opserr << "WARNING invalid input, data " << i << endln;
00186                                 printCommand(argc, argv);
00187                                 return 0;
00188                         }
00189                         input(j) = temp;
00190                 }
00191                 
00192                 DamageModel *strength;
00193                 if ( (int) input(8) == 0 )
00194                 {
00195                         strength = NULL;
00196                 }
00197                 else
00198                 {
00199                         strength = theTclBuilder->getDamageModel( (int) input(8) );
00200                         
00201                         if (strength == 0) {
00202                                 opserr << "WARNING damage model for strength deterioration not found\n";
00203                                 opserr << "Damage Model: " << input(8);
00204                                 opserr << "\nClough material: " << tag << endln;
00205                                 exit (-1);
00206                         }
00207                 }
00208                 
00209                 DamageModel *stiffness;
00210                 if ( (int) input(9) == 0 )
00211                 {
00212                         stiffness = NULL;
00213                 }
00214                 else
00215                 {
00216                         stiffness = theTclBuilder->getDamageModel( (int) input(9) );
00217                         
00218                         if (stiffness == 0) {
00219                                 opserr << "WARNING damage model for stiffness deterioration not found\n";
00220                                 opserr << "Damage Model: " << input(9);
00221                                 opserr << "\nClough material: " << tag << endln;
00222                                 exit (-1);
00223                         }
00224                 }
00225                 
00226                 DamageModel *accelerated;
00227                 if ( (int) input(10) == 0 )
00228                 {
00229                         accelerated = NULL;
00230                 }
00231                 else
00232                 {
00233                         accelerated = theTclBuilder->getDamageModel( (int) input(10) );
00234                         
00235                         if (accelerated == 0) {
00236                                 opserr << "WARNING damage model for accelerated stiffness deterioration not found\n";
00237                                 opserr << "Damage Model: " << input(10);
00238                                 opserr << "\nClough material: " << tag << endln;
00239                                 exit (-1);
00240                         }
00241                 }
00242 
00243                 DamageModel *capping;
00244                 if ( (int) input(11) == 0 )
00245                 {
00246                         capping = NULL;
00247                 }
00248                 else
00249                 {
00250                         capping = theTclBuilder->getDamageModel( (int) input(11) );
00251                         
00252                         if (capping == 0) {
00253                                 opserr << "WARNING damage model for capping deterioration not found\n";
00254                                 opserr << "Damage Model: " << input(11);
00255                                 opserr << "\nClough material: " << tag << endln;
00256                                 exit (-1);
00257                         }
00258                 }
00259                 theMaterial = new CloughDamage (tag, input, strength, stiffness, accelerated, capping);
00260         }
00261         
00262         else if ( strcmp(argv[1],"Pinching") == 0 || strcmp(argv[1],"pinching") == 0 ) {
00263                 if ( argc < 22 ) {
00264                         opserr << "WARNING insufficient arguments\n";
00265                         printCommand(argc,argv);
00266                         opserr << "Want: uniaxialMaterial Pinching tag? ..." << endln;
00267                         return 0;
00268                 }
00269                 
00270                 Vector input(19);
00271                 double temp;
00272                 
00273                 for (int i = 3, j = 0; j < 19; i++, j++) {
00274                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00275                                 opserr << "WARNING invalid input, data " << i << endln;
00276                                 printCommand(argc, argv);
00277                                 return 0;
00278                         }
00279                         input(j) = temp;
00280                 }
00281                 theMaterial = new Pinching(tag, input);
00282         }
00283         
00284         else if ( strcmp(argv[1],"Pinching_Damage") == 0 || strcmp(argv[1],"pinching_Damage") == 0 ||
00285                 strcmp(argv[1],"PinchingDamage") == 0 || strcmp(argv[1],"pinchingDamage") == 0 ) {
00286                 if ( argc < 18 ) {
00287                         opserr << "WARNING insufficient arguments\n";
00288                         printCommand(argc,argv);
00289                         opserr << "Want: uniaxialMaterial Pinching tag? ..." << endln;
00290                         return 0;
00291                 }
00292                 
00293                 Vector input(15);
00294                 double temp;
00295                 
00296                 for (int i = 3, j = 0; j < 15; i++, j++) {
00297                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00298                                 opserr << "WARNING invalid input, data " << i << endln;
00299                                 printCommand(argc, argv);
00300                                 return 0;
00301                         }
00302                         input(j) = temp;
00303                 }
00304                 
00305                 DamageModel *strength;
00306                 if ( (int) input(11) == 0 )
00307                 {
00308                         strength = NULL;
00309                 }
00310                 else
00311                 {
00312                         strength = theTclBuilder->getDamageModel( (int) input(11) );
00313                         
00314                         if (strength == 0) {
00315                                 opserr << "WARNING damage model for strength deterioration not found\n";
00316                                 opserr << "Damage Model: " << input(11);
00317                                 opserr << "\nPinching material: " << tag << endln;
00318                                 exit (-1);
00319                         }
00320                 }
00321                         
00322                 DamageModel *stiffness;
00323                 if ( (int) input(12) == 0 )
00324                 {
00325                         stiffness = NULL;
00326                 }
00327                 else
00328                 {
00329                         stiffness = theTclBuilder->getDamageModel( (int) input(12) );
00330                         if (stiffness == 0) {
00331                                 opserr << "WARNING damage model for stiffness deterioration not found\n";
00332                                 opserr << "Damage Model: " << input(12);
00333                                 opserr << "\nPinching material: " << tag << endln;
00334                                 exit (-1);
00335                         }
00336                 }
00337                         
00338                 DamageModel *accelerated;
00339                 if ( (int) input(13) == 0 )
00340                 {
00341                         accelerated = NULL;                                     
00342                 }
00343                 else
00344                 {
00345                         accelerated = theTclBuilder->getDamageModel( (int) input(13) );
00346                         if (accelerated == 0) {
00347                                 opserr << "WARNING damage model for accelerated stiffness deterioration not found\n";
00348                                 opserr << "Damage Model: " << input(13);
00349                                 opserr << "\nPinching material: " << tag << endln;
00350                                 exit (-1);
00351                         }
00352                 }
00353 
00354                 DamageModel *capping;
00355                 if ( (int) input(14) == 0 )
00356                 {
00357                         capping = NULL;
00358                 }
00359                 else
00360                 {
00361                         capping = theTclBuilder->getDamageModel( (int) input(14) );
00362                         
00363                         if (capping == 0) {
00364                                 opserr << "WARNING damage model for capping deterioration not found\n";
00365                                 opserr << "Damage Model: " << input(14);
00366                                 opserr << "\nPinching material: " << tag << endln;
00367                                 exit (-1);
00368                         }
00369                 }
00370                 theMaterial = new PinchingDamage(tag, input, strength, stiffness, accelerated, capping);
00371         }
00372         
00373         return theMaterial;
00374 }
00375 

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