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

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines