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

Comparing trunk/OOPSE-2.0/src/io/Globals.cpp (file contents):
Revision 2088 by gezelter, Tue Mar 8 21:07:14 2005 UTC vs.
Revision 2371 by tim, Fri Oct 14 21:43:13 2005 UTC

# Line 42 | Line 42
42   #include <stdlib.h>
43   #include <stdio.h>
44   #include <string.h>
45 + #include <string>
46  
47   #include "io/Globals.hpp"
48   #include "utils/simError.h"
# Line 49 | Line 50
50   #include "io/mpiBASS.h"
51   #endif // is_mpi
52  
53 < /*
53 < * The following section lists all of the defined tokens for the
54 < * gloabal assignment statements. All are prefixed with a G_ to avoid
55 < * stepping on any previously defined enumerations.
56 < *
57 < * NOTE: tokens start at 1, 0 is a resrved token number
58 < */
53 > #include "io/ParamConstraint.hpp"
54  
55 < //required parameters
56 < #define G_FORCEFIELD         1
57 < #define G_NCOMPONENTS        2
63 < #define G_TARGETTEMP         3
64 < #define G_ENSEMBLE           4
65 < #define G_DT                 5
66 < #define G_RUNTIME            6
55 > #define DefineParameter(NAME,KEYWORD)                              \
56 >  NAME.setKeyword(KEYWORD);                  \
57 >  parameters_.insert(std::make_pair(std::string(KEYWORD),  &NAME));
58  
59 < //optional parameters
60 < #define G_INITIALCONFIG      7
61 < #define G_FINALCONFIG        8
71 < #define G_NMOL               9
72 < #define G_DENSITY           10
73 < #define G_BOX               11
74 < #define G_BOXX              12
75 < #define G_BOXY              13
76 < #define G_BOXZ              14
77 < #define G_SAMPLETIME        15
78 < #define G_STATUSTIME        16
79 < #define G_RCUT              17
80 < #define G_RSW               18
81 < #define G_DIELECTRIC        19
82 < #define G_TEMPSET           20
83 < #define G_THERMALTIME       21
84 < #define G_USEPBC            22
85 < #define G_MIXINGRULE        23
86 < #define G_USERF             24
87 < #define G_TARGETPRESSURE    25
88 < #define G_TAUTHERMOSTAT     26
89 < #define G_TAUBAROSTAT       27
90 < #define G_ZCONSTIME         28
91 < #define G_NZCONSTRAINTS     29
92 < #define G_ZCONSTOL          30
93 < #define G_ZCONSFORCEPOLICY  31
94 < #define G_SEED              32
95 < #define G_RESETTIME         33
96 < #define G_USEINITTIME       34
97 < #define G_USEINIT_XS_STATE  35
98 < #define G_ORTHOBOXTOLERANCE 36
99 < #define G_MINIMIZER         37
100 < #define G_MIN_MAXITER       38
101 < #define G_MIN_WRITEFRQ      39
102 < #define G_MIN_STEPSIZE      40
103 < #define G_MIN_FTOL          41
104 < #define G_MIN_GTOL          42
105 < #define G_MIN_LSTOL         43
106 < #define G_MIN_LSMAXITER     44
107 < #define G_ZCONSGAP          45
108 < #define G_ZCONSFIXTIME      46
109 < #define G_ZCONSUSINGSMD     47
110 < #define G_USE_SOLID_THERM_INT     48
111 < #define G_USE_LIQUID_THERM_INT    49
112 < #define G_THERM_INT_LAMBDA  50
113 < #define G_THERM_INT_K       51
114 < #define G_FORCEFIELD_VARIANT 52
115 < #define G_FORCEFIELD_FILENAME 53
116 < Globals::Globals(){
117 <  initalize();
118 < }
59 > #define DefineOptionalParameter(NAME,KEYWORD)                              \
60 >  NAME.setKeyword(KEYWORD); NAME.setOptional(true);                    \
61 >  parameters_.insert(std::make_pair(std::string(KEYWORD),  &NAME));
62  
63 < Globals::~Globals(){
64 <  int i;
63 > #define DefineOptionalParameterWithDefaultValue(NAME,KEYWORD, DEFAULTVALUE)                              \
64 >  NAME.setKeyword(KEYWORD); NAME.setOptional(true); NAME.setDefaultValue(DEFAULTVALUE);                      \
65 >  parameters_.insert(std::make_pair(std::string(KEYWORD),  &NAME));
66  
67 <  for( i=0; i<hash_size; i++ ){
68 <    if( command_table[i] != NULL ) delete command_table[i];
125 <  }
126 <  delete[] command_table;
67 > #define CheckParameter(NAME, CONSTRAINT)                              \
68 >  if (!NAME.empty()) { if (!(CONSTRAINT)(NAME.getData())) std::cout <<"Error in parsing " << NAME.getKeyword() << " : "<< (CONSTRAINT).getConstraintDescription() << std::endl; }                
69  
128  if( components != NULL ){
129    for( i=0; i<n_components; i++ ) delete components[i];
130    delete[] components;
131  }
132 }
70  
71 < void Globals::initalize(){
72 <  int i;
71 > Globals::Globals(){
72 >
73 >  DefineParameter(ForceField, "forceField")
74 >  DefineParameter(NComponents, "nComponents")
75 >
76 >  DefineOptionalParameter(TargetTemp, "targetTemp");
77 >  DefineOptionalParameter(Ensemble, "ensemble");
78 >  DefineOptionalParameter(Dt, "dt");
79 >  DefineOptionalParameter(RunTime, "runTime");
80 >  DefineOptionalParameter(InitialConfig, "initialConfig");
81 >  DefineOptionalParameter(FinalConfig, "finalConfig");
82 >  DefineOptionalParameter(NMol, "nMol");
83 >  DefineOptionalParameter(Density, "density");
84 >  DefineOptionalParameter(Box, "box");
85 >  DefineOptionalParameter(BoxX, "boxX");
86 >  DefineOptionalParameter(BoxY, "boxY");
87 >  DefineOptionalParameter(BoxZ, "boxZ");
88 >  DefineOptionalParameter(SampleTime, "sampleTime");
89 >  DefineOptionalParameter(ResetTime, "resetTime");
90 >  DefineOptionalParameter(StatusTime, "statusTime");
91 >  DefineOptionalParameter(CutoffRadius, "cutoffRadius");
92 >  DefineOptionalParameter(SwitchingRadius, "switchingRadius");
93 >  DefineOptionalParameter(Dielectric, "dielectric");
94 >  DefineOptionalParameter(TempSet, "tempSet");
95 >  DefineOptionalParameter(ThermalTime, "thermalTime");
96 >  DefineOptionalParameter(TargetPressure, "targetPressure");
97 >  DefineOptionalParameter(TauThermostat, "tauThermostat");
98 >  DefineOptionalParameter(TauBarostat, "tauBarostat");
99 >  DefineOptionalParameter(ZconsTime, "zconsTime");
100 >  DefineOptionalParameter(NZconstraints, "nZconstraints");  
101 >  DefineOptionalParameter(ZconsTol, "zconsTol");
102 >  DefineOptionalParameter(ZconsForcePolicy, "zconsForcePolicy");
103 >  DefineOptionalParameter(Seed, "seed");
104 >  DefineOptionalParameter(Minimizer, "minimizer");
105 >  DefineOptionalParameter(MinimizerMaxIter,"minimizerMaxIter");
106 >  DefineOptionalParameter(MinimizerWriteFrq, "minimizerWriteFrq");
107 >  DefineOptionalParameter(MinimizerStepSize, "minimizerStepSize");
108 >  DefineOptionalParameter(MinimizerFTol, "minimizerFTol");
109 >  DefineOptionalParameter(MinimizerGTol, "minimizerGTol");
110 >  DefineOptionalParameter(MinimizerLSTol, "minimizerLSTol");
111 >  DefineOptionalParameter(MinimizerLSMaxIter, "minimizerLSMaxIter");
112 >  DefineOptionalParameter(ZconsGap, "zconsGap");
113 >  DefineOptionalParameter(ZconsFixtime, "zconsFixtime");
114 >  DefineOptionalParameter(ZconsUsingSMD, "zconsUsingSMD");
115 >  DefineOptionalParameter(ThermodynamicIntegrationLambda, "thermodynamicIntegrationLambda");
116 >  DefineOptionalParameter(ThermodynamicIntegrationK, "thermodynamicIntegrationK");
117 >  DefineOptionalParameter(ForceFieldVariant, "forceFieldVariant");
118 >  DefineOptionalParameter(ForceFieldFileName, "forceFieldFileName");
119 >  DefineOptionalParameter(ThermIntDistSpringConst, "thermIntDistSpringConst");
120 >  DefineOptionalParameter(ThermIntThetaSpringConst, "thermIntThetaSpringConst");
121 >  DefineOptionalParameter(ThermIntOmegaSpringConst, "thermIntOmegaSpringConst");
122 >  DefineOptionalParameter(SurfaceTension, "surfaceTension");
123 >  DefineOptionalParameter(PrintPressureTensor, "printPressureTensor");
124 >  DefineOptionalParameter(ElectrostaticSummationMethod, "electrostaticSummationMethod");
125 >  DefineOptionalParameter(CutoffPolicy, "cutoffPolicy");
126 >  DefineOptionalParameter(StatFileFormat, "statFileFormat");    
127    
128 <  hash_size = 23;
129 <  hash_shift = 4;
128 >  DefineOptionalParameterWithDefaultValue(MixingRule, "mixingRule", "standard");
129 >  DefineOptionalParameterWithDefaultValue(UsePeriodicBoundaryConditions, "usePeriodicBoundaryConditions", true);
130 >  DefineOptionalParameterWithDefaultValue(UseInitalTime, "useInitialTime", false);
131 >  DefineOptionalParameterWithDefaultValue(UseIntialExtendedSystemState, "useInitialExtendedSystemState", false);
132 >  DefineOptionalParameterWithDefaultValue(OrthoBoxTolerance, "orthoBoxTolerance", 1E-6);  
133 >  DefineOptionalParameterWithDefaultValue(UseSolidThermInt, "useSolidThermInt", false);
134 >  DefineOptionalParameterWithDefaultValue(UseLiquidThermInt, "useLiquidThermInt", false);
135 >  DefineOptionalParameterWithDefaultValue(ThermIntDistSpringConst, "thermIntDistSpringConst", 6.0);
136 >  DefineOptionalParameterWithDefaultValue(ThermIntThetaSpringConst, "thermIntThetaSpringConst", 7.5);
137 >  DefineOptionalParameterWithDefaultValue(ThermIntOmegaSpringConst, "thermIntOmegaSpringConst", 13.5);
138 >  DefineOptionalParameterWithDefaultValue(DampingAlpha, "dampingAlpha", 1.5);
139 >  DefineOptionalParameterWithDefaultValue(CompressDumpFile, "compressDumpFile", 0);
140 >  DefineOptionalParameterWithDefaultValue(SkinThickness, "skinThickness", 1.0);
141    
142 <  components = NULL;
142 > }
143 >
144 > int Globals::globalAssign( event* the_event ){
145    
146 <  command_table = new LinkedCommand*[hash_size];
147 <  for( i=0; i<hash_size; i++ ) command_table[i] = NULL;
148 <  
149 <  addHash( "forceField",    G_FORCEFIELD );
150 <  addHash( "nComponents",   G_NCOMPONENTS );
147 <  addHash( "targetTemp",    G_TARGETTEMP );
148 <  addHash( "ensemble",      G_ENSEMBLE );
149 <  
150 <  addHash( "dt",            G_DT );
151 <  addHash( "runTime",       G_RUNTIME );
152 <  
153 <  addHash( "initialConfig", G_INITIALCONFIG );
154 <  addHash( "finalConfig",   G_FINALCONFIG );
155 <  addHash( "nMol",          G_NMOL );
156 <  addHash( "density",       G_DENSITY );
157 <  addHash( "box",           G_BOX );
158 <  addHash( "boxX",          G_BOXX );
159 <  addHash( "boxY",          G_BOXY );
160 <  addHash( "boxZ",          G_BOXZ );
161 <  addHash( "sampleTime",    G_SAMPLETIME );
162 <  addHash( "resetTime",     G_RESETTIME );
163 <  addHash( "statusTime",    G_STATUSTIME );
164 <  addHash( "cutoffRadius",  G_RCUT );
165 <  addHash( "switchingRadius",  G_RSW );
166 <  addHash( "dielectric",    G_DIELECTRIC );
167 <  addHash( "tempSet",       G_TEMPSET );
168 <  addHash( "thermalTime",   G_THERMALTIME );
169 <  addHash( "mixingRule",    G_MIXINGRULE);
170 <  addHash( "usePeriodicBoundaryConditions",        G_USEPBC);
171 <  addHash( "useReactionField",                     G_USERF );
172 <  addHash( "targetPressure",                       G_TARGETPRESSURE);
173 <  addHash( "tauThermostat",                        G_TAUTHERMOSTAT);
174 <  addHash( "tauBarostat",                          G_TAUBAROSTAT);
175 <  addHash( "zconsTime",                            G_ZCONSTIME);
176 <  addHash( "nZconstraints",                        G_NZCONSTRAINTS);
177 <  addHash( "zconsTol",                             G_ZCONSTOL);
178 <  addHash( "zconsForcePolicy",                     G_ZCONSFORCEPOLICY);
179 <  addHash( "seed",                                 G_SEED);
180 <  addHash( "useInitialTime",                       G_USEINITTIME);
181 <  addHash( "useInitialExtendedSystemState",        G_USEINIT_XS_STATE);
182 <  addHash( "orthoBoxTolerance",                    G_ORTHOBOXTOLERANCE);
183 <  addHash( "minimizer",                            G_MINIMIZER);
184 <  addHash( "minimizerMaxIter",                     G_MIN_MAXITER);
185 <  addHash( "minimizerWriteFrq",                    G_MIN_WRITEFRQ);
186 <  addHash( "minimizerStepSize",                    G_MIN_STEPSIZE);
187 <  addHash( "minimizerFTol",                        G_MIN_FTOL);
188 <  addHash( "minimizerGTol",                        G_MIN_GTOL);
189 <  addHash( "minimizerLSTol",                       G_MIN_LSTOL);
190 <  addHash( "minimizerLSMaxIter",                   G_MIN_LSMAXITER);
191 <  addHash( "zconsGap",                             G_ZCONSGAP);
192 <  addHash( "zconsFixtime",                         G_ZCONSFIXTIME);
193 <  addHash( "zconsUsingSMD",                        G_ZCONSUSINGSMD);
194 <  addHash( "useSolidThermInt",                     G_USE_SOLID_THERM_INT);
195 <  addHash( "useLiquidThermInt",                    G_USE_LIQUID_THERM_INT);
196 <  addHash( "thermodynamicIntegrationLambda",       G_THERM_INT_LAMBDA);
197 <  addHash( "thermodynamicIntegrationK",            G_THERM_INT_K);
198 <  addHash( "forceFieldVariant",                    G_FORCEFIELD_VARIANT);
199 <  addHash( "forceFieldFileName",                    G_FORCEFIELD_FILENAME);
200 <  
201 <  strcpy( mixingRule,"standard");  //default mixing rules to standard.
202 <  usePBC = 1; //default  periodic boundry conditions to on
203 <  useRF  = 0;
204 <  useInitTime = 0; // default to pull init time from the init file
205 <  useInitXSstate = 0; // default to pull the extended state from the init file
206 <  orthoBoxTolerance = 1E-6;
207 <  useSolidThermInt = 0; // default solid-state thermodynamic integration to off
208 <  useLiquidThermInt = 0; // default liquid thermodynamic integration to off
146 >  int key;
147 >  int token;
148 >  interface_assign_type the_type =  the_event->evt.asmt.asmt_type;
149 >  char* lhs = the_event->evt.asmt.lhs;
150 >  std::string keyword(lhs);
151  
152 <  have_force_field =  0;
211 <  have_n_components = 0;
212 <  have_target_temp =  0;
213 <  have_ensemble =     0;
214 <  have_dt =           0;
215 <  have_run_time =     0;
216 <  
217 <  have_initial_config = 0;
218 <  have_final_config =   0;
219 <  have_n_mol =          0;
220 <  have_density =        0;
221 <  have_box =            0;
222 <  have_box_x =          0;
223 <  have_box_y =          0;
224 <  have_box_y =          0;
225 <  have_box_z =          0;
226 <  have_sample_time =    0;
227 <  have_status_time =    0;
228 <  have_reset_time =     0;
229 <  have_thermal_time =   0;
230 <  have_rcut =           0;
231 <  have_rsw =            0;
232 <  have_dielectric =     0;
233 <  have_tempSet =        0;
234 <  have_target_pressure =0;
235 <  have_q_mass =         0;
236 <  have_tau_thermostat = 0;
237 <  have_tau_barostat   = 0;
238 <  have_zcons_time     = 0;
239 <  have_n_zConstraints = 0;
240 <  have_zConstraints   = 0;
241 <  have_zcons_tol = 0;
242 <  have_zcons_gap = 0;
243 <  have_zcons_fixtime = 0;
244 <  have_zcons_using_smd = 0;  
245 <  have_seed = 0;
246 <  have_minimizer = 0;
247 <  have_minimizer_maxiteration = 0;
248 <  have_minimizer_writefrq = 0;
249 <  have_minimizer_stepsize = 0;
250 <  have_minimizer_ftol = 0;
251 <  have_minimizer_gtol = 0;
252 <  have_minimizer_ls_tol = 0;
253 <  have_minimizer_ls_maxiteration = 0;
254 <  have_thermodynamic_integration_lambda = 0;
255 <  have_thermodynamic_integration_k = 0;
256 <  have_forcefield_variant = 0;
257 <  have_forcefield_filename = 0;
152 >  bool result;
153  
154 +
155 +  ParamMap::iterator i =parameters_.find(keyword);
156 +  if (i != parameters_.end()) {
157 +    if( the_type == STRING ){
158 +       result = i->second->setData(std::string(the_event->evt.asmt.rhs.sval));
159 +       if (!result ) {
160 +            sprintf(the_event->err_msg, "Error in parsing meta-data file!\n\t%s must be a string.\n", keyword.c_str() );
161 +       }
162 +    } else if( the_type == DOUBLE ){
163 +      result = i->second->setData(the_event->evt.asmt.rhs.dval);
164 +       if (!result )
165 +         sprintf(the_event->err_msg, "Error in parsing meta-data file!\n\t%s must be a double.\n", keyword.c_str() );
166 +    }      
167 +    else if (the_type == INT ){
168 +      result = i->second->setData(the_event->evt.asmt.rhs.ival);
169 +       if (!result )
170 +         sprintf(the_event->err_msg,  "Error in parsing meta-data file!\n\t%s must be an int.\n", keyword.c_str() );
171 +      
172 +    } else {
173 +    
174 +    }
175 +  }
176 +
177 +  if (keyword == "nComponents" && getNComponents() > 0) {
178 +    components = new Component*[getNComponents()];
179 +  }else if (keyword == "nZconstraints" && getNZconstraints() > 0) {
180 +    zConstraints = new ZconStamp*[getNZconstraints()];
181 +  }
182 +  
183 +  return result;
184   }
185  
186   int Globals::newComponent( event* the_event ){
# Line 264 | Line 189 | int Globals::newComponent( event* the_event ){
189    int index = the_event->evt.blk_index;
190    char err[200];
191    
192 <  if( have_n_components && index < n_components )
192 >  if( haveNComponents() && index < getNComponents() )
193      components[index] = current_component;
194    else{
195 <    if( have_n_components ){
195 >    if( haveNComponents()  ){
196        sprintf( err, "meta-data parsing error: %d out of nComponents range",
197                 index );
198        the_event->err_msg = strdup( err );
# Line 331 | Line 256 | int Globals::newZconstraint( event* the_event ){
256    char err[200];
257    current_zConstraint = new ZconStamp( index );
258    
259 <  have_zConstraints = 1;
335 <
336 <  if( have_n_zConstraints && index < n_zConstraints )
259 >  if( haveNZconstraints() && index < getNZconstraints() )
260      zConstraints[index] = current_zConstraint;
261    else{
262 <    if( have_n_zConstraints ){
262 >    if( haveNZconstraints() ){
263        sprintf( err, "meta-data parsing error: %d out of nZconstraints range",
264                 index );
265        the_event->err_msg = strdup( err );
# Line 349 | Line 272 | int Globals::newZconstraint( event* the_event ){
272        return 0;
273      }
274    }  
275 <
275 >
276    return 1;
277   }
278  
# Line 394 | Line 317 | int Globals::globalAssign( event* the_event ){
317    return 1;
318   }
319  
320 < int Globals::globalAssign( event* the_event ){
398 <  
399 <  int key;
400 <  int token;
401 <  interface_assign_type the_type =  the_event->evt.asmt.asmt_type;
402 <  char* lhs = the_event->evt.asmt.lhs;
403 <  char err[300];
404 <  
405 <  token = 0;
406 <  key = hash( lhs );
407 <  if( command_table[key] != NULL ) token = command_table[key]->match( lhs );
408 <  
409 <  if( token ){
410 <    
411 <    switch( token ){
412 <      
413 <    case G_FORCEFIELD:
414 <      if( the_type == STRING ){
415 <        strcpy( force_field, the_event->evt.asmt.rhs.sval );
416 <        have_force_field = 1;
417 <        return 1;
418 <      }
419 <      
420 <      the_event->err_msg =
421 <        strdup( "Error in parsing meta-data file!\n\tforceField was not a string assignment.\n" );
422 <      return 0;
423 <      break;
424 <      
425 <    case G_NCOMPONENTS:
426 <      if( the_type == STRING ){
427 <        the_event->err_msg =
428 <          strdup("Error in parsing meta-data file!\n\tnComponents is not a double or an int.\n" );
429 <        return 0;
430 <      }
431 <      
432 <      else if( the_type == DOUBLE ){
433 <        n_components = (int)the_event->evt.asmt.rhs.dval;
434 <        components = new Component*[n_components];
435 <        have_n_components = 1;
436 <        return 1;
437 <      }
438 <      
439 <      else{
440 <        n_components = the_event->evt.asmt.rhs.ival;
441 <        components = new Component*[n_components];
442 <        have_n_components = 1;
443 <        return 1;
444 <      }
445 <      break;
320 > char* Globals::checkMe( void ){
321  
447    case G_NZCONSTRAINTS:
448      if( the_type == STRING ){
449        the_event->err_msg =
450          strdup("Error in parsing meta-data file!\n\tnZconstraints is not a double or an int.\n" );
451        return 0;
452      }
453      
454      else if( the_type == DOUBLE ){
455        n_zConstraints = (int)the_event->evt.asmt.rhs.dval;
456        zConstraints = new ZconStamp*[n_zConstraints];
457        have_n_zConstraints = 1;
458        return 1;
459      }
460      
461      else{
462        n_zConstraints = the_event->evt.asmt.rhs.ival;
463        zConstraints = new ZconStamp*[n_zConstraints];
464        have_n_zConstraints = 1;
465        return 1;
466      }
467      break;
468      
469    case G_TARGETTEMP:
470      switch( the_type ){
471        
472      case STRING:
473        the_event->err_msg =
474          strdup( "Error in parsing meta-data file!\n\ttargetTemp is not a double or int.\n" );
475        return 0;
476        break;
477        
478      case DOUBLE:
479        target_temp = the_event->evt.asmt.rhs.dval;
480        have_target_temp = 1;
481        return 1;
482        break;
483        
484      case INT:
485        target_temp = (double)the_event->evt.asmt.rhs.ival;
486        have_target_temp = 1;
487        return 1;
488        break;
489        
490      default:
491        the_event->err_msg =
492          strdup( "Error in parsing meta-data file!\n\ttargetTemp unrecognized.\n" );
493        return 0;
494        break;
495      }
496      break;
322  
323 <    case G_ORTHOBOXTOLERANCE:
324 <      switch( the_type ){
500 <        
501 <      case STRING:
502 <        the_event->err_msg =
503 <          strdup( "Error in parsing meta-data file!\n\torthoBoxTolerance is not a double or int.\n" );
504 <        return 0;
505 <        break;
506 <        
507 <      case DOUBLE:
508 <        orthoBoxTolerance = the_event->evt.asmt.rhs.dval;
509 <        have_target_temp = 1;
510 <        return 1;
511 <        break;
512 <        
513 <      case INT:
514 <        orthoBoxTolerance = (double)the_event->evt.asmt.rhs.ival;
515 <        have_target_temp = 1;
516 <        return 1;
517 <        break;
518 <        
519 <      default:
520 <        the_event->err_msg =
521 <          strdup( "Global error.orthoBoxTolerance unrecognized.\n" );
522 <        return 0;
523 <        break;
524 <      }
525 <      break;
526 <      
527 <    case G_ENSEMBLE:
528 <      if( the_type == STRING ){
529 <        strcpy( ensemble, the_event->evt.asmt.rhs.sval );
530 <        have_ensemble = 1;
531 <        return 1;
532 <      }
533 <      
534 <      the_event->err_msg =
535 <        strdup( "Error in parsing meta-data file!\n\tensemble was not assigned to a string\n" );
536 <      return 0;
537 <      break;      
538 <
539 <    case G_MIXINGRULE:
540 <      if( the_type == STRING ){
541 <        strcpy( mixingRule, the_event->evt.asmt.rhs.sval );
542 <        return 1;
543 <      }
544 <      
545 <      the_event->err_msg =
546 <        strdup( "Error in parsing meta-data file!\n\tmixing rule was not assigned to a string\n" );
547 <      return 0;
548 <      break;      
549 <      
550 <    case G_DT:
551 <      switch( the_type ){
552 <        
553 <      case STRING:
554 <        the_event->err_msg =
555 <          strdup( "Error in parsing meta-data file!\n\tdt is not a double or int.\n" );
556 <        return 0;
557 <        break;
558 <        
559 <      case DOUBLE:
560 <        dt = the_event->evt.asmt.rhs.dval;
561 <        have_dt = 1;
562 <        return 1;
563 <        break;
564 <        
565 <      case INT:
566 <        dt = (double)the_event->evt.asmt.rhs.ival;
567 <        have_dt = 1;
568 <        return 1;
569 <        break;
570 <        
571 <      default:
572 <        the_event->err_msg =
573 <          strdup( "Error in parsing meta-data file!\n\tdt unrecognized.\n" );
574 <        return 0;
575 <        break;
576 <      }
577 <      break;
578 <      
579 <    case G_RUNTIME:
580 <      switch( the_type ){
581 <        
582 <      case STRING:
583 <        the_event->err_msg =
584 <          strdup( "Error in parsing meta-data file!\n\trunTime is not a double or int.\n" );
585 <        return 0;
586 <        break;
587 <        
588 <      case DOUBLE:
589 <        run_time = the_event->evt.asmt.rhs.dval;
590 <        have_run_time = 1;
591 <        return 1;
592 <        break;
593 <        
594 <      case INT:
595 <        run_time = (double)the_event->evt.asmt.rhs.ival;
596 <        have_run_time = 1;
597 <        return 1;
598 <        break;
599 <        
600 <      default:
601 <        the_event->err_msg =
602 <          strdup( "Error in parsing meta-data file!\n\trunTime unrecognized.\n" );
603 <        return 0;
604 <        break;
605 <      }
606 <      break;
607 <      
608 <    case G_INITIALCONFIG:
609 <      if( the_type == STRING ){
610 <        strcpy( initial_config, the_event->evt.asmt.rhs.sval );
611 <        have_initial_config = 1;
612 <        return 1;
613 <      }
614 <      
615 <      the_event->err_msg =
616 <        strdup( "Error in parsing meta-data file!\n\tinitialConfig was not a string assignment.\n" );
617 <      return 0;
618 <      break;
619 <      
620 <    case G_FINALCONFIG:
621 <      if( the_type == STRING ){
622 <        strcpy( final_config, the_event->evt.asmt.rhs.sval );
623 <        have_final_config = 1;
624 <        return 1;
625 <      }
626 <      
627 <      the_event->err_msg =
628 <        strdup( "Error in parsing meta-data file!\n\tfinalConfig was not a string assignment.\n" );
629 <      return 0;
630 <      break;
631 <      
632 <    case G_NMOL:
633 <      switch( the_type ){
634 <        
635 <      case STRING:
636 <        the_event->err_msg =
637 <          strdup( "Error in parsing meta-data file!\n\tnMol is not a double or int.\n" );
638 <        return 0;
639 <        break;
640 <        
641 <      case DOUBLE:
642 <        n_mol = (int)the_event->evt.asmt.rhs.dval;
643 <        have_n_mol = 1;
644 <        return 1;
645 <        break;
646 <        
647 <      case INT:
648 <        n_mol = the_event->evt.asmt.rhs.ival;
649 <        have_n_mol = 1;
650 <        return 1;
651 <        break;
652 <        
653 <      default:
654 <        the_event->err_msg =
655 <          strdup( "Error in parsing meta-data file!\n\tnMol unrecognized.\n" );
656 <        return 0;
657 <        break;
658 <      }
659 <      break;
660 <      
661 <    case G_DENSITY:
662 <      switch( the_type ){
663 <        
664 <      case STRING:
665 <        the_event->err_msg =
666 <          strdup( "Error in parsing meta-data file!\n\tdensity is not a double or int.\n" );
667 <        return 0;
668 <        break;
669 <        
670 <      case DOUBLE:
671 <        density = the_event->evt.asmt.rhs.dval;
672 <        have_density = 1;
673 <        return 1;
674 <        break;
675 <        
676 <      case INT:
677 <        density = (double)the_event->evt.asmt.rhs.ival;
678 <        have_density = 1;
679 <        return 1;
680 <        break;
681 <        
682 <      default:
683 <        the_event->err_msg =
684 <          strdup( "Error in parsing meta-data file!\n\tdensity unrecognized.\n" );
685 <        return 0;
686 <        break;
687 <      }
688 <      break;
689 <      
690 <    case G_BOX:
691 <      switch( the_type ){
692 <        
693 <      case STRING:
694 <        the_event->err_msg =
695 <          strdup( "Error in parsing meta-data file!\n\tbox is not a double or int.\n" );
696 <        return 0;
697 <        break;
698 <        
699 <      case DOUBLE:
700 <        box = the_event->evt.asmt.rhs.dval;
701 <        have_box = 1;
702 <        return 1;
703 <        break;
704 <        
705 <      case INT:
706 <        box = (double)the_event->evt.asmt.rhs.ival;
707 <        have_box = 1;
708 <        return 1;
709 <        break;
710 <        
711 <      default:
712 <        the_event->err_msg =
713 <          strdup( "Error in parsing meta-data file!\n\tbox unrecognized.\n" );
714 <        return 0;
715 <        break;
716 <      }
717 <      break;
718 <      
719 <    case G_BOXX:
720 <      switch( the_type ){
721 <        
722 <      case STRING:
723 <        the_event->err_msg =
724 <          strdup( "Error in parsing meta-data file!\n\tboxX is not a double or int.\n" );
725 <        return 0;
726 <        break;
727 <        
728 <      case DOUBLE:
729 <        box_x = the_event->evt.asmt.rhs.dval;
730 <        have_box_x = 1;
731 <        return 1;
732 <        break;
733 <        
734 <      case INT:
735 <        box_x = (double)the_event->evt.asmt.rhs.ival;
736 <        have_box_x = 1;
737 <        return 1;
738 <        break;
739 <        
740 <      default:
741 <        the_event->err_msg =
742 <          strdup( "Error in parsing meta-data file!\n\tboxX unrecognized.\n" );
743 <        return 0;
744 <        break;
745 <      }
746 <      break;
747 <      
748 <    case G_BOXY:
749 <      switch( the_type ){
750 <        
751 <      case STRING:
752 <        the_event->err_msg =
753 <          strdup( "Error in parsing meta-data file!\n\tboxY is not a double or int.\n" );
754 <        return 0;
755 <        break;
756 <        
757 <      case DOUBLE:
758 <        box_y = the_event->evt.asmt.rhs.dval;
759 <        have_box_y = 1;
760 <        return 1;
761 <        break;
762 <        
763 <      case INT:
764 <        box_y = (double)the_event->evt.asmt.rhs.ival;
765 <        have_box_y = 1;
766 <        return 1;
767 <        break;
768 <        
769 <      default:
770 <        the_event->err_msg =
771 <          strdup( "Error in parsing meta-data file!\n\tboxY unrecognized.\n" );
772 <        return 0;
773 <        break;
774 <      }
775 <      break;
776 <      
777 <    case G_BOXZ:
778 <      switch( the_type ){
779 <        
780 <      case STRING:
781 <        the_event->err_msg =
782 <          strdup( "Error in parsing meta-data file!\n\tboxZ is not a double or int.\n" );
783 <        return 0;
784 <        break;
785 <        
786 <      case DOUBLE:
787 <        box_z = the_event->evt.asmt.rhs.dval;
788 <        have_box_z = 1;
789 <        return 1;
790 <        break;
791 <        
792 <      case INT:
793 <        box_z = (double)the_event->evt.asmt.rhs.ival;
794 <        have_box_z = 1;
795 <        return 1;
796 <        break;
797 <        
798 <      default:
799 <        the_event->err_msg =
800 <          strdup( "Error in parsing meta-data file!\n\tboxZ unrecognized.\n" );
801 <        return 0;
802 <        break;
803 <      }
804 <      break;
805 <      
806 <    case G_SAMPLETIME:
807 <      switch( the_type ){
808 <        
809 <      case STRING:
810 <        the_event->err_msg =
811 <          strdup( "Error in parsing meta-data file!\n\tsampleTime is not a double or int.\n" );
812 <        return 0;
813 <        break;
814 <        
815 <      case DOUBLE:
816 <        sample_time = the_event->evt.asmt.rhs.dval;
817 <        have_sample_time = 1;
818 <        return 1;
819 <        break;
820 <        
821 <      case INT:
822 <        sample_time = (double)the_event->evt.asmt.rhs.ival;
823 <        have_sample_time = 1;
824 <        return 1;
825 <        break;
826 <        
827 <      default:
828 <        the_event->err_msg =
829 <          strdup( "Error in parsing meta-data file!\n\tsampleTime unrecognized.\n" );
830 <        return 0;
831 <        break;
832 <      }
833 <      break;
834 <      
835 <    case G_STATUSTIME:
836 <      switch( the_type ){
837 <        
838 <      case STRING:
839 <        the_event->err_msg =
840 <          strdup( "Error in parsing meta-data file!\n\tstatusTime is not a double or int.\n" );
841 <        return 0;
842 <        break;
843 <        
844 <      case DOUBLE:
845 <        status_time = the_event->evt.asmt.rhs.dval;
846 <        have_status_time = 1;
847 <        return 1;
848 <        break;
849 <        
850 <      case INT:
851 <        status_time = (double)the_event->evt.asmt.rhs.ival;
852 <        have_status_time = 1;
853 <        return 1;
854 <        break;
855 <        
856 <      default:
857 <        the_event->err_msg =
858 <          strdup( "Error in parsing meta-data file!\n\tstatusTime unrecognized.\n" );
859 <        return 0;
860 <        break;
861 <      }
862 <      break;
863 <
864 <    case G_RESETTIME:
865 <      switch( the_type ){
866 <        
867 <      case STRING:
868 <        the_event->err_msg =
869 <          strdup( "Error in parsing meta-data file!\n\tresetTime is not a double or int.\n" );
870 <        return 0;
871 <        break;
872 <        
873 <      case DOUBLE:
874 <        resetTime = the_event->evt.asmt.rhs.dval;
875 <        have_reset_time = 1;
876 <        return 1;
877 <        break;
878 <        
879 <      case INT:
880 <        resetTime = (double)the_event->evt.asmt.rhs.ival;
881 <        have_reset_time = 1;
882 <        return 1;
883 <        break;
884 <        
885 <      default:
886 <        the_event->err_msg =
887 <          strdup( "Error in parsing meta-data file!\n\tresetTime unrecognized.\n" );
888 <        return 0;
889 <        break;
890 <      }
891 <      break;
892 <
893 <    case G_THERMALTIME:
894 <      switch( the_type ){
895 <        
896 <      case STRING:
897 <        the_event->err_msg =
898 <          strdup( "Error in parsing meta-data file!\n\tthermalTime is not a double or int.\n" );
899 <        return 0;
900 <        break;
901 <        
902 <      case DOUBLE:
903 <        thermal_time = the_event->evt.asmt.rhs.dval;
904 <        have_thermal_time = 1;
905 <        return 1;
906 <        break;
907 <        
908 <      case INT:
909 <        thermal_time = (double)the_event->evt.asmt.rhs.ival;
910 <        have_thermal_time = 1;
911 <        return 1;
912 <        break;
913 <        
914 <      default:
915 <        the_event->err_msg =
916 <          strdup( "Error in parsing meta-data file!\n\tthermalTime unrecognized.\n" );
917 <        return 0;
918 <        break;
919 <      }
920 <      break;
921 <      
922 <    case G_RCUT:
923 <      switch( the_type ){
924 <        
925 <      case STRING:
926 <        the_event->err_msg =
927 <          strdup( "Error in parsing meta-data file!\n\tcutoffRadius is not a double or int.\n" );
928 <        return 0;
929 <        break;
930 <        
931 <      case DOUBLE:
932 <        rcut = the_event->evt.asmt.rhs.dval;
933 <        have_rcut = 1;
934 <        return 1;
935 <        break;
936 <        
937 <      case INT:
938 <        rcut = (double)the_event->evt.asmt.rhs.ival;
939 <        have_rcut = 1;
940 <        return 1;
941 <        break;
942 <        
943 <      default:
944 <        the_event->err_msg =
945 <          strdup( "Error in parsing meta-data file!\n\tcutoffRadius unrecognized.\n" );
946 <        return 0;
947 <        break;
948 <      }
949 <      break;
950 <
951 <    case G_RSW:
952 <      switch( the_type ){
953 <        
954 <      case STRING:
955 <        the_event->err_msg =
956 <          strdup( "Error in parsing meta-data file!\n\tswitchingRadius is not a double or int.\n" );
957 <        return 0;
958 <        break;
959 <        
960 <      case DOUBLE:
961 <        rsw = the_event->evt.asmt.rhs.dval;
962 <        have_rsw = 1;
963 <        return 1;
964 <        break;
965 <        
966 <      case INT:
967 <        rsw = (double)the_event->evt.asmt.rhs.ival;
968 <        have_rsw = 1;
969 <        return 1;
970 <        break;
971 <        
972 <      default:
973 <        the_event->err_msg =
974 <          strdup( "Error in parsing meta-data file!\n\tswitchingRadius unrecognized.\n" );
975 <        return 0;
976 <        break;
977 <      }
978 <      break;
979 <      
980 <    case G_DIELECTRIC:
981 <      switch( the_type ){
982 <        
983 <      case STRING:
984 <        the_event->err_msg =
985 <          strdup( "Error in parsing meta-data file!\n\tdielectric is not a double or int.\n" );
986 <        return 0;
987 <        break;
988 <        
989 <      case DOUBLE:
990 <        dielectric = the_event->evt.asmt.rhs.dval;
991 <        have_dielectric = 1;
992 <        return 1;
993 <        break;
994 <        
995 <      case INT:
996 <        dielectric = (double)the_event->evt.asmt.rhs.ival;
997 <        have_dielectric = 1;
998 <        return 1;
999 <        break;
1000 <        
1001 <      default:
1002 <        the_event->err_msg =
1003 <          strdup( "Error in parsing meta-data file!\n\tdielectric unrecognized.\n" );
1004 <        return 0;
1005 <        break;
1006 <      }
1007 <      break;
1008 <      
1009 <    case G_TEMPSET:
1010 <      if( the_type == STRING ){
1011 <        
1012 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) tempSet = 1;
1013 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) tempSet = 0;
1014 <        else{
1015 <          the_event->err_msg =
1016 <            strdup( "Error in parsing meta-data file!\n\ttempSet was not \"true\" or \"false\".\n" );
1017 <          return 0;
1018 <        }
1019 <        have_tempSet = 1;
1020 <        return 1;
1021 <      }
1022 <      
1023 <      the_event->err_msg =
1024 <        strdup( "Error in parsing meta-data file!\n\ttempSet was not \"true\" or \"false\".\n" );
1025 <      return 0;
1026 <      break;
1027 <
1028 <    case G_USEINITTIME:
1029 <      if( the_type == STRING ){
1030 <        
1031 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useInitTime = 1;
1032 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useInitTime = 0;
1033 <        else{
1034 <          the_event->err_msg =
1035 <            strdup( "Error in parsing meta-data file!\n\tuseInitTime was not \"true\" or \"false\".\n" );
1036 <          return 0;
1037 <        }
1038 <        return 1;
1039 <      }
1040 <      
1041 <      the_event->err_msg =
1042 <        strdup( "Error in parsing meta-data file!\n\tuseInitTime was not \"true\" or \"false\".\n" );
1043 <      return 0;
1044 <      break;
1045 <
1046 <    case G_USEINIT_XS_STATE:
1047 <      if( the_type == STRING ){
1048 <        
1049 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval ))
1050 <          useInitXSstate = 1;
1051 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval ))
1052 <          useInitXSstate = 0;
1053 <        else{
1054 <          the_event->err_msg =
1055 <            strdup( "Error in parsing meta-data file!\n\tuseInitExtendedSystemState was not \"true\" or \"false\".\n" );
1056 <          return 0;
1057 <        }
1058 <        return 1;
1059 <      }
1060 <      
1061 <      the_event->err_msg =
1062 <        strdup( "Error in parsing meta-data file!\n\tuseInitExtendedSystemState was not \"true\" or \"false\".\n" );
1063 <      return 0;
1064 <      break;
1065 <      
1066 <    case G_USEPBC:
1067 <      if( the_type == STRING ){
1068 <        
1069 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) usePBC = 1;
1070 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) usePBC = 0;
1071 <        else{
1072 <          the_event->err_msg =
1073 <            strdup( "Error in parsing meta-data file!\n\tusePeriodicBoundaryConditions was not \"true\" or \"false\".\n" );
1074 <          return 0;
1075 <        }
1076 <        return 1;
1077 <      }
1078 <      
1079 <      the_event->err_msg =
1080 <        strdup( "Error in parsing meta-data file!\n\tusePeriodicBoundaryConditions was not \"true\" or \"false\".\n" );
1081 <      return 0;
1082 <      break;
1083 <
1084 <    case G_USERF:
1085 <      if( the_type == STRING ){
1086 <        
1087 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useRF = 1;
1088 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useRF = 0;
1089 <        else{
1090 <          the_event->err_msg =
1091 <            strdup( "Error in parsing meta-data file!\n\tuseReactionField was not \"true\" or \"false\".\n" );
1092 <          return 0;
1093 <        }
1094 <        return 1;
1095 <      }
1096 <      
1097 <      the_event->err_msg =
1098 <        strdup( "Error in parsing meta-data file!\n\tuseReactionField was not \"true\" or \"false\".\n" );
1099 <      return 0;
1100 <      break;
1101 <
1102 <    case G_TARGETPRESSURE:
1103 <      switch( the_type ){
1104 <        
1105 <      case STRING:
1106 <        the_event->err_msg =
1107 <          strdup( "Error in parsing meta-data file!\n\ttargetPressure is not a double or int.\n" );
1108 <        return 0;
1109 <        break;
1110 <        
1111 <      case DOUBLE:
1112 <        target_pressure = the_event->evt.asmt.rhs.dval;
1113 <        have_target_pressure = 1;
1114 <        return 1;
1115 <        break;
1116 <        
1117 <      case INT:
1118 <        target_pressure = (double)the_event->evt.asmt.rhs.ival;
1119 <        have_target_pressure = 1;
1120 <        return 1;
1121 <        break;
1122 <        
1123 <      default:
1124 <        the_event->err_msg =
1125 <          strdup( "Error in parsing meta-data file!\n\ttargetPressure unrecognized.\n" );
1126 <        return 0;
1127 <        break;
1128 <      }
1129 <      break;
1130 <
1131 <    case G_TAUTHERMOSTAT:
1132 <      switch( the_type ){
1133 <        
1134 <      case STRING:
1135 <        the_event->err_msg =
1136 <          strdup( "Error in parsing meta-data file!\n\ttauThermostat is not a double or int.\n" );
1137 <        return 0;
1138 <        break;
1139 <        
1140 <      case DOUBLE:
1141 <        tau_thermostat = the_event->evt.asmt.rhs.dval;
1142 <        have_tau_thermostat = 1;
1143 <        return 1;
1144 <        break;
1145 <        
1146 <      case INT:
1147 <        tau_thermostat = (double)the_event->evt.asmt.rhs.ival;
1148 <        have_tau_thermostat = 1;
1149 <        return 1;
1150 <        break;
1151 <        
1152 <      default:
1153 <        the_event->err_msg =
1154 <          strdup( "Error in parsing meta-data file!\n\ttauThermostat unrecognized.\n" );
1155 <        return 0;
1156 <        break;
1157 <      }
1158 <      break;
1159 <
1160 <    case G_TAUBAROSTAT:
1161 <      switch( the_type ){
1162 <        
1163 <      case STRING:
1164 <        the_event->err_msg =
1165 <          strdup( "Error in parsing meta-data file!\n\ttauBarostat is not a double or int.\n" );
1166 <        return 0;
1167 <        break;
1168 <        
1169 <      case DOUBLE:
1170 <        tau_barostat = the_event->evt.asmt.rhs.dval;
1171 <        have_tau_barostat = 1;
1172 <        return 1;
1173 <        break;
1174 <        
1175 <      case INT:
1176 <        tau_barostat = (double)the_event->evt.asmt.rhs.ival;
1177 <        have_tau_barostat = 1;
1178 <        return 1;
1179 <        break;
1180 <        
1181 <      default:
1182 <        the_event->err_msg =
1183 <          strdup( "Error in parsing meta-data file!\n\ttauBarostat unrecognized.\n" );
1184 <        return 0;
1185 <        break;
1186 <      }
1187 <      break;
1188 <      
1189 <    case G_ZCONSTIME:
1190 <      switch( the_type ){
1191 <        
1192 <      case STRING:
1193 <        the_event->err_msg =
1194 <          strdup( "Error in parsing meta-data file!\n\tzcons_time is not a double or int.\n" );
1195 <        return 0;
1196 <        break;
1197 <        
1198 <      case DOUBLE:
1199 <        zcons_time = the_event->evt.asmt.rhs.dval;
1200 <        have_zcons_time = 1;
1201 <        return 1;
1202 <        break;
1203 <        
1204 <      case INT:
1205 <        zcons_time = (double)the_event->evt.asmt.rhs.ival;
1206 <        have_zcons_time = 1;
1207 <        return 1;
1208 <        break;
1209 <        
1210 <      default:
1211 <        the_event->err_msg =
1212 <          strdup( "Error in parsing meta-data file!\n\tzcons_time unrecognized.\n" );
1213 <        return 0;
1214 <        break;
1215 <      }
1216 <      break;
1217 <
1218 <    case G_ZCONSTOL:
1219 <      switch( the_type ){
1220 <        
1221 <      case STRING:
1222 <        the_event->err_msg =
1223 <          strdup( "Error in parsing meta-data file!\n\tzcons_tol is not a double or int.\n" );
1224 <        return 0;
1225 <        break;
1226 <        
1227 <      case DOUBLE:
1228 <        zcons_tol = the_event->evt.asmt.rhs.dval;
1229 <        have_zcons_tol = 1;
1230 <        return 1;
1231 <        break;
1232 <        
1233 <      case INT:
1234 <        zcons_tol = (double)the_event->evt.asmt.rhs.ival;
1235 <        have_zcons_tol = 1;
1236 <        return 1;
1237 <        break;
1238 <        
1239 <      default:
1240 <        the_event->err_msg =
1241 <          strdup( "Error in parsing meta-data file!\n\tzcons_ol unrecognized.\n" );
1242 <        return 0;
1243 <        break;
1244 <      }
1245 <      break;
1246 <  
1247 <    case G_ZCONSFORCEPOLICY:
1248 <      switch( the_type ){
1249 <        
1250 <      case STRING:
1251 <   strcpy(zconsForcePolicy, the_event->evt.asmt.rhs.sval);
1252 <
1253 <   for(int i = 0; zconsForcePolicy[i] != '\0'; i++)
1254 <        {
1255 <      zconsForcePolicy[i] = toupper(zconsForcePolicy[i]);
1256 <   }
1257 <        have_zcons_force_policy = 1;
1258 <   return 1;
1259 <        break;
1260 <        
1261 <      case DOUBLE:
1262 <        the_event->err_msg =
1263 <          strdup( "Error in parsing meta-data file!\n\tzconsForcePolicy is not a double or int.\n" );
1264 <        return 0;
1265 <        break;
1266 <        
1267 <      case INT:
1268 <        the_event->err_msg =
1269 <          strdup( "Error in parsing meta-data file!\n\tzconsForcePolicy is not a double or int.\n" );
1270 <        return 0;
1271 <        break;
1272 <        
1273 <      default:
1274 <        the_event->err_msg =
1275 <          strdup( "Error in parsing meta-data file!\n\tzconsForcePolicy unrecognized.\n" );
1276 <        return 0;
1277 <        break;
1278 <      }
1279 <      break;
1280 <      
1281 <    case G_ZCONSGAP:
1282 <      switch( the_type ){
1283 <  
1284 <      case STRING:
1285 <        the_event->err_msg =
1286 <          strdup( "Error in parsing meta-data file!\n\tzcons_gap is not a double or int.\n" );
1287 <        return 0;
1288 <        break;
1289 <  
1290 <      case DOUBLE:
1291 <        zcons_gap = the_event->evt.asmt.rhs.dval;
1292 <        have_zcons_gap= 1;
1293 <        return 1;
1294 <        break;
1295 <  
1296 <      case INT:
1297 <        zcons_gap= (double)the_event->evt.asmt.rhs.ival;
1298 <        have_zcons_gap= 1;
1299 <        return 1;
1300 <        break;
1301 <  
1302 <      default:
1303 <        the_event->err_msg =
1304 <          strdup( "Error in parsing meta-data file!\n\tzcons_gap unrecognized.\n" );
1305 <        return 0;
1306 <        break;
1307 <      }
1308 <      break;
1309 <
1310 <    case G_ZCONSFIXTIME:
1311 <      switch( the_type ){
1312 <  
1313 <      case STRING:
1314 <        the_event->err_msg =
1315 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime is not a double or int.\n" );
1316 <        return 0;
1317 <        break;
1318 <  
1319 <      case DOUBLE:
1320 <        zcons_fixtime= the_event->evt.asmt.rhs.dval;
1321 <        have_zcons_fixtime= 1;
1322 <        return 1;
1323 <        break;
1324 <  
1325 <      case INT:
1326 <        zcons_fixtime= (double)the_event->evt.asmt.rhs.ival;
1327 <        have_zcons_fixtime= 1;
1328 <        return 1;
1329 <        break;
1330 <  
1331 <      default:
1332 <        the_event->err_msg =
1333 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime unrecognized.\n" );
1334 <        return 0;
1335 <        break;
1336 <      }
1337 <      break;
1338 <
1339 <    case G_ZCONSUSINGSMD:
1340 <      switch( the_type ){
1341 <  
1342 <      case STRING:
1343 <        the_event->err_msg =
1344 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime is not an  int.\n" );
1345 <        return 0;
1346 <        break;
1347 <  
1348 <      case DOUBLE:
1349 <        the_event->err_msg =
1350 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime is not an  int.\n" );
1351 <        return 0;
1352 <        break;
1353 <  
1354 <      case INT:
1355 <        zcons_using_smd= the_event->evt.asmt.rhs.ival;
1356 <        have_zcons_using_smd= 1;
1357 <        return 1;
1358 <        break;
1359 <  
1360 <      default:
1361 <        the_event->err_msg =
1362 <          strdup( "Error in parsing meta-data file!\n\tzcons_usingsmd unrecognized.\n" );
1363 <        return 0;
1364 <        break;
1365 <      }
1366 <      break;
1367 <      
1368 <    case G_MINIMIZER:
1369 <      switch( the_type ){
1370 <
1371 <      case STRING:
1372 <        strcpy(minimizer_name, the_event->evt.asmt.rhs.sval);
1373 <
1374 <        for(int i = 0; zconsForcePolicy[i] != '\0'; i++){
1375 <          zconsForcePolicy[i] = toupper(zconsForcePolicy[i]);
1376 <        }
1377 <        have_minimizer= 1;
1378 <        return 1;
1379 <        break;
1380 <        
1381 <      case DOUBLE:
1382 <        the_event->err_msg =
1383 <          strdup( "Error in parsing meta-data file!\n\tminimizer_name is not a double or int.\n" );
1384 <        return 0;
1385 <        break;
1386 <        
1387 <      case INT:
1388 <        the_event->err_msg =
1389 <          strdup( "Error in parsing meta-data file!\n\tminimizer_name is not a double or int.\n" );
1390 <        return 0;
1391 <        break;
1392 <        
1393 <      default:
1394 <        the_event->err_msg =
1395 <          strdup( "Error in parsing meta-data file!\n\tminimizer_name unrecognized.\n" );
1396 <        return 0;
1397 <        break;
1398 <      }
1399 <      break;
1400 <
1401 <    case G_MIN_MAXITER:
1402 <      switch( the_type ){
1403 <
1404 <      case STRING:
1405 <        the_event->err_msg =
1406 <          strdup( "Error in parsing meta-data file!\n\tminimizer_maxiteration is not a double or int.\n" );
1407 <        return 1;
1408 <        break;
1409 <        
1410 <      case DOUBLE:
1411 <        minimizer_maxiteration = (int)the_event->evt.asmt.rhs.dval;
1412 <        have_minimizer_maxiteration = 1;
1413 <        return 1;
1414 <        break;
1415 <        
1416 <      case INT:
1417 <        minimizer_maxiteration = the_event->evt.asmt.rhs.ival;
1418 <        have_minimizer_maxiteration = 1;
1419 <        return 1;
1420 <        break;
1421 <        
1422 <      default:
1423 <        the_event->err_msg =
1424 <          strdup( "Error in parsing meta-data file!\n\tminimizer_maxiteration unrecognized.\n" );
1425 <        return 0;
1426 <        break;
1427 <      }
1428 <      break;
1429 <      
1430 <    case G_MIN_WRITEFRQ:
1431 <      switch( the_type ){
1432 <
1433 <      case STRING:
1434 <        the_event->err_msg =
1435 <          strdup( "Error in parsing meta-data file!\n\tminimizer_writefrq is not an int.\n" );
1436 <        return 1;
1437 <        break;
1438 <        
1439 <      case DOUBLE:
1440 <        the_event->err_msg =
1441 <          strdup( "Error in parsing meta-data file!\n\tminimizer_writefrq is not an  int.\n" );
1442 <        return 1;
1443 <        break;
1444 <        
1445 <      case INT:
1446 <        minimizer_writefrq= the_event->evt.asmt.rhs.ival;
1447 <        have_minimizer_writefrq = 1;
1448 <        return 1;
1449 <        break;
1450 <        
1451 <      default:
1452 <        the_event->err_msg =
1453 <          strdup( "Error in parsing meta-data file!\n\tminimizer_writefrq unrecognized.\n" );
1454 <        return 0;
1455 <        break;
1456 <      }
1457 <      break;
1458 <
1459 <    case G_MIN_STEPSIZE:
1460 <      switch( the_type ){
1461 <
1462 <      case STRING:
1463 <        the_event->err_msg =
1464 <          strdup( "Error in parsing meta-data file!\n\tminimizer_resetfrq is not a double or int.\n" );
1465 <        return 1;
1466 <        break;
1467 <        
1468 <      case DOUBLE:
1469 <        minimizer_stepsize= the_event->evt.asmt.rhs.dval;
1470 <        have_minimizer_stepsize = 1;
1471 <        return 1;
1472 <        break;
1473 <        
1474 <      case INT:
1475 <        minimizer_stepsize= the_event->evt.asmt.rhs.ival;
1476 <        have_minimizer_stepsize = 1;
1477 <        return 1;
1478 <        break;
1479 <        
1480 <      default:
1481 <        the_event->err_msg =
1482 <          strdup( "Error in parsing meta-data file!\n\tminimizer_resetfrq unrecognized.\n" );
1483 <        return 0;
1484 <        break;
1485 <      }
1486 <      break;      
323 >  std::string err("The following required keywords are missing:\n");
324 >  short int have_err = 0;
325  
326 <    case G_MIN_FTOL:
327 <      switch( the_type ){
328 <
329 <      case STRING:
1492 <        the_event->err_msg =
1493 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ftol is not a double or int.\n" );
1494 <        return 1;
1495 <        break;
1496 <        
1497 <      case DOUBLE:
1498 <        minimizer_ftol= the_event->evt.asmt.rhs.dval;
1499 <        have_minimizer_ftol = 1;
1500 <        return 1;
1501 <        break;
1502 <        
1503 <      case INT:
1504 <        minimizer_ftol= the_event->evt.asmt.rhs.ival;
1505 <        have_minimizer_ftol = 1;
1506 <        return 1;
1507 <        break;
1508 <        
1509 <      default:
1510 <        the_event->err_msg =
1511 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ftol unrecognized.\n" );
1512 <        return 0;
1513 <        break;
1514 <      }
1515 <      break;
1516 <      
1517 <    case G_MIN_GTOL:
1518 <      switch( the_type ){
1519 <
1520 <      case STRING:
1521 <        the_event->err_msg =
1522 <          strdup( "Error in parsing meta-data file!\n\tminimizer_gtol is not a double or int.\n" );
1523 <        return 1;
1524 <        break;
1525 <        
1526 <      case DOUBLE:
1527 <        minimizer_gtol= the_event->evt.asmt.rhs.dval;
1528 <        have_minimizer_gtol = 1;
1529 <        return 1;
1530 <        break;
1531 <        
1532 <      case INT:
1533 <        minimizer_gtol= the_event->evt.asmt.rhs.ival;
1534 <        have_minimizer_gtol = 1;
1535 <        return 1;
1536 <        break;
1537 <        
1538 <      default:
1539 <        the_event->err_msg =
1540 <          strdup( "Error in parsing meta-data file!\n\tminimizer_gtol unrecognized.\n" );
1541 <        return 0;
1542 <        break;
1543 <      }
1544 <      break;
1545 <      
1546 <    case G_MIN_LSMAXITER:
1547 <      switch( the_type ){
1548 <
1549 <      case STRING:
1550 <        the_event->err_msg =
1551 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_maxiteration is not an int.\n" );
1552 <        return 1;
1553 <        break;
1554 <        
1555 <      case DOUBLE:
1556 <        the_event->err_msg =
1557 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_maxiteration is not an int.\n" );
1558 <        return 1;
1559 <        break;
1560 <        
1561 <      case INT:
1562 <        minimizer_ls_maxiteration = the_event->evt.asmt.rhs.ival;
1563 <        have_minimizer_ls_maxiteration = 1;
1564 <        return 1;
1565 <        break;
1566 <        
1567 <      default:
1568 <        the_event->err_msg =
1569 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_maxiteration unrecognized.\n" );
1570 <        return 0;
1571 <        break;
1572 <      }
1573 <      break;      
1574 <
1575 <    case G_MIN_LSTOL:
1576 <      switch( the_type ){
1577 <
1578 <      case STRING:
1579 <        the_event->err_msg =
1580 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_tol is not a double or int.\n" );
1581 <        return 1;
1582 <        break;
1583 <        
1584 <      case DOUBLE:
1585 <        minimizer_ls_tol= the_event->evt.asmt.rhs.dval;
1586 <        have_minimizer_ls_tol = 1;
1587 <        return 1;
1588 <        break;
1589 <        
1590 <      case INT:
1591 <        minimizer_ls_tol= the_event->evt.asmt.rhs.ival;
1592 <        have_minimizer_ls_tol = 1;
1593 <        return 1;
1594 <        break;
1595 <        
1596 <      default:
1597 <        the_event->err_msg =
1598 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_tol unrecognized.\n" );
1599 <        return 0;
1600 <        break;
1601 <      }
1602 <      break;
1603 <      
1604 <      // add more token cases here.
1605 <    case G_SEED:
1606 <      switch( the_type ){
1607 <        
1608 <      case STRING:
1609 <   the_event->err_msg =
1610 <          strdup( "Error in parsing meta-data file!\n\tseed is not a string.\n" );
1611 <        return 0;
1612 <   return 0;
1613 <        break;
1614 <        
1615 <      case DOUBLE:
1616 <   have_seed = 1;
1617 <   seed = (int)the_event->evt.asmt.rhs.dval;
1618 <        return 1;
1619 <        break;
1620 <        
1621 <      case INT:
1622 <   have_seed = 1;
1623 <   seed =  the_event->evt.asmt.rhs.ival ;
1624 <        return 1;
1625 <        break;
1626 <        
1627 <      default:
1628 <        the_event->err_msg =
1629 <          strdup( "Error in parsing meta-data file!\n\tseed unrecognized.\n" );
1630 <        return 0;
1631 <        break;
1632 <      }
1633 <      break;
1634 <
1635 <    case G_USE_SOLID_THERM_INT:
1636 <      if( the_type == STRING ){
1637 <        
1638 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useSolidThermInt = 1;
1639 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useSolidThermInt = 0;
1640 <        else{
1641 <          the_event->err_msg =
1642 <            strdup( "Error in parsing meta-data file!\n\tuseSolidThermInt was not \"true\" or \"false\".\n" );
1643 <          return 0;
1644 <        }
1645 <        return 1;
1646 <      }
1647 <      
1648 <      the_event->err_msg =
1649 <        strdup( "Error in parsing meta-data file!\n\tuseSolidThermInt was not \"true\" or \"false\".\n" );
1650 <      return 0;
1651 <      break;
1652 <
1653 <    case G_USE_LIQUID_THERM_INT:
1654 <      if( the_type == STRING ){
1655 <        
1656 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useLiquidThermInt = 1;
1657 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useLiquidThermInt = 0;
1658 <        else{
1659 <          the_event->err_msg =
1660 <            strdup( "Error in parsing meta-data file!\n\tuseLiquidThermInt was not \"true\" or \"false\".\n" );
1661 <          return 0;
1662 <        }
1663 <        return 1;
1664 <      }
1665 <      
1666 <      the_event->err_msg =
1667 <        strdup( "Error in parsing meta-data file!\n\tuseLiquidThermInt was not \"true\" or \"false\".\n" );
1668 <      return 0;
1669 <      break;
1670 <
1671 <    case G_THERM_INT_LAMBDA:
1672 <      switch( the_type ){
1673 <        
1674 <      case STRING:
1675 <        the_event->err_msg =
1676 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationLambda is not a double or int.\n" );
1677 <        return 1;
1678 <        break;
1679 <        
1680 <      case DOUBLE:
1681 <        thermodynamic_integration_lambda = the_event->evt.asmt.rhs.dval;
1682 <        have_thermodynamic_integration_lambda = 1;
1683 <        return 1;
1684 <        break;
1685 <        
1686 <      case INT:
1687 <        thermodynamic_integration_lambda = (double)the_event->evt.asmt.rhs.dval;
1688 <        have_thermodynamic_integration_lambda = 1;
1689 <        return 1;
1690 <        break;
1691 <        
1692 <      default:
1693 <        the_event->err_msg =
1694 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationLambda unrecognized.\n" );
1695 <        return 0;
1696 <        break;
1697 <      }
1698 <      break;      
1699 <
1700 <    case G_THERM_INT_K:
1701 <      switch( the_type ){
1702 <        
1703 <      case STRING:
1704 <        the_event->err_msg =
1705 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationK is not a double or int.\n" );
1706 <        return 1;
1707 <        break;
1708 <        
1709 <      case DOUBLE:
1710 <        thermodynamic_integration_k = the_event->evt.asmt.rhs.dval;
1711 <        have_thermodynamic_integration_k = 1;
1712 <        return 1;
1713 <        break;
1714 <        
1715 <      case INT:
1716 <        thermodynamic_integration_k = (double)the_event->evt.asmt.rhs.dval;
1717 <        have_thermodynamic_integration_k = 1;
1718 <        return 1;
1719 <        break;
1720 <        
1721 <      default:
1722 <        the_event->err_msg =
1723 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationK unrecognized.\n" );
1724 <        return 0;
1725 <        break;
1726 <      }
1727 <      break;      
1728 <    case G_FORCEFIELD_VARIANT:
1729 <      if( the_type == STRING ){
1730 <        strcpy( forcefield_variant, the_event->evt.asmt.rhs.sval );
1731 <        have_forcefield_variant = 1;
1732 <        return 1;
1733 <      }
1734 <      
1735 <      the_event->err_msg =
1736 <        strdup( "Error in parsing meta-data file!\n\tforceFieldVariant was not a string assignment.\n" );
1737 <      return 0;
1738 <      break;      
1739 <      // add more token cases here.      
1740 <
1741 <    case G_FORCEFIELD_FILENAME:
1742 <      if( the_type == STRING ){
1743 <        strcpy( forcefield_filename, the_event->evt.asmt.rhs.sval );
1744 <        have_forcefield_filename = 1;
1745 <        return 1;
1746 <      }
1747 <      
1748 <      the_event->err_msg =
1749 <        strdup( "Error in parsing meta-data file!\n\tforceFieldFileName was not a string assignment.\n" );
1750 <      return 0;
1751 <      break;      
1752 <      // add more token cases here.      
326 >  ParamMap::iterator i;
327 >  for (i = parameters_.begin(); i != parameters_.end(); ++i) {
328 >    if (!i->second->isOptional() && i->second->empty()) {
329 >        err +=  i->second->getKeyword() + "\n";
330      }
331    }
1755  
1756  switch( the_type ){
1757    
1758  case STRING:
1759    sprintf( err,
1760             "\tUnrecognized assignment:\n"
1761             "\t\t-> %s = %s\n",
1762             lhs, the_event->evt.asmt.rhs.sval );
1763    break;
1764    
1765  case DOUBLE:
1766    sprintf( err,
1767             "\tUnrecognized assignment:\n"
1768             "\t\t-> %s = %lf\n",
1769             lhs, the_event->evt.asmt.rhs.dval );
1770    break;
1771    
1772  case INT:
1773    sprintf( err,
1774             "\tUnrecognized assignment:\n"
1775             "\t\t-> %s = %d\n",
1776             lhs, the_event->evt.asmt.rhs.ival );
1777    break;
1778    
1779  default:
1780    sprintf( err,
1781             "\tUnrecognized assignment:\n"
1782             "\t\t-> %s = ?\n",
1783             lhs );
1784    break;
1785  }
1786  
1787  the_event->err_msg = strdup( err );
1788  return 0;
1789 }
332  
333 < char* Globals::checkMe( void ){
334 <  
335 <  char err[300];
336 <  short int have_err = 0;
333 >  CheckParameter(ForceField, isNotEmpty());
334 >  CheckParameter(NComponents,isPositive());
335 >  CheckParameter(TargetTemp, isPositive());
336 >  CheckParameter(Ensemble, isEqualIgnoreCase(std::string("NVE")) || isEqualIgnoreCase(std::string("NVT")) ||
337 >                                          isEqualIgnoreCase(std::string("NPTi")) || isEqualIgnoreCase(std::string("NPTf"))||
338 >                                          isEqualIgnoreCase(std::string("NPTxyz")) );
339  
340 <  strcpy( err, "The following required keywords are missing:\n" );
340 >  CheckParameter(Dt, isPositive());
341 >  CheckParameter(RunTime, isPositive());
342 >  CheckParameter(InitialConfig, isNotEmpty());
343 >  CheckParameter(FinalConfig, isNotEmpty());
344 >  CheckParameter(NMol, isPositive());
345 >  CheckParameter(Density, isPositive());
346 >  CheckParameter(Box, isPositive());
347 >  CheckParameter(BoxX, isPositive());
348 >  CheckParameter(BoxY, isPositive());
349 >  CheckParameter(BoxZ, isPositive());
350 >  CheckParameter(SampleTime, isNonNegative());
351 >  CheckParameter(ResetTime, isNonNegative());
352 >  CheckParameter(StatusTime, isNonNegative());
353 >  CheckParameter(CutoffRadius, isPositive());
354 >  CheckParameter(SwitchingRadius, isNonNegative());
355 >  CheckParameter(Dielectric, isPositive());
356 >  CheckParameter(ThermalTime,  isNonNegative());
357 >  CheckParameter(TargetPressure,  isPositive());
358 >  CheckParameter(TauThermostat, isPositive());
359 >  CheckParameter(TauBarostat, isPositive());
360 >  CheckParameter(ZconsTime, isPositive());
361 >  CheckParameter(NZconstraints, isPositive());  
362 >  CheckParameter(ZconsTol, isPositive());
363 >  //CheckParameter(ZconsForcePolicy,);
364 >  CheckParameter(Seed, isPositive());
365 >  CheckParameter(Minimizer, isEqualIgnoreCase(std::string("SD")) || isEqualIgnoreCase(std::string("CG")));
366 >  CheckParameter(MinimizerMaxIter, isPositive());
367 >  CheckParameter(MinimizerWriteFrq, isPositive());
368 >  CheckParameter(MinimizerStepSize, isPositive());
369 >  CheckParameter(MinimizerFTol, isPositive());
370 >  CheckParameter(MinimizerGTol, isPositive());
371 >  CheckParameter(MinimizerLSTol, isPositive());
372 >  CheckParameter(MinimizerLSMaxIter, isPositive());
373 >  CheckParameter(ZconsGap, isPositive());
374 >  CheckParameter(ZconsFixtime, isPositive());
375 >  CheckParameter(ThermodynamicIntegrationLambda, isPositive());
376 >  CheckParameter(ThermodynamicIntegrationK, isPositive());
377 >  CheckParameter(ForceFieldVariant, isNotEmpty());
378 >  CheckParameter(ForceFieldFileName, isNotEmpty());
379 >  CheckParameter(ThermIntDistSpringConst, isPositive());
380 >  CheckParameter(ThermIntThetaSpringConst, isPositive());
381 >  CheckParameter(ThermIntOmegaSpringConst, isPositive());
382 >  CheckParameter(SurfaceTension, isPositive());
383 >  CheckParameter(ElectrostaticSummationMethod, isEqualIgnoreCase(std::string("NONE")) || isEqualIgnoreCase(std::string("UNDAMPED_WOLF")) || isEqualIgnoreCase(std::string("DAMPED_WOLF")) || isEqualIgnoreCase(std::string("REACTION_FIELD")) );
384 >  CheckParameter(CutoffPolicy, isEqualIgnoreCase(std::string("MIX")) || isEqualIgnoreCase(std::string("MAX")) || isEqualIgnoreCase(std::string("TRADITIONAL")));
385 >  //CheckParameter(StatFileFormat,);    
386 >  //CheckParameter(MixingRule,);
387 >  CheckParameter(OrthoBoxTolerance, isPositive());  
388 >  CheckParameter(ThermIntDistSpringConst, isPositive());
389 >  CheckParameter(ThermIntThetaSpringConst, isPositive());
390 >  CheckParameter(ThermIntOmegaSpringConst, isPositive());
391 >  CheckParameter(DampingAlpha,isPositive());
392 >  CheckParameter(SkinThickness, isPositive());
393    
394 <  if( !have_force_field ){
395 <    strcat( err, "\t\t->forceField\n" );
396 <    have_err= 1;
1801 <  }
1802 <
1803 <  if( !have_n_components ){
1804 <    strcat( err, "\t\t->nComponents\n" );
1805 <    have_err= 1;
1806 <  }
1807 <
394 >  //@todo memory leak
395 >  if( have_err )
396 >    return strdup( err.c_str() );
397    
1809  if ( !have_ensemble ) {
1810    // I'm not doing MD:
1811    if ( !have_minimizer ) {
1812      // I'm not doing MD or minimization:
1813      strcat( err, "\t\t->either ensemble or minimizer must be set!\n" );
1814      have_err = 1;      
1815    } else {
1816      // I'm a minimizer:
1817    }
1818  } else {
1819    // I *am* doing MD:
1820    if( !have_dt ){
1821      strcat( err, "\t\t->dt (timestep in fs)\n" );
1822      have_err= 1;
1823    }
1824    if( !have_run_time ){
1825      strcat( err, "\t\t->runTime (total run time in fs)\n" );
1826      have_err= 1;
1827    }    
1828  }
1829      
1830  if( have_err ) return strdup( err );
1831  
398    return NULL;
399 +
400 +
401   }
402  
403   int Globals::globalEnd( event* the_event ){
# Line 1839 | Line 407 | int Globals::globalEnd( event* the_event ){
407  
408    return 1;
409   }
1842
1843 int Globals::hash( char* text ){
1844
1845  register unsigned short int i = 0; // loop counter
1846  int key = 0; // the hash key
1847  
1848  while( text[i] != '\0' ){
1849    
1850    key = ( ( key << hash_shift ) + text[i] ) % hash_size;
1851    
1852    i++;
1853  }
1854  
1855  if( key < 0 ){
1856
1857    // if the key is less than zero, we've had an overflow error
1858
1859    sprintf( painCave.errMsg,
1860             "There has been an overflow error in the Globals' hash key.");
1861    painCave.isFatal = 1;
1862    simError();
1863 #ifdef IS_MPI
1864    if( painCave.isEventLoop ){
1865      if( worldRank == 0 ) mpiInterfaceExit();
1866    }
1867 #endif //is_mpi
1868  }
1869  
1870  return key;
1871 }
1872
1873 void Globals::addHash( char* text, int token ){
1874
1875  int key;
1876  LinkedCommand* the_element;
1877
1878  the_element = new LinkedCommand;
1879  the_element->setValues( text, token );
1880
1881  key = hash( text );
1882
1883  the_element->setNext( command_table[key] );
1884  command_table[key] = the_element;
1885 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines