TclTemplateNDMaterialCommand.cpp

Go to the documentation of this file.
00001 /*
00002 ################################################################################
00003 # COPYRIGHT (C):     :-))                                                      #
00004 # PROJECT:           Object Oriented Finite Element Program                    #
00005 # PURPOSE:           General platform for elaso-plastic constitutive model     #
00006 #                    implementation                                            #
00007 # CLASS:             Template3Dep (the base class for all material point)     #
00008 #                                                                              #
00009 # VERSION:                                                                     #
00010 # LANGUAGE:          C++.ver >= 2.0 ( Borland C++ ver=3.00, SUN C++ ver=2.1 )  #
00011 # TARGET OS:         DOS || UNIX || . . .                                      #
00012 # DESIGNER(S):       Boris Jeremic, Zhaohui Yang                               #
00013 # PROGRAMMER(S):     Boris Jeremic, Zhaohui Yang                               #
00014 #                                                                              #
00015 #                                                                              #
00016 # DATE:              
00017 # UPDATE HISTORY:    
00018 #                                                                              #
00019 #                                                                              #
00020 #                                                                              #
00021 #                                                                              #
00022 */
00023 
00024 #include <tcl.h>
00025 #include <stdlib.h>
00026 #include <string.h>
00027 #include <iOPS_Stream.h>
00028 #include <ErrorHandler.h>
00029 
00030 // includes for Drucker-Prager and von Mises yield surface and potential surface classes
00031 #include <DP_YS.h>
00032 #include <DP_PS.h>
00033 #include <CAM_YS.h>
00034 #include <CAM_PS.h>
00035 #include <VM_YS.h>
00036 #include <VM_PS.h>
00037 #include <MD_YS.h>
00038 #include <MD_PS.h>
00039 
00040 // includes for scalar evolution law class
00041 #include <EL_S.h>
00042 #include <EL_LEp.h>
00043 #include <EL_LEeq.h>
00044 #include <EL_NLEeq.h>
00045 
00046 // includes for tensorial evolution law class
00047 #include <EL_T.h>
00048 #include <EL_LEij.h>
00049 #include <EL_NLEij.h>
00050 
00051 // include for elasto-plastic state class
00052 #include <EPState.h>
00053 
00054 // include for Material class
00055 #include <Template3Dep.h>
00056 
00057 
00058 YieldSurface *
00059 TclYieldSurfaceCommand(ClientData clientData, Tcl_Interp *interp, 
00060                        int argc, char **argv);
00061 
00062 PotentialSurface *
00063 TclPotentialSurfaceCommand(ClientData clientData, Tcl_Interp *interp, 
00064                        int argc, char **argv); 
00065                        
00066 EPState *
00067 TclEPStateCommand(ClientData clientData, Tcl_Interp *interp, 
00068                   int argc, char **argv); 
00069                        
00070                        
00071 EvolutionLaw_S *
00072 TclEvolutionLawSCommand(ClientData clientData, Tcl_Interp *interp, 
00073                         int argc, char **argv); 
00074                         
00075 EvolutionLaw_T *
00076 TclEvolutionLawTCommand(ClientData clientData, Tcl_Interp *interp, 
00077                         int argc, char **argv); 
00078 
00079 NDMaterial *
00080 TcladdTemplate3Dep(ClientData clientData, Tcl_Interp *interp,  int argc, 
00081                    char **argv, Domain*theTclDomain, int startArg)
00082 {
00083   int tag;
00084   YieldSurface     *YS   =0;        
00085   PotentialSurface *PS   =0;
00086   EPState          *EPS  =0;
00087   EvolutionLaw_S   *ELS1 =0; 
00088   EvolutionLaw_S   *ELS2 =0; 
00089   EvolutionLaw_S   *ELS3 =0; 
00090   EvolutionLaw_S   *ELS4 =0; 
00091   EvolutionLaw_T   *ELT1 =0;
00092   EvolutionLaw_T   *ELT2 =0;
00093   EvolutionLaw_T   *ELT3 =0;
00094   EvolutionLaw_T   *ELT4 =0;   
00095 
00096   
00097   if (Tcl_GetInt(interp, argv[startArg+1], &tag) != TCL_OK) {
00098         g3ErrorHandler->warning("invalid tag: %s for Template3Dep material",
00099                           argv[startArg+1]);
00100         return 0;               
00101   }
00102   
00103   int endMarker = startArg+2;
00104   while (endMarker < argc) {
00105 
00106       int numListArgs =0;
00107       char **listArgs =0;
00108 
00109       // create the yield surface object on the flag -ys
00110       if ((strcmp(argv[endMarker],"-ys") == 0) || 
00111           (strcmp(argv[endMarker],"-YS") == 0)) {
00112 
00113           endMarker++;
00114           
00115           if (Tcl_SplitList(interp, argv[endMarker], 
00116                             &numListArgs, &listArgs) != TCL_OK) {
00117 
00118               g3ErrorHandler->warning("problem splitting list: %s %s %d",
00119                                       argv[endMarker],
00120                                       "for Template3Dep material", tag);
00121               return 0;
00122           }       
00123           
00124           YS = TclYieldSurfaceCommand(clientData, interp, numListArgs, listArgs);
00125           if (YS == 0) {
00126               g3ErrorHandler->warning("problem splitting list: %s %s %d",
00127                                       argv[endMarker],
00128                                       "for Template3Dep material", tag);
00129               return 0;
00130           }
00131           endMarker++;
00132       } 
00133 
00134       // create the potential surface object on the flag -ys
00135       if ((strcmp(argv[endMarker],"-ps") == 0) || 
00136           (strcmp(argv[endMarker],"-PS") == 0)) {
00137 
00138           endMarker++;
00139           
00140           if (Tcl_SplitList(interp, argv[endMarker], 
00141                             &numListArgs, &listArgs) != TCL_OK) {
00142 
00143               g3ErrorHandler->warning("problem splitting list: %s %s %d",
00144                                       argv[endMarker],
00145                                       "for Template3Dep material", tag);
00146               return 0;
00147           }       
00148           
00149           PS = TclPotentialSurfaceCommand(clientData, interp, numListArgs, listArgs);
00150           if (PS == 0) {
00151               g3ErrorHandler->warning("problem splitting list: %s %s %d",
00152                                       argv[endMarker],
00153                                       "for Template3Dep material", tag);
00154               return 0;
00155           }
00156           endMarker++;
00157       } 
00158 
00159 
00160       // create the EPState object on the flag -eps
00161       if ((strcmp(argv[endMarker],"-eps") == 0) || 
00162           (strcmp(argv[endMarker],"-EPS") == 0)) {
00163 
00164           endMarker++;
00165           
00166           if (Tcl_SplitList(interp, argv[endMarker], 
00167                             &numListArgs, &listArgs) != TCL_OK) {
00168 
00169               g3ErrorHandler->warning("problem splitting list: %s %s %d",
00170                                       argv[endMarker],
00171                                       "for Template3Dep material", tag);
00172               return 0;
00173           }       
00174           
00175           EPS = TclEPStateCommand(clientData, interp, numListArgs, listArgs);
00176           if (PS == 0) {
00177               g3ErrorHandler->warning("problem splitting list: %s %s %d",
00178                                       argv[endMarker],
00179                                       "for Template3Dep material", tag);
00180               return 0;
00181           }
00182           endMarker++;
00183       } 
00184           
00185           
00186       else {
00187           endMarker++;
00188       }
00189 
00190       if (listArgs != 0) {
00191           Tcl_Free((char *) listArgs);
00192       }
00193   }
00194 
00195   NDMaterial *theMaterial = new Template3Dep(tag,
00196                                              YS,
00197                                              PS,
00198                                              EPS,
00199                                              ELS1,
00200                                              ELS2,
00201                                              ELS3,
00202                                              ELS4,
00203                                              ELT1,
00204                                              ELT2,
00205                                              ELT3,
00206                                              ELT4);
00207   
00208   return theMaterial;
00209 }
00210 
00211 
00212 
00213 YieldSurface *
00214 TclYieldSurfaceCommand(ClientData clientData, Tcl_Interp *interp, 
00215                        int argc, char **argv)
00216 {
00217   // parse args and return a DruckerPrager yield surface
00218   if ((strcmp(argv[0],"DruckerPrager") == 0) || 
00219       (strcmp(argv[0],"DP") == 0)) {
00220 
00221     return new DPYieldSurface();
00222   }
00223 
00224   // parse args and return a Cam Clay yield surface
00225   else if ((strcmp(argv[0],"CamClay") == 0) || 
00226       (strcmp(argv[0],"Cam") == 0)) {
00227 
00228     double mp = 0.0;
00229     if (argc == 2) {
00230       if (Tcl_GetDouble(interp, argv[1], &mp) != TCL_OK) {
00231         g3ErrorHandler->warning("invalid M: %s for -PS CamClay M",
00232                                 argv[1]);
00233         return 0;               
00234       }
00235     }
00236     
00237     // create the object & return it
00238     return new CAMYieldSurface(mp);
00239   }
00240 
00241   // parse args and return a VonMises yield surface
00242   else if ((strcmp(argv[0],"VonMises") == 0) || 
00243       (strcmp(argv[0],"VM") == 0)) {
00244 
00245     return new VMYieldSurface();
00246 
00247   }
00248 
00249   else {
00250     g3ErrorHandler->warning("unkown Yield Surface type: %s\n",
00251                             argv[0]);
00252     return 0;
00253   }
00254 }
00255 
00256 
00257 
00258 PotentialSurface *
00259 TclPotentialSurfaceCommand(ClientData clientData, Tcl_Interp *interp, 
00260                        int argc, char **argv)
00261 
00262 {  
00263   // parse args and return a DruckerPrager potential surface
00264   if ((strcmp(argv[0],"DruckerPrager") == 0) || 
00265       (strcmp(argv[0],"DP") == 0)) {
00266 
00267     double a2d = 0.0;
00268     if (argc == 2) {
00269       if (Tcl_GetDouble(interp, argv[1], &a2d) != TCL_OK) {
00270         g3ErrorHandler->warning("invalid a2d: %s for -PS DruckerPrage a2d",
00271                                 argv[1]);
00272         return 0;               
00273       }
00274     }
00275     
00276     // create the object & return it
00277     return new DPPotentialSurface(a2d);
00278   }
00279   
00280   // parse args and return a CamClay potential surface
00281   else if ((strcmp(argv[0],"CamClay") == 0) || 
00282       (strcmp(argv[0],"Cam") == 0)) {
00283 
00284     double mp = 0.0;
00285     if (argc == 2) {
00286       if (Tcl_GetDouble(interp, argv[1], &mp) != TCL_OK) {
00287         g3ErrorHandler->warning("invalid M: %s for -PS CamClay M",
00288                                 argv[1]);
00289         return 0;               
00290       }
00291     }
00292     
00293     // create the object & return it
00294     return new CAMPotentialSurface(mp);
00295   }
00296 
00297   // parse args and return a VonMises potential surface
00298   else if ((strcmp(argv[0],"VonMises") == 0) || 
00299       (strcmp(argv[0],"VM") == 0)) {
00300 
00301     return new VMPotentialSurface();
00302 
00303   }
00304 
00305   // unknown type return error
00306   else {
00307     g3ErrorHandler->warning("unkown Potential Surface type: %s\n",
00308                             argv[0]);
00309     return 0;
00310   }
00311 }                      
00312 
00313 
00314 EPState *
00315 TclEPStateCommand(ClientData clientData, Tcl_Interp *interp, 
00316                   int argc, char **argv)
00317 {
00318   double              Eod;
00319   double              Ed;
00320   double              nu;
00321   double              rho;
00322   stresstensor        stressp;
00323   straintensor        strainp;
00324   straintensor        Estrainp;
00325   straintensor        Pstrainp;
00326   straintensor        dEstrainp;
00327   straintensor        dPstrainp;
00328   int                 NScalarp;
00329   double              Scalarp;
00330   int                 NTensorp;
00331   stresstensor        Tensorp;
00332   tensor              Eepp;
00333   stresstensor        Stress_commitp;
00334   straintensor        Strain_commitp;     
00335   double              Scalar_commitp;
00336   stresstensor        Tensor_commitp; 
00337   tensor              Eep_commitp;
00338   stresstensor        Stress_initp;    
00339   straintensor        Strain_initp;      
00340   double              Scalar_initp;
00341   stresstensor        Tensor_initp;
00342   tensor              Eep_initp; 
00343   bool                Convergedp;
00344 
00345   return 0;
00346 }                      
00347                        
00348 EvolutionLaw_S *
00349 TclEvolutionLawSCommand(ClientData clientData, Tcl_Interp *interp, 
00350                         int argc, char **argv)
00351 {
00352   return 0;
00353 }
00354                         
00355 EvolutionLaw_T *
00356 TclEvolutionLawTCommand(ClientData clientData, Tcl_Interp *interp, 
00357                         int argc, char **argv)
00358 {
00359   return 0;
00360 }
00361 
00362 
00363 
00364 
00365 
00366 
00367 
00368 
00369 
00370 
00371 

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