TclDrainMaterialCommand.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.4 $
00022 // $Date: 2003/02/25 23:34:15 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/drain/TclDrainMaterialCommand.cpp,v $
00024 
00025 // Written: MHS
00026 // Created: Aug 2001
00027 //
00028 // Description: This file contains the implementation of the
00029 // TclModelBuilder_addDrainMaterial() function. 
00030 
00031 #include <DrainHardeningMaterial.h>
00032 #include <DrainBilinearMaterial.h>
00033 #include <DrainClough1Material.h>
00034 #include <DrainClough2Material.h>
00035 #include <DrainPinch1Material.h>
00036 
00037 #include <TclModelBuilder.h>
00038 #include <Vector.h>
00039 #include <string.h>
00040 
00041 static void printCommand(int argc, TCL_Char **argv)
00042 {
00043     opserr << "Input command: ";
00044     for (int i=0; i<argc; i++)
00045         opserr << argv[i] << " ";
00046     opserr << endln;
00047 } 
00048 
00049 UniaxialMaterial *
00050 TclModelBuilder_addDrainMaterial(ClientData clientData, Tcl_Interp *interp, int argc, 
00051                                  TCL_Char **argv, TclModelBuilder *theTclBuilder)
00052 {
00053         if (argc < 3) {
00054                 opserr << "WARNING insufficient number of arguments\n";
00055                 printCommand(argc, argv);
00056                 return 0;
00057         }
00058 
00059         int tag;
00060         if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK) {
00061             opserr << "WARNING invalid uniaxialMaterial tag\n";
00062                 printCommand(argc, argv);
00063             return 0;
00064         }
00065 
00066         UniaxialMaterial *theMaterial = 0;
00067 
00068         if (strcmp(argv[1],"Hardening2") == 0 || strcmp(argv[1],"Hardening02") == 0) {
00069                 if (argc < 7) {
00070                         opserr << "WARNING invalid number of arguments\n";
00071                         printCommand(argc,argv);
00072                         opserr << "Want: uniaxialMaterial Hardening02 tag? E? sigY? Hiso? Hkin?" << endln;
00073                         return 0;
00074                 }
00075                 
00076                 double E, sigY, Hiso, Hkin;
00077 
00078                 if (Tcl_GetDouble(interp, argv[3], &E) != TCL_OK) {
00079                         opserr << "WARNING invalid E\n";
00080                         printCommand(argc, argv);
00081                         return 0;       
00082                 }
00083                 if (Tcl_GetDouble(interp, argv[4], &sigY) != TCL_OK) {
00084                         opserr << "WARNING invalid sigY\n";
00085                         printCommand(argc, argv);
00086                         return 0;       
00087                 }
00088                 if (Tcl_GetDouble(interp, argv[5], &Hiso) != TCL_OK) {
00089                         opserr << "WARNING invalid Hiso\n";
00090                         printCommand(argc, argv);
00091                         return 0;       
00092                 }
00093                 if (Tcl_GetDouble(interp, argv[6], &Hkin) != TCL_OK) {
00094                         opserr << "WARNING invalid Hkin\n";
00095                         printCommand(argc, argv);
00096                         return 0;       
00097                 }
00098 
00099                 theMaterial = new DrainHardeningMaterial(tag, E, sigY, Hiso, Hkin);
00100         }
00101        
00102         else if (strcmp(argv[1],"BiLinear") == 0) {
00103                 if (argc < 19) {
00104                         opserr << "WARNING insufficient arguments\n";
00105                         printCommand(argc,argv);
00106                         opserr << "Want: uniaxialMaterial BiLinear tag? ..." << endln;
00107                         return 0;
00108                 }
00109                 
00110                 Vector input(16);
00111                 double temp;
00112 
00113                 for (int i = 3, j = 0; j < 16; i++, j++) {
00114                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00115                                 opserr << "WARNING invalid input, data " << i << endln;
00116                                 printCommand(argc, argv);
00117                                 return 0;
00118                         }
00119                         input(j) = temp;
00120                 }
00121 
00122                 theMaterial = new DrainBilinearMaterial(tag, input);
00123         }
00124 
00125         else if (strcmp(argv[1],"Clough1") == 0) {
00126                 if (argc < 19) {
00127                         opserr << "WARNING insufficient arguments\n";
00128                         printCommand(argc,argv);
00129                         opserr << "Want: uniaxialMaterial Clough1 tag? ..." << endln;
00130                         return 0;
00131                 }
00132                 
00133                 Vector input(16);
00134                 double temp;
00135 
00136                 for (int i = 3, j = 0; j < 16; i++, j++) {
00137                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00138                                 opserr << "WARNING invalid input, data " << i << endln;
00139                                 printCommand(argc, argv);
00140                                 return 0;
00141                         }
00142                         input(j) = temp;
00143                 }
00144 
00145                 theMaterial = new DrainClough1Material(tag, input);
00146         }
00147 
00148         else if (strcmp(argv[1],"Clough2") == 0) {
00149                 if (argc < 19) {
00150                         opserr << "WARNING insufficient arguments\n";
00151                         printCommand(argc,argv);
00152                         opserr << "Want: uniaxialMaterial Clough2 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 DrainClough2Material(tag, input);
00169         }
00170 
00171         else if (strcmp(argv[1],"Pinch1") == 0) {
00172                 if (argc < 22) {
00173                         opserr << "WARNING insufficient arguments\n";
00174                         printCommand(argc,argv);
00175                         opserr << "Want: uniaxialMaterial Pinch1 tag? ..." << endln;
00176                         return 0;
00177                 }
00178                 
00179                 Vector input(19);
00180                 double temp;
00181 
00182                 for (int i = 3, j = 0; j < 19; i++, j++) {
00183                         if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
00184                                 opserr << "WARNING invalid input, data " << i << endln;
00185                                 printCommand(argc, argv);
00186                                 return 0;
00187                         }
00188                         input(j) = temp;
00189                 }
00190 
00191                 theMaterial = new DrainPinch1Material(tag, input);
00192         }
00193 
00194         return theMaterial;
00195 }

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