00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
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 }