ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libBASS/Globals.cpp
(Generate patch)

Comparing:
branches/mmeineke/OOPSE/libBASS/Globals.cpp (file contents), Revision 377 by mmeineke, Fri Mar 21 17:42:12 2003 UTC vs.
trunk/OOPSE/libBASS/Globals.cpp (file contents), Revision 1210 by chrisfen, Tue Jun 1 14:27:28 2004 UTC

# Line 1 | Line 1
1 < #include <cstdlib>
2 < #include <cstdio>
3 < #include <cstring>
1 > #include <stdlib.h>
2 > #include <stdio.h>
3 > #include <string.h>
4  
5   #include "Globals.hpp"
6   #include "simError.h"
# Line 17 | Line 17
17   */
18  
19   //required parameters
20 < #define G_FORCEFIELD  1
21 < #define G_NCOMPONENTS 2
22 < #define G_TARGETTEMP  3
23 < #define G_ENSEMBLE    4
24 < #define G_DT          5
25 < #define G_RUNTIME     6
20 > #define G_FORCEFIELD         1
21 > #define G_NCOMPONENTS        2
22 > #define G_TARGETTEMP         3
23 > #define G_ENSEMBLE           4
24 > #define G_DT                 5
25 > #define G_RUNTIME            6
26  
27   //optional parameters
28 < #define G_INITIALCONFIG 7
29 < #define G_FINALCONFIG   8
30 < #define G_NMOL          9
31 < #define G_DENSITY       10
32 < #define G_BOX           11
33 < #define G_BOXX          12
34 < #define G_BOXY          13
35 < #define G_BOXZ          14
36 < #define G_SAMPLETIME    15
37 < #define G_STATUSTIME    16
38 < #define G_RRF           17
39 < #define G_DIELECTRIC    18
40 < #define G_TEMPSET       19
41 < #define G_THERMALTIME   20
42 < #define G_USEPBC 21
43 < #define G_MIXINGRULE 22
28 > #define G_INITIALCONFIG      7
29 > #define G_FINALCONFIG        8
30 > #define G_NMOL               9
31 > #define G_DENSITY           10
32 > #define G_BOX               11
33 > #define G_BOXX              12
34 > #define G_BOXY              13
35 > #define G_BOXZ              14
36 > #define G_SAMPLETIME        15
37 > #define G_STATUSTIME        16
38 > #define G_RCUT              17
39 > #define G_RSW               18
40 > #define G_DIELECTRIC        19
41 > #define G_TEMPSET           20
42 > #define G_THERMALTIME       21
43 > #define G_USEPBC            22
44 > #define G_MIXINGRULE        23
45 > #define G_USERF             24
46 > #define G_TARGETPRESSURE    25
47 > #define G_TAUTHERMOSTAT     26
48 > #define G_TAUBAROSTAT       27
49 > #define G_ZCONSTIME         28
50 > #define G_NZCONSTRAINTS     29
51 > #define G_ZCONSTOL          30
52 > #define G_ZCONSFORCEPOLICY  31
53 > #define G_SEED              32
54 > #define G_RESETTIME         33
55 > #define G_USEINITTIME       34
56 > #define G_USEINIT_XS_STATE  35
57 > #define G_ORTHOBOXTOLERANCE 36
58 > #define G_MINIMIZER         37
59 > #define G_MIN_MAXITER       38
60 > #define G_MIN_WRITEFRQ      39
61 > #define G_MIN_STEPSIZE      40
62 > #define G_MIN_FTOL          41
63 > #define G_MIN_GTOL          42
64 > #define G_MIN_LSTOL         43
65 > #define G_MIN_LSMAXITER     44
66 > #define G_ZCONSGAP          45
67 > #define G_ZCONSFIXTIME      46
68 > #define G_ZCONSUSINGSMD     47
69 > #define G_USE_SOLID_THERM_INT     48
70 > #define G_USE_LIQUID_THERM_INT    49
71 > #define G_THERM_INT_LAMBDA  50
72 > #define G_THERM_INT_K       51
73  
45
74   Globals::Globals(){
75    
76    int i;
77 +
78 +  hash_size = 23;
79 +  hash_shift = 4;
80    
81    components = NULL;
82    
# Line 69 | Line 100 | Globals::Globals(){
100    addHash( "boxY",          G_BOXY );
101    addHash( "boxZ",          G_BOXZ );
102    addHash( "sampleTime",    G_SAMPLETIME );
103 +  addHash( "resetTime",     G_RESETTIME );
104    addHash( "statusTime",    G_STATUSTIME );
105 <  addHash( "rRF",           G_RRF );
105 >  addHash( "cutoffRadius",  G_RCUT );
106 >  addHash( "switchingRadius",  G_RSW );
107    addHash( "dielectric",    G_DIELECTRIC );
108    addHash( "tempSet",       G_TEMPSET );
109    addHash( "thermalTime",   G_THERMALTIME );
110    addHash( "mixingRule",    G_MIXINGRULE);
111 <  addHash( "periodicBox",   G_USEPBC);
112 <  
113 <  // define some default values
111 >  addHash( "usePeriodicBoundaryConditions",        G_USEPBC);
112 >  addHash( "useReactionField",                     G_USERF );
113 >  addHash( "targetPressure",                       G_TARGETPRESSURE);
114 >  addHash( "tauThermostat",                        G_TAUTHERMOSTAT);
115 >  addHash( "tauBarostat",                          G_TAUBAROSTAT);
116 >  addHash( "zconsTime",                            G_ZCONSTIME);
117 >  addHash( "nZconstraints",                        G_NZCONSTRAINTS);
118 >  addHash( "zconsTol",                             G_ZCONSTOL);
119 >  addHash( "zconsForcePolicy",                     G_ZCONSFORCEPOLICY);
120 >  addHash( "seed",                                 G_SEED);
121 >  addHash( "useInitialTime",                       G_USEINITTIME);
122 >  addHash( "useInitialExtendedSystemState",        G_USEINIT_XS_STATE);
123 >  addHash( "orthoBoxTolerance",                    G_ORTHOBOXTOLERANCE);
124 >  addHash( "minimizer",                            G_MINIMIZER);
125 >  addHash( "minMaxIter",                           G_MIN_MAXITER);
126 >  addHash( "minWriteFrq",                          G_MIN_WRITEFRQ);
127 >  addHash( "minStepSize",                          G_MIN_STEPSIZE);
128 >  addHash( "minFTol",                              G_MIN_FTOL);
129 >  addHash( "minGTol",                              G_MIN_GTOL);
130 >  addHash( "minLSTol",                             G_MIN_LSTOL);
131 >  addHash( "minLSMaxIter",                         G_MIN_LSMAXITER);
132 >  addHash( "zconsGap",                             G_ZCONSGAP);
133 >  addHash( "zconsFixtime",                         G_ZCONSFIXTIME);
134 >  addHash( "zconsUsingSMD",                        G_ZCONSUSINGSMD);
135 >  addHash( "useSolidThermInt",                     G_USE_SOLID_THERM_INT);
136 >  addHash( "useLiquidThermInt",                    G_USE_LIQUID_THERM_INT);
137 >  addHash( "thermodynamicIntegrationLambda",       G_THERM_INT_LAMBDA);
138 >  addHash( "thermodynamicIntegrationK",            G_THERM_INT_K);
139  
140    strcpy( mixingRule,"standard");  //default mixing rules to standard.
141    usePBC = 1; //default  periodic boundry conditions to on
142 <  
142 >  useRF  = 0;
143 >  useInitTime = 0; // default to pull init time from the init file
144 >  useInitXSstate = 0; // default to pull the extended state from the init file
145 >  orthoBoxTolerance = 1E-6;
146 >  useSolidThermInt = 0; // default solid-state thermodynamic integration to off
147 >  useLiquidThermInt = 0; // default liquid thermodynamic integration to off
148  
149    have_force_field =  0;
150    have_n_components = 0;
# Line 101 | Line 164 | Globals::Globals(){
164    have_box_z =          0;
165    have_sample_time =    0;
166    have_status_time =    0;
167 +  have_reset_time =     0;
168    have_thermal_time =   0;
169 <  have_rrf =            0;
169 >  have_rcut =           0;
170 >  have_rsw =            0;
171    have_dielectric =     0;
172    have_tempSet =        0;
173 < }
173 >  have_target_pressure =0;
174 >  have_q_mass =         0;
175 >  have_tau_thermostat = 0;
176 >  have_tau_barostat   = 0;
177 >  have_zcons_time     = 0;
178 >  have_n_zConstraints = 0;
179 >  have_zConstraints   = 0;
180 >  have_zcons_tol = 0;
181 >  have_zcons_gap = 0;
182 >  have_zcons_fixtime = 0;
183 >  have_zcons_using_smd = 0;  
184 >  have_seed = 0;
185 >  have_minimizer = 0;
186 >  have_minimizer_maxiteration = 0;
187 >  have_minimizer_writefrq = 0;
188 >  have_minimizer_stepsize = 0;
189 >  have_minimizer_ftol = 0;
190 >  have_minimizer_gtol = 0;
191 >  have_minimizer_ls_tol = 0;
192 >  have_minimizer_ls_maxiteration = 0;
193 >  have_thermodynamic_integration_lambda = 0;
194 >  have_thermodynamic_integration_k = 0;
195  
196 + }
197 +
198   Globals::~Globals(){
199    int i;
200  
# Line 179 | Line 267 | int Globals::componentStartIndex( event* the_event ){
267    return 0;
268   }
269  
270 < int Globals::componentStartIndex( event* the_event ){
270 > int Globals::componentEnd( event* the_event ){
271  
272 <  current_component->startIndex( the_event->evt.si.array,
273 <                                 the_event->evt.si.n_elements );
272 >  the_event->err_msg = current_component->checkMe();
273 >  if( the_event->err_msg != NULL ) return 0;
274 >
275    return 1;
276   }
277  
278 < int Globals::componentEnd( event* the_event ){
278 > int Globals::newZconstraint( event* the_event ){
279 >  
280  
281 <  the_event->err_msg = current_component->checkMe();
281 >  int index = the_event->evt.blk_index;
282 >  char err[200];
283 >  current_zConstraint = new ZconStamp( index );
284 >  
285 >  have_zConstraints = 1;
286 >
287 >  if( have_n_zConstraints && index < n_zConstraints )
288 >    zConstraints[index] = current_zConstraint;
289 >  else{
290 >    if( have_n_zConstraints ){
291 >      sprintf( err, "Globals error, %d out of nZconstraints range",
292 >               index );
293 >      the_event->err_msg = strdup( err );
294 >      return 0;
295 >    }
296 >    else{
297 >      the_event->err_msg = strdup("Globals error, nZconstraints"
298 >                                  " not given before"
299 >                                  " first zConstraint declaration." );
300 >      return 0;
301 >    }
302 >  }  
303 >
304 >  return 1;
305 > }
306 >
307 >
308 >
309 > int Globals::zConstraintAssign( event* the_event ){
310 >
311 >  switch( the_event->evt.asmt.asmt_type ){
312 >    
313 >  case STRING:
314 >    return current_zConstraint->assignString( the_event->evt.asmt.lhs,
315 >                                              the_event->evt.asmt.rhs.sval,
316 >                                              &(the_event->err_msg));
317 >    break;
318 >    
319 >  case DOUBLE:
320 >    return current_zConstraint->assignDouble( the_event->evt.asmt.lhs,
321 >                                              the_event->evt.asmt.rhs.dval,
322 >                                              &(the_event->err_msg));
323 >    break;
324 >    
325 >  case INT:
326 >    return current_zConstraint->assignInt( the_event->evt.asmt.lhs,
327 >                                           the_event->evt.asmt.rhs.ival,
328 >                                           &(the_event->err_msg));
329 >    break;
330 >    
331 >  default:
332 >    the_event->err_msg = strdup( "Globals error. Invalid zConstraint"
333 >                                 " assignment type" );
334 >    return 0;
335 >    break;
336 >  }
337 >  return 0;
338 > }
339 >
340 > int Globals::zConstraintEnd( event* the_event ){
341 >
342 >  the_event->err_msg = current_zConstraint->checkMe();
343    if( the_event->err_msg != NULL ) return 0;
344  
345    return 1;
# Line 243 | Line 394 | int Globals::globalAssign( event* the_event ){
394          return 1;
395        }
396        break;
397 +
398 +    case G_NZCONSTRAINTS:
399 +      if( the_type == STRING ){
400 +        the_event->err_msg =
401 +          strdup("Global error. nZconstraints is not a double or an int.\n" );
402 +        return 0;
403 +      }
404        
405 +      else if( the_type == DOUBLE ){
406 +        n_zConstraints = (int)the_event->evt.asmt.rhs.dval;
407 +        zConstraints = new ZconStamp*[n_zConstraints];
408 +        have_n_zConstraints = 1;
409 +        return 1;
410 +      }
411 +      
412 +      else{
413 +        n_zConstraints = the_event->evt.asmt.rhs.ival;
414 +        zConstraints = new ZconStamp*[n_zConstraints];
415 +        have_n_zConstraints = 1;
416 +        return 1;
417 +      }
418 +      break;
419 +      
420      case G_TARGETTEMP:
421        switch( the_type ){
422          
# Line 272 | Line 445 | int Globals::globalAssign( event* the_event ){
445          break;
446        }
447        break;
448 +
449 +    case G_ORTHOBOXTOLERANCE:
450 +      switch( the_type ){
451 +        
452 +      case STRING:
453 +        the_event->err_msg =
454 +          strdup( "Global error. orthoBoxTolerance is not a double or int.\n" );
455 +        return 0;
456 +        break;
457 +        
458 +      case DOUBLE:
459 +        orthoBoxTolerance = the_event->evt.asmt.rhs.dval;
460 +        have_target_temp = 1;
461 +        return 1;
462 +        break;
463 +        
464 +      case INT:
465 +        orthoBoxTolerance = (double)the_event->evt.asmt.rhs.ival;
466 +        have_target_temp = 1;
467 +        return 1;
468 +        break;
469 +        
470 +      default:
471 +        the_event->err_msg =
472 +          strdup( "Global error.orthoBoxTolerance unrecognized.\n" );
473 +        return 0;
474 +        break;
475 +      }
476 +      break;
477        
478      case G_ENSEMBLE:
479        if( the_type == STRING ){
# Line 610 | Line 812 | int Globals::globalAssign( event* the_event ){
812        }
813        break;
814  
815 <   case G_THERMALTIME:
815 >    case G_RESETTIME:
816 >      switch( the_type ){
817 >        
818 >      case STRING:
819 >        the_event->err_msg =
820 >          strdup( "Global error. resetTime is not a double or int.\n" );
821 >        return 0;
822 >        break;
823 >        
824 >      case DOUBLE:
825 >        resetTime = the_event->evt.asmt.rhs.dval;
826 >        have_reset_time = 1;
827 >        return 1;
828 >        break;
829 >        
830 >      case INT:
831 >        resetTime = (double)the_event->evt.asmt.rhs.ival;
832 >        have_reset_time = 1;
833 >        return 1;
834 >        break;
835 >        
836 >      default:
837 >        the_event->err_msg =
838 >          strdup( "Global error. resetTime unrecognized.\n" );
839 >        return 0;
840 >        break;
841 >      }
842 >      break;
843 >
844 >    case G_THERMALTIME:
845        switch( the_type ){
846          
847        case STRING:
# Line 639 | Line 870 | int Globals::globalAssign( event* the_event ){
870        }
871        break;
872        
873 <    case G_RRF:
873 >    case G_RCUT:
874        switch( the_type ){
875          
876        case STRING:
877          the_event->err_msg =
878 <          strdup( "Global error. rRF is not a double or int.\n" );
878 >          strdup( "Global error. cutoffRadius is not a double or int.\n" );
879          return 0;
880          break;
881          
882        case DOUBLE:
883 <        rRF = the_event->evt.asmt.rhs.dval;
884 <        have_rrf = 1;
883 >        rcut = the_event->evt.asmt.rhs.dval;
884 >        have_rcut = 1;
885          return 1;
886          break;
887          
888        case INT:
889 <        rRF = (double)the_event->evt.asmt.rhs.ival;
890 <        have_rrf = 1;
889 >        rcut = (double)the_event->evt.asmt.rhs.ival;
890 >        have_rcut = 1;
891          return 1;
892          break;
893          
894        default:
895          the_event->err_msg =
896 <          strdup( "Global error. rRF unrecognized.\n" );
896 >          strdup( "Global error. cutoffRadius unrecognized.\n" );
897 >        return 0;
898 >        break;
899 >      }
900 >      break;
901 >
902 >    case G_RSW:
903 >      switch( the_type ){
904 >        
905 >      case STRING:
906 >        the_event->err_msg =
907 >          strdup( "Global error. switchingRadius is not a double or int.\n" );
908          return 0;
909          break;
910 +        
911 +      case DOUBLE:
912 +        rsw = the_event->evt.asmt.rhs.dval;
913 +        have_rsw = 1;
914 +        return 1;
915 +        break;
916 +        
917 +      case INT:
918 +        rsw = (double)the_event->evt.asmt.rhs.ival;
919 +        have_rsw = 1;
920 +        return 1;
921 +        break;
922 +        
923 +      default:
924 +        the_event->err_msg =
925 +          strdup( "Global error. switchingRadius unrecognized.\n" );
926 +        return 0;
927 +        break;
928        }
929        break;
930        
# Line 700 | Line 960 | int Globals::globalAssign( event* the_event ){
960      case G_TEMPSET:
961        if( the_type == STRING ){
962          
963 <        if( !strcmp( "true", the_event->evt.asmt.rhs.sval )) tempSet = 1;
964 <        else if( !strcmp( "false", the_event->evt.asmt.rhs.sval )) tempSet = 0;
963 >        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) tempSet = 1;
964 >        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) tempSet = 0;
965          else{
966            the_event->err_msg =
967              strdup( "Global error. tempSet was not \"true\" or \"false\".\n" );
# Line 715 | Line 975 | int Globals::globalAssign( event* the_event ){
975          strdup( "Global error. tempSet was not \"true\" or \"false\".\n" );
976        return 0;
977        break;
978 +
979 +    case G_USEINITTIME:
980 +      if( the_type == STRING ){
981 +        
982 +        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useInitTime = 1;
983 +        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useInitTime = 0;
984 +        else{
985 +          the_event->err_msg =
986 +            strdup( "Global error. useInitTime was not \"true\" or \"false\".\n" );
987 +          return 0;
988 +        }
989 +        return 1;
990 +      }
991        
992 +      the_event->err_msg =
993 +        strdup( "Global error. useInitTime was not \"true\" or \"false\".\n" );
994 +      return 0;
995 +      break;
996 +
997 +    case G_USEINIT_XS_STATE:
998 +      if( the_type == STRING ){
999 +        
1000 +        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval ))
1001 +          useInitXSstate = 1;
1002 +        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval ))
1003 +          useInitXSstate = 0;
1004 +        else{
1005 +          the_event->err_msg =
1006 +            strdup( "Global error. useInitExtendedSystemState was not \"true\" or \"false\".\n" );
1007 +          return 0;
1008 +        }
1009 +        return 1;
1010 +      }
1011 +      
1012 +      the_event->err_msg =
1013 +        strdup( "Global error. useInitExtendedSystemState was not \"true\" or \"false\".\n" );
1014 +      return 0;
1015 +      break;
1016 +      
1017      case G_USEPBC:
1018        if( the_type == STRING ){
1019          
1020 <        if( !strcmp( "true", the_event->evt.asmt.rhs.sval )) usePBC = 1;
1021 <        else if( !strcmp( "false", the_event->evt.asmt.rhs.sval )) usePBC = 0;
1020 >        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) usePBC = 1;
1021 >        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) usePBC = 0;
1022          else{
1023            the_event->err_msg =
1024 <            strdup( "Global error. periodicBoundryConditions was not \"true\" or \"false\".\n" );
1024 >            strdup( "Global error. usePeriodicBoundaryConditions was not \"true\" or \"false\".\n" );
1025            return 0;
1026          }
1027          return 1;
1028        }
1029        
1030        the_event->err_msg =
1031 <        strdup( "Global error. tempSet was not \"true\" or \"false\".\n" );
1031 >        strdup( "Global error. usePeriodicBoundaryConditions was not \"true\" or \"false\".\n" );
1032 >      return 0;
1033 >      break;
1034 >
1035 >    case G_USERF:
1036 >      if( the_type == STRING ){
1037 >        
1038 >        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useRF = 1;
1039 >        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useRF = 0;
1040 >        else{
1041 >          the_event->err_msg =
1042 >            strdup( "Global error. useReactionField was not \"true\" or \"false\".\n" );
1043 >          return 0;
1044 >        }
1045 >        return 1;
1046 >      }
1047 >      
1048 >      the_event->err_msg =
1049 >        strdup( "Global error. useReactionField was not \"true\" or \"false\".\n" );
1050 >      return 0;
1051 >      break;
1052 >
1053 >    case G_TARGETPRESSURE:
1054 >      switch( the_type ){
1055 >        
1056 >      case STRING:
1057 >        the_event->err_msg =
1058 >          strdup( "Global error. targetPressure is not a double or int.\n" );
1059 >        return 0;
1060 >        break;
1061 >        
1062 >      case DOUBLE:
1063 >        target_pressure = the_event->evt.asmt.rhs.dval;
1064 >        have_target_pressure = 1;
1065 >        return 1;
1066 >        break;
1067 >        
1068 >      case INT:
1069 >        target_pressure = (double)the_event->evt.asmt.rhs.ival;
1070 >        have_target_pressure = 1;
1071 >        return 1;
1072 >        break;
1073 >        
1074 >      default:
1075 >        the_event->err_msg =
1076 >          strdup( "Global error. targetPressure unrecognized.\n" );
1077 >        return 0;
1078 >        break;
1079 >      }
1080 >      break;
1081 >
1082 >    case G_TAUTHERMOSTAT:
1083 >      switch( the_type ){
1084 >        
1085 >      case STRING:
1086 >        the_event->err_msg =
1087 >          strdup( "Global error. tauThermostat is not a double or int.\n" );
1088 >        return 0;
1089 >        break;
1090 >        
1091 >      case DOUBLE:
1092 >        tau_thermostat = the_event->evt.asmt.rhs.dval;
1093 >        have_tau_thermostat = 1;
1094 >        return 1;
1095 >        break;
1096 >        
1097 >      case INT:
1098 >        tau_thermostat = (double)the_event->evt.asmt.rhs.ival;
1099 >        have_tau_thermostat = 1;
1100 >        return 1;
1101 >        break;
1102 >        
1103 >      default:
1104 >        the_event->err_msg =
1105 >          strdup( "Global error. tauThermostat unrecognized.\n" );
1106 >        return 0;
1107 >        break;
1108 >      }
1109 >      break;
1110 >
1111 >    case G_TAUBAROSTAT:
1112 >      switch( the_type ){
1113 >        
1114 >      case STRING:
1115 >        the_event->err_msg =
1116 >          strdup( "Global error. tauBarostat is not a double or int.\n" );
1117 >        return 0;
1118 >        break;
1119 >        
1120 >      case DOUBLE:
1121 >        tau_barostat = the_event->evt.asmt.rhs.dval;
1122 >        have_tau_barostat = 1;
1123 >        return 1;
1124 >        break;
1125 >        
1126 >      case INT:
1127 >        tau_barostat = (double)the_event->evt.asmt.rhs.ival;
1128 >        have_tau_barostat = 1;
1129 >        return 1;
1130 >        break;
1131 >        
1132 >      default:
1133 >        the_event->err_msg =
1134 >          strdup( "Global error. tauBarostat unrecognized.\n" );
1135 >        return 0;
1136 >        break;
1137 >      }
1138 >      break;
1139 >      
1140 >    case G_ZCONSTIME:
1141 >      switch( the_type ){
1142 >        
1143 >      case STRING:
1144 >        the_event->err_msg =
1145 >          strdup( "Global error. zcons_time is not a double or int.\n" );
1146 >        return 0;
1147 >        break;
1148 >        
1149 >      case DOUBLE:
1150 >        zcons_time = the_event->evt.asmt.rhs.dval;
1151 >        have_zcons_time = 1;
1152 >        return 1;
1153 >        break;
1154 >        
1155 >      case INT:
1156 >        zcons_time = (double)the_event->evt.asmt.rhs.ival;
1157 >        have_zcons_time = 1;
1158 >        return 1;
1159 >        break;
1160 >        
1161 >      default:
1162 >        the_event->err_msg =
1163 >          strdup( "Global error. zcons_time unrecognized.\n" );
1164 >        return 0;
1165 >        break;
1166 >      }
1167 >      break;
1168 >
1169 >    case G_ZCONSTOL:
1170 >      switch( the_type ){
1171 >        
1172 >      case STRING:
1173 >        the_event->err_msg =
1174 >          strdup( "Global error. zcons_tol is not a double or int.\n" );
1175 >        return 0;
1176 >        break;
1177 >        
1178 >      case DOUBLE:
1179 >        zcons_tol = the_event->evt.asmt.rhs.dval;
1180 >        have_zcons_tol = 1;
1181 >        return 1;
1182 >        break;
1183 >        
1184 >      case INT:
1185 >        zcons_tol = (double)the_event->evt.asmt.rhs.ival;
1186 >        have_zcons_tol = 1;
1187 >        return 1;
1188 >        break;
1189 >        
1190 >      default:
1191 >        the_event->err_msg =
1192 >          strdup( "Global error. zcons_ol unrecognized.\n" );
1193 >        return 0;
1194 >        break;
1195 >      }
1196 >      break;
1197 >  
1198 >    case G_ZCONSFORCEPOLICY:
1199 >      switch( the_type ){
1200 >        
1201 >      case STRING:
1202 >   strcpy(zconsForcePolicy, the_event->evt.asmt.rhs.sval);
1203 >
1204 >   for(int i = 0; zconsForcePolicy[i] != '\0'; i++)
1205 >        {
1206 >      zconsForcePolicy[i] = toupper(zconsForcePolicy[i]);
1207 >   }
1208 >        have_zcons_force_policy = 1;
1209 >   return 1;
1210 >        break;
1211 >        
1212 >      case DOUBLE:
1213 >        the_event->err_msg =
1214 >          strdup( "Global error. zconsForcePolicy is not a double or int.\n" );
1215 >        return 0;
1216 >        break;
1217 >        
1218 >      case INT:
1219 >        the_event->err_msg =
1220 >          strdup( "Global error. zconsForcePolicy is not a double or int.\n" );
1221 >        return 0;
1222 >        break;
1223 >        
1224 >      default:
1225 >        the_event->err_msg =
1226 >          strdup( "Global error. zconsForcePolicy unrecognized.\n" );
1227 >        return 0;
1228 >        break;
1229 >      }
1230 >      break;
1231 >      
1232 >    case G_ZCONSGAP:
1233 >      switch( the_type ){
1234 >  
1235 >      case STRING:
1236 >        the_event->err_msg =
1237 >          strdup( "Global error. zcons_gap is not a double or int.\n" );
1238 >        return 0;
1239 >        break;
1240 >  
1241 >      case DOUBLE:
1242 >        zcons_gap = the_event->evt.asmt.rhs.dval;
1243 >        have_zcons_gap= 1;
1244 >        return 1;
1245 >        break;
1246 >  
1247 >      case INT:
1248 >        zcons_gap= (double)the_event->evt.asmt.rhs.ival;
1249 >        have_zcons_gap= 1;
1250 >        return 1;
1251 >        break;
1252 >  
1253 >      default:
1254 >        the_event->err_msg =
1255 >          strdup( "Global error. zcons_gap unrecognized.\n" );
1256 >        return 0;
1257 >        break;
1258 >      }
1259 >      break;
1260 >
1261 >    case G_ZCONSFIXTIME:
1262 >      switch( the_type ){
1263 >  
1264 >      case STRING:
1265 >        the_event->err_msg =
1266 >          strdup( "Global error. zcons_fixtime is not a double or int.\n" );
1267 >        return 0;
1268 >        break;
1269 >  
1270 >      case DOUBLE:
1271 >        zcons_fixtime= the_event->evt.asmt.rhs.dval;
1272 >        have_zcons_fixtime= 1;
1273 >        return 1;
1274 >        break;
1275 >  
1276 >      case INT:
1277 >        zcons_fixtime= (double)the_event->evt.asmt.rhs.ival;
1278 >        have_zcons_fixtime= 1;
1279 >        return 1;
1280 >        break;
1281 >  
1282 >      default:
1283 >        the_event->err_msg =
1284 >          strdup( "Global error. zcons_fixtime unrecognized.\n" );
1285 >        return 0;
1286 >        break;
1287 >      }
1288 >      break;
1289 >
1290 >    case G_ZCONSUSINGSMD:
1291 >      switch( the_type ){
1292 >  
1293 >      case STRING:
1294 >        the_event->err_msg =
1295 >          strdup( "Global error. zcons_fixtime is not an  int.\n" );
1296 >        return 0;
1297 >        break;
1298 >  
1299 >      case DOUBLE:
1300 >        the_event->err_msg =
1301 >          strdup( "Global error. zcons_fixtime is not an  int.\n" );
1302 >        return 0;
1303 >        break;
1304 >  
1305 >      case INT:
1306 >        zcons_using_smd= the_event->evt.asmt.rhs.ival;
1307 >        have_zcons_using_smd= 1;
1308 >        return 1;
1309 >        break;
1310 >  
1311 >      default:
1312 >        the_event->err_msg =
1313 >          strdup( "Global error. zcons_usingsmd unrecognized.\n" );
1314 >        return 0;
1315 >        break;
1316 >      }
1317 >      break;
1318 >      
1319 >    case G_MINIMIZER:
1320 >      switch( the_type ){
1321 >
1322 >      case STRING:
1323 >        strcpy(minimizer_name, the_event->evt.asmt.rhs.sval);
1324 >
1325 >        for(int i = 0; zconsForcePolicy[i] != '\0'; i++){
1326 >          zconsForcePolicy[i] = toupper(zconsForcePolicy[i]);
1327 >        }
1328 >        have_minimizer= 1;
1329 >        return 1;
1330 >        break;
1331 >        
1332 >      case DOUBLE:
1333 >        the_event->err_msg =
1334 >          strdup( "Global error. minimizer_name is not a double or int.\n" );
1335 >        return 0;
1336 >        break;
1337 >        
1338 >      case INT:
1339 >        the_event->err_msg =
1340 >          strdup( "Global error. minimizer_name is not a double or int.\n" );
1341 >        return 0;
1342 >        break;
1343 >        
1344 >      default:
1345 >        the_event->err_msg =
1346 >          strdup( "Global error. minimizer_name unrecognized.\n" );
1347 >        return 0;
1348 >        break;
1349 >      }
1350 >      break;
1351 >
1352 >    case G_MIN_MAXITER:
1353 >      switch( the_type ){
1354 >
1355 >      case STRING:
1356 >        the_event->err_msg =
1357 >          strdup( "Global error. minimizer_maxiteration is not a double or int.\n" );
1358 >        return 1;
1359 >        break;
1360 >        
1361 >      case DOUBLE:
1362 >        minimizer_maxiteration = the_event->evt.asmt.rhs.dval;
1363 >        have_minimizer_maxiteration = 1;
1364 >        return 1;
1365 >        break;
1366 >        
1367 >      case INT:
1368 >        minimizer_maxiteration = the_event->evt.asmt.rhs.ival;
1369 >        have_minimizer_maxiteration = 1;
1370 >        return 1;
1371 >        break;
1372 >        
1373 >      default:
1374 >        the_event->err_msg =
1375 >          strdup( "Global error. minimizer_maxiteration unrecognized.\n" );
1376 >        return 0;
1377 >        break;
1378 >      }
1379 >      break;
1380 >      
1381 >    case G_MIN_WRITEFRQ:
1382 >      switch( the_type ){
1383 >
1384 >      case STRING:
1385 >        the_event->err_msg =
1386 >          strdup( "Global error. minimizer_writefrq is not a double or int.\n" );
1387 >        return 1;
1388 >        break;
1389 >        
1390 >      case DOUBLE:
1391 >        minimizer_writefrq= the_event->evt.asmt.rhs.dval;
1392 >        have_minimizer_writefrq = 1;
1393 >        return 1;
1394 >        break;
1395 >        
1396 >      case INT:
1397 >        minimizer_writefrq= the_event->evt.asmt.rhs.ival;
1398 >        have_minimizer_writefrq = 1;
1399 >        return 1;
1400 >        break;
1401 >        
1402 >      default:
1403 >        the_event->err_msg =
1404 >          strdup( "Global error. minimizer_writefrq unrecognized.\n" );
1405 >        return 0;
1406 >        break;
1407 >      }
1408 >      break;
1409 >
1410 >    case G_MIN_STEPSIZE:
1411 >      switch( the_type ){
1412 >
1413 >      case STRING:
1414 >        the_event->err_msg =
1415 >          strdup( "Global error. minimizer_resetfrq is not a double or int.\n" );
1416 >        return 1;
1417 >        break;
1418 >        
1419 >      case DOUBLE:
1420 >        minimizer_stepsize= the_event->evt.asmt.rhs.dval;
1421 >        have_minimizer_stepsize = 1;
1422 >        return 1;
1423 >        break;
1424 >        
1425 >      case INT:
1426 >        minimizer_stepsize= the_event->evt.asmt.rhs.ival;
1427 >        have_minimizer_stepsize = 1;
1428 >        return 1;
1429 >        break;
1430 >        
1431 >      default:
1432 >        the_event->err_msg =
1433 >          strdup( "Global error. minimizer_resetfrq unrecognized.\n" );
1434 >        return 0;
1435 >        break;
1436 >      }
1437 >      break;      
1438 >
1439 >    case G_MIN_FTOL:
1440 >      switch( the_type ){
1441 >
1442 >      case STRING:
1443 >        the_event->err_msg =
1444 >          strdup( "Global error. minimizer_ftol is not a double or int.\n" );
1445 >        return 1;
1446 >        break;
1447 >        
1448 >      case DOUBLE:
1449 >        minimizer_ftol= the_event->evt.asmt.rhs.dval;
1450 >        have_minimizer_ftol = 1;
1451 >        return 1;
1452 >        break;
1453 >        
1454 >      case INT:
1455 >        minimizer_ftol= the_event->evt.asmt.rhs.ival;
1456 >        have_minimizer_ftol = 1;
1457 >        return 1;
1458 >        break;
1459 >        
1460 >      default:
1461 >        the_event->err_msg =
1462 >          strdup( "Global error. minimizer_ftol unrecognized.\n" );
1463 >        return 0;
1464 >        break;
1465 >      }
1466 >      break;
1467 >      
1468 >    case G_MIN_GTOL:
1469 >      switch( the_type ){
1470 >
1471 >      case STRING:
1472 >        the_event->err_msg =
1473 >          strdup( "Global error. minimizer_gtol is not a double or int.\n" );
1474 >        return 1;
1475 >        break;
1476 >        
1477 >      case DOUBLE:
1478 >        minimizer_gtol= the_event->evt.asmt.rhs.dval;
1479 >        have_minimizer_gtol = 1;
1480 >        return 1;
1481 >        break;
1482 >        
1483 >      case INT:
1484 >        minimizer_gtol= the_event->evt.asmt.rhs.ival;
1485 >        have_minimizer_gtol = 1;
1486 >        return 1;
1487 >        break;
1488 >        
1489 >      default:
1490 >        the_event->err_msg =
1491 >          strdup( "Global error. minimizer_gtol unrecognized.\n" );
1492 >        return 0;
1493 >        break;
1494 >      }
1495 >      break;
1496 >      
1497 >    case G_MIN_LSMAXITER:
1498 >      switch( the_type ){
1499 >
1500 >      case STRING:
1501 >        the_event->err_msg =
1502 >          strdup( "Global error. minimizer_ls_maxiteration is not a double or int.\n" );
1503 >        return 1;
1504 >        break;
1505 >        
1506 >      case DOUBLE:
1507 >        minimizer_ls_maxiteration = the_event->evt.asmt.rhs.dval;
1508 >        have_minimizer_ls_maxiteration = 1;
1509 >        return 1;
1510 >        break;
1511 >        
1512 >      case INT:
1513 >        minimizer_ls_maxiteration = the_event->evt.asmt.rhs.ival;
1514 >        have_minimizer_ls_maxiteration = 1;
1515 >        return 1;
1516 >        break;
1517 >        
1518 >      default:
1519 >        the_event->err_msg =
1520 >          strdup( "Global error. minimizer_ls_maxiteration unrecognized.\n" );
1521 >        return 0;
1522 >        break;
1523 >      }
1524 >      break;      
1525 >
1526 >    case G_MIN_LSTOL:
1527 >      switch( the_type ){
1528 >
1529 >      case STRING:
1530 >        the_event->err_msg =
1531 >          strdup( "Global error. minimizer_ls_tol is not a double or int.\n" );
1532 >        return 1;
1533 >        break;
1534 >        
1535 >      case DOUBLE:
1536 >        minimizer_ls_tol= the_event->evt.asmt.rhs.dval;
1537 >        have_minimizer_ls_tol = 1;
1538 >        return 1;
1539 >        break;
1540 >        
1541 >      case INT:
1542 >        minimizer_ls_tol= the_event->evt.asmt.rhs.ival;
1543 >        have_minimizer_ls_tol = 1;
1544 >        return 1;
1545 >        break;
1546 >        
1547 >      default:
1548 >        the_event->err_msg =
1549 >          strdup( "Global error. minimizer_ls_tol unrecognized.\n" );
1550 >        return 0;
1551 >        break;
1552 >      }
1553 >      break;
1554 >      
1555 >      // add more token cases here.
1556 >    case G_SEED:
1557 >      switch( the_type ){
1558 >        
1559 >      case STRING:
1560 >   the_event->err_msg =
1561 >          strdup( "Global error. seed is not a string.\n" );
1562 >        return 0;
1563 >   return 0;
1564 >        break;
1565 >        
1566 >      case DOUBLE:
1567 >   have_seed = 1;
1568 >   seed = (int)the_event->evt.asmt.rhs.dval;
1569 >        return 1;
1570 >        break;
1571 >        
1572 >      case INT:
1573 >   have_seed = 1;
1574 >   seed =  the_event->evt.asmt.rhs.ival ;
1575 >        return 1;
1576 >        break;
1577 >        
1578 >      default:
1579 >        the_event->err_msg =
1580 >          strdup( "Global error. seed unrecognized.\n" );
1581 >        return 0;
1582 >        break;
1583 >      }
1584 >      break;
1585 >
1586 >    case G_USE_SOLID_THERM_INT:
1587 >      if( the_type == STRING ){
1588 >        
1589 >        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useSolidThermInt = 1;
1590 >        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useSolidThermInt = 0;
1591 >        else{
1592 >          the_event->err_msg =
1593 >            strdup( "Global error. useSolidThermInt was not \"true\" or \"false\".\n" );
1594 >          return 0;
1595 >        }
1596 >        return 1;
1597 >      }
1598 >      
1599 >      the_event->err_msg =
1600 >        strdup( "Global error. useSolidThermInt was not \"true\" or \"false\".\n" );
1601        return 0;
1602        break;
1603 +
1604 +    case G_USE_LIQUID_THERM_INT:
1605 +      if( the_type == STRING ){
1606 +        
1607 +        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useLiquidThermInt = 1;
1608 +        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useLiquidThermInt = 0;
1609 +        else{
1610 +          the_event->err_msg =
1611 +            strdup( "Global error. useLiquidThermInt was not \"true\" or \"false\".\n" );
1612 +          return 0;
1613 +        }
1614 +        return 1;
1615 +      }
1616 +      
1617 +      the_event->err_msg =
1618 +        strdup( "Global error. useLiquidThermInt was not \"true\" or \"false\".\n" );
1619 +      return 0;
1620 +      break;
1621 +
1622 +    case G_THERM_INT_LAMBDA:
1623 +      switch( the_type ){
1624 +        
1625 +      case STRING:
1626 +        the_event->err_msg =
1627 +          strdup( "Global error. thermodynamicIntegrationLambda is not a double or int.\n" );
1628 +        return 1;
1629 +        break;
1630 +        
1631 +      case DOUBLE:
1632 +        thermodynamic_integration_lambda = the_event->evt.asmt.rhs.dval;
1633 +        have_thermodynamic_integration_lambda = 1;
1634 +        return 1;
1635 +        break;
1636 +        
1637 +      case INT:
1638 +        thermodynamic_integration_lambda = (double)the_event->evt.asmt.rhs.dval;
1639 +        have_thermodynamic_integration_lambda = 1;
1640 +        return 1;
1641 +        break;
1642 +        
1643 +      default:
1644 +        the_event->err_msg =
1645 +          strdup( "Global error. thermodynamicIntegrationLambda unrecognized.\n" );
1646 +        return 0;
1647 +        break;
1648 +      }
1649 +      break;      
1650 +
1651 +    case G_THERM_INT_K:
1652 +      switch( the_type ){
1653 +        
1654 +      case STRING:
1655 +        the_event->err_msg =
1656 +          strdup( "Global error. thermodynamicIntegrationK is not a double or int.\n" );
1657 +        return 1;
1658 +        break;
1659 +        
1660 +      case DOUBLE:
1661 +        thermodynamic_integration_k = the_event->evt.asmt.rhs.dval;
1662 +        have_thermodynamic_integration_k = 1;
1663 +        return 1;
1664 +        break;
1665 +        
1666 +      case INT:
1667 +        thermodynamic_integration_k = (double)the_event->evt.asmt.rhs.dval;
1668 +        have_thermodynamic_integration_k = 1;
1669 +        return 1;
1670 +        break;
1671 +        
1672 +      default:
1673 +        the_event->err_msg =
1674 +          strdup( "Global error. thermodynamicIntegrationK unrecognized.\n" );
1675 +        return 0;
1676 +        break;
1677 +      }
1678 +      break;      
1679 +      // add more token cases here.
1680 +
1681      }
1682    }
1683    
# Line 793 | Line 1738 | char* Globals::checkMe( void ){
1738      have_err= 1;
1739    }
1740    
1741 <  if( !have_ensemble ){
1742 <    strcat( err, "\t->ensemble\n" );
1743 <    have_err= 1;
1744 <  }
1741 >  if(!have_minimizer)
1742 >    if( !have_ensemble ){
1743 >      strcat( err, "\t->ensemble\n" );
1744 >      have_err= 1;
1745 >    }
1746    
1747    if( !have_dt ){
1748      strcat( err, "\t->dt\n" );

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines