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 2238 by tim, Sun May 22 21:05:15 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 < * global 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 < #define G_THERM_INT_DIST_SPRING  54
117 < #define G_THERM_INT_THETA_SPRING 55
118 < #define G_THERM_INT_OMEGA_SPRING 56
119 < #define G_SURFACETENSION 57
120 < #define G_PRINTPREESURETENSOR   58
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 <  initalize();
65 < }
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 < Globals::~Globals(){
68 <  int i;
128 <  if( components != NULL ){
129 <    for( i=0; i<n_components; i++ ) delete components[i];
130 <    delete[] components;
131 <  }
132 < }
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  
70 < void Globals::initalize(){
71 <  int i;
70 >
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 <  components = NULL;
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 <  command_table.insert(CommandMapType::value_type("forceField", G_FORCEFIELD));
140 <  command_table.insert(CommandMapType::value_type("nComponents", G_NCOMPONENTS));
141 <  command_table.insert(CommandMapType::value_type("targetTemp", G_TARGETTEMP));
142 <  command_table.insert(CommandMapType::value_type("ensemble", G_ENSEMBLE));
143 <  command_table.insert(CommandMapType::value_type("dt", G_DT));
144 <  command_table.insert(CommandMapType::value_type("runTime", G_RUNTIME));
145 <  command_table.insert(CommandMapType::value_type("initialConfig", G_INITIALCONFIG));
146 <  command_table.insert(CommandMapType::value_type("finalConfig", G_FINALCONFIG));
147 <  command_table.insert(CommandMapType::value_type("nMol", G_NMOL));
148 <  command_table.insert(CommandMapType::value_type("density", G_DENSITY));
149 <  command_table.insert(CommandMapType::value_type("box", G_BOX));
150 <  command_table.insert(CommandMapType::value_type("boxX", G_BOXX));
151 <  command_table.insert(CommandMapType::value_type("boxY", G_BOXY));
152 <  command_table.insert(CommandMapType::value_type("boxZ", G_BOXZ));
153 <  command_table.insert(CommandMapType::value_type("sampleTime", G_SAMPLETIME));
154 <  command_table.insert(CommandMapType::value_type("resetTime", G_RESETTIME));
155 <  command_table.insert(CommandMapType::value_type("statusTime", G_STATUSTIME));
156 <  command_table.insert(CommandMapType::value_type("cutoffRadius", G_RCUT));
157 <  command_table.insert(CommandMapType::value_type("switchingRadius", G_RSW));
158 <  command_table.insert(CommandMapType::value_type("dielectric", G_DIELECTRIC));
159 <  command_table.insert(CommandMapType::value_type("tempSet", G_TEMPSET));
160 <  command_table.insert(CommandMapType::value_type("thermalTime", G_THERMALTIME));
161 <  command_table.insert(CommandMapType::value_type("mixingRule", G_MIXINGRULE));
162 <  command_table.insert(CommandMapType::value_type("usePeriodicBoundaryConditions", G_USEPBC));
163 <  command_table.insert(CommandMapType::value_type("useReactionField", G_USERF));
164 <  command_table.insert(CommandMapType::value_type("targetPressure", G_TARGETPRESSURE));
165 <  command_table.insert(CommandMapType::value_type("tauThermostat", G_TAUTHERMOSTAT));
166 <  command_table.insert(CommandMapType::value_type("tauBarostat", G_TAUBAROSTAT));
167 <  command_table.insert(CommandMapType::value_type("zconsTime", G_ZCONSTIME));
168 <  command_table.insert(CommandMapType::value_type("nZconstraints", G_NZCONSTRAINTS));
169 <  command_table.insert(CommandMapType::value_type("zconsTol", G_ZCONSTOL));
170 <  command_table.insert(CommandMapType::value_type("zconsForcePolicy", G_ZCONSFORCEPOLICY));
171 <  command_table.insert(CommandMapType::value_type("seed", G_SEED));
172 <  command_table.insert(CommandMapType::value_type("useInitialTime", G_USEINITTIME));
173 <  command_table.insert(CommandMapType::value_type("useInitialExtendedSystemState", G_USEINIT_XS_STATE));
174 <  command_table.insert(CommandMapType::value_type("orthoBoxTolerance", G_ORTHOBOXTOLERANCE));
175 <  command_table.insert(CommandMapType::value_type("minimizer", G_MINIMIZER));
176 <  command_table.insert(CommandMapType::value_type("minimizerMaxIter", G_MIN_MAXITER));
177 <  command_table.insert(CommandMapType::value_type("minimizerWriteFrq", G_MIN_WRITEFRQ));
178 <  command_table.insert(CommandMapType::value_type("minimizerStepSize", G_MIN_STEPSIZE));
179 <  command_table.insert(CommandMapType::value_type("minimizerFTol", G_MIN_FTOL));
180 <  command_table.insert(CommandMapType::value_type("minimizerGTol", G_MIN_GTOL));
181 <  command_table.insert(CommandMapType::value_type("minimizerLSTol", G_MIN_LSTOL));
182 <  command_table.insert(CommandMapType::value_type("minimizerLSMaxIter", G_MIN_LSMAXITER));
183 <  command_table.insert(CommandMapType::value_type("zconsGap", G_ZCONSGAP));
184 <  command_table.insert(CommandMapType::value_type("zconsFixtime", G_ZCONSFIXTIME));
185 <  command_table.insert(CommandMapType::value_type("zconsUsingSMD", G_ZCONSUSINGSMD));
186 <  command_table.insert(CommandMapType::value_type("useSolidThermInt", G_USE_SOLID_THERM_INT));
187 <  command_table.insert(CommandMapType::value_type("useLiquidThermInt", G_USE_LIQUID_THERM_INT));
188 <  command_table.insert(CommandMapType::value_type("thermodynamicIntegrationLambda", G_THERM_INT_LAMBDA));
189 <  command_table.insert(CommandMapType::value_type("thermodynamicIntegrationK", G_THERM_INT_K));
190 <  command_table.insert(CommandMapType::value_type("forceFieldVariant", G_FORCEFIELD_VARIANT));
191 <  command_table.insert(CommandMapType::value_type("forceFieldFileName", G_FORCEFIELD_FILENAME));
192 <  command_table.insert(CommandMapType::value_type("thermIntDistSpringConst", G_THERM_INT_DIST_SPRING));
193 <  command_table.insert(CommandMapType::value_type("thermIntThetaSpringConst", G_THERM_INT_THETA_SPRING));
194 <  command_table.insert(CommandMapType::value_type("thermIntOmegaSpringConst", G_THERM_INT_OMEGA_SPRING));
195 <  command_table.insert(CommandMapType::value_type("surfaceTension", G_SURFACETENSION));
196 <  command_table.insert(CommandMapType::value_type("printPressureTensor", G_PRINTPREESURETENSOR));
142 > }
143  
144 + int Globals::globalAssign( event* the_event ){
145 +  
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 <  strcpy( mixingRule,"standard");  //default mixing rules to standard.
200 <  usePBC = 1; //default  periodic boundry conditions to on
201 <  useRF  = 0;
202 <  useInitTime = 0; // default to pull init time from the init file
203 <  useInitXSstate = 0; // default to pull the extended state from the init file
204 <  orthoBoxTolerance = 1E-6;
205 <  useSolidThermInt = 0; // default solid-state thermodynamic integration to off
206 <  useLiquidThermInt = 0; // default liquid thermodynamic integration to off
152 >  bool result;
153  
154 <  have_force_field =  0;
155 <  have_n_components = 0;
156 <  have_target_temp =  0;
157 <  have_ensemble =     0;
158 <  have_dt =           0;
159 <  have_run_time =     0;
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 <  have_initial_config = 0;
216 <  have_final_config =   0;
217 <  have_n_mol =          0;
218 <  have_density =        0;
219 <  have_box =            0;
220 <  have_box_x =          0;
221 <  have_box_y =          0;
222 <  have_box_y =          0;
223 <  have_box_z =          0;
224 <  have_sample_time =    0;
225 <  have_status_time =    0;
226 <  have_reset_time =     0;
227 <  have_thermal_time =   0;
228 <  have_rcut =           0;
229 <  have_rsw =            0;
230 <  have_dielectric =     0;
231 <  have_tempSet =        0;
232 <  have_target_pressure =0;
233 <  have_q_mass =         0;
234 <  have_tau_thermostat = 0;
235 <  have_tau_barostat   = 0;
236 <  have_zcons_time     = 0;
237 <  have_n_zConstraints = 0;
238 <  have_zConstraints   = 0;
239 <  have_zcons_tol = 0;
240 <  have_zcons_gap = 0;
241 <  have_zcons_fixtime = 0;
242 <  have_zcons_using_smd = 0;  
243 <  have_seed = 0;
244 <  have_minimizer = 0;
245 <  have_minimizer_maxiteration = 0;
246 <  have_minimizer_writefrq = 0;
247 <  have_minimizer_stepsize = 0;
248 <  have_minimizer_ftol = 0;
249 <  have_minimizer_gtol = 0;
250 <  have_minimizer_ls_tol = 0;
251 <  have_minimizer_ls_maxiteration = 0;
252 <  have_thermodynamic_integration_lambda = 0;
253 <  have_thermodynamic_integration_k = 0;
254 <  have_forcefield_variant = 0;
255 <  have_forcefield_filename = 0;
256 <  have_dist_spring_constant =  0;
257 <  have_theta_spring_constant = 0;
258 <  have_omega_spring_constant = 0;
259 <  have_surface_tension = 0;
260 <  have_print_pressure_tensor = 0;
183 >  return result;
184   }
185  
186   int Globals::newComponent( event* the_event ){
# Line 266 | 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 333 | Line 256 | int Globals::newZconstraint( event* the_event ){
256    char err[200];
257    current_zConstraint = new ZconStamp( index );
258    
259 <  have_zConstraints = 1;
337 <
338 <  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 351 | Line 272 | int Globals::newZconstraint( event* the_event ){
272        return 0;
273      }
274    }  
275 <
275 >
276    return 1;
277   }
278  
# Line 396 | Line 317 | int Globals::globalAssign( event* the_event ){
317    return 1;
318   }
319  
320 < int Globals::globalAssign( event* the_event ){
400 <  
401 <  int key;
402 <  int token;
403 <  interface_assign_type the_type =  the_event->evt.asmt.asmt_type;
404 <  char* lhs = the_event->evt.asmt.lhs;
405 <  char err[300];
406 <  
407 <  token = 0;
408 <
409 <  CommandMapType::iterator iter;
410 <  std::string keyword(lhs);
411 <  iter = command_table.find(keyword);
412 <  if (iter != command_table.end()) {
413 <    token = iter->second;
414 <  }
415 <  
416 <  if( token ){
417 <    
418 <    switch( token ){
419 <      
420 <    case G_FORCEFIELD:
421 <      if( the_type == STRING ){
422 <        strcpy( force_field, the_event->evt.asmt.rhs.sval );
423 <        have_force_field = 1;
424 <        return 1;
425 <      }
426 <      
427 <      the_event->err_msg =
428 <        strdup( "Error in parsing meta-data file!\n\tforceField was not a string assignment.\n" );
429 <      return 0;
430 <      break;
431 <      
432 <    case G_NCOMPONENTS:
433 <      if( the_type == STRING ){
434 <        the_event->err_msg =
435 <          strdup("Error in parsing meta-data file!\n\tnComponents is not a double or an int.\n" );
436 <        return 0;
437 <      }
438 <      
439 <      else if( the_type == DOUBLE ){
440 <        n_components = (int)the_event->evt.asmt.rhs.dval;
441 <        components = new Component*[n_components];
442 <        have_n_components = 1;
443 <        return 1;
444 <      }
445 <      
446 <      else{
447 <        n_components = the_event->evt.asmt.rhs.ival;
448 <        components = new Component*[n_components];
449 <        have_n_components = 1;
450 <        return 1;
451 <      }
452 <      break;
320 > char* Globals::checkMe( void ){
321  
454    case G_NZCONSTRAINTS:
455      if( the_type == STRING ){
456        the_event->err_msg =
457          strdup("Error in parsing meta-data file!\n\tnZconstraints is not a double or an int.\n" );
458        return 0;
459      }
460      
461      else if( the_type == DOUBLE ){
462        n_zConstraints = (int)the_event->evt.asmt.rhs.dval;
463        zConstraints = new ZconStamp*[n_zConstraints];
464        have_n_zConstraints = 1;
465        return 1;
466      }
467      
468      else{
469        n_zConstraints = the_event->evt.asmt.rhs.ival;
470        zConstraints = new ZconStamp*[n_zConstraints];
471        have_n_zConstraints = 1;
472        return 1;
473      }
474      break;
475      
476    case G_TARGETTEMP:
477      switch( the_type ){
478        
479      case STRING:
480        the_event->err_msg =
481          strdup( "Error in parsing meta-data file!\n\ttargetTemp is not a double or int.\n" );
482        return 0;
483        break;
484        
485      case DOUBLE:
486        target_temp = the_event->evt.asmt.rhs.dval;
487        have_target_temp = 1;
488        return 1;
489        break;
490        
491      case INT:
492        target_temp = (double)the_event->evt.asmt.rhs.ival;
493        have_target_temp = 1;
494        return 1;
495        break;
496        
497      default:
498        the_event->err_msg =
499          strdup( "Error in parsing meta-data file!\n\ttargetTemp unrecognized.\n" );
500        return 0;
501        break;
502      }
503      break;
322  
323 <    case G_ORTHOBOXTOLERANCE:
324 <      switch( the_type ){
507 <        
508 <      case STRING:
509 <        the_event->err_msg =
510 <          strdup( "Error in parsing meta-data file!\n\torthoBoxTolerance is not a double or int.\n" );
511 <        return 0;
512 <        break;
513 <        
514 <      case DOUBLE:
515 <        orthoBoxTolerance = the_event->evt.asmt.rhs.dval;
516 <        have_target_temp = 1;
517 <        return 1;
518 <        break;
519 <        
520 <      case INT:
521 <        orthoBoxTolerance = (double)the_event->evt.asmt.rhs.ival;
522 <        have_target_temp = 1;
523 <        return 1;
524 <        break;
525 <        
526 <      default:
527 <        the_event->err_msg =
528 <          strdup( "Global error.orthoBoxTolerance unrecognized.\n" );
529 <        return 0;
530 <        break;
531 <      }
532 <      break;
533 <      
534 <    case G_ENSEMBLE:
535 <      if( the_type == STRING ){
536 <        strcpy( ensemble, the_event->evt.asmt.rhs.sval );
537 <        have_ensemble = 1;
538 <        return 1;
539 <      }
540 <      
541 <      the_event->err_msg =
542 <        strdup( "Error in parsing meta-data file!\n\tensemble was not assigned to a string\n" );
543 <      return 0;
544 <      break;      
545 <
546 <    case G_MIXINGRULE:
547 <      if( the_type == STRING ){
548 <        strcpy( mixingRule, the_event->evt.asmt.rhs.sval );
549 <        return 1;
550 <      }
551 <      
552 <      the_event->err_msg =
553 <        strdup( "Error in parsing meta-data file!\n\tmixing rule was not assigned to a string\n" );
554 <      return 0;
555 <      break;      
556 <      
557 <    case G_DT:
558 <      switch( the_type ){
559 <        
560 <      case STRING:
561 <        the_event->err_msg =
562 <          strdup( "Error in parsing meta-data file!\n\tdt is not a double or int.\n" );
563 <        return 0;
564 <        break;
565 <        
566 <      case DOUBLE:
567 <        dt = the_event->evt.asmt.rhs.dval;
568 <        have_dt = 1;
569 <        return 1;
570 <        break;
571 <        
572 <      case INT:
573 <        dt = (double)the_event->evt.asmt.rhs.ival;
574 <        have_dt = 1;
575 <        return 1;
576 <        break;
577 <        
578 <      default:
579 <        the_event->err_msg =
580 <          strdup( "Error in parsing meta-data file!\n\tdt unrecognized.\n" );
581 <        return 0;
582 <        break;
583 <      }
584 <      break;
585 <      
586 <    case G_RUNTIME:
587 <      switch( the_type ){
588 <        
589 <      case STRING:
590 <        the_event->err_msg =
591 <          strdup( "Error in parsing meta-data file!\n\trunTime is not a double or int.\n" );
592 <        return 0;
593 <        break;
594 <        
595 <      case DOUBLE:
596 <        run_time = the_event->evt.asmt.rhs.dval;
597 <        have_run_time = 1;
598 <        return 1;
599 <        break;
600 <        
601 <      case INT:
602 <        run_time = (double)the_event->evt.asmt.rhs.ival;
603 <        have_run_time = 1;
604 <        return 1;
605 <        break;
606 <        
607 <      default:
608 <        the_event->err_msg =
609 <          strdup( "Error in parsing meta-data file!\n\trunTime unrecognized.\n" );
610 <        return 0;
611 <        break;
612 <      }
613 <      break;
614 <      
615 <    case G_INITIALCONFIG:
616 <      if( the_type == STRING ){
617 <        strcpy( initial_config, the_event->evt.asmt.rhs.sval );
618 <        have_initial_config = 1;
619 <        return 1;
620 <      }
621 <      
622 <      the_event->err_msg =
623 <        strdup( "Error in parsing meta-data file!\n\tinitialConfig was not a string assignment.\n" );
624 <      return 0;
625 <      break;
626 <      
627 <    case G_FINALCONFIG:
628 <      if( the_type == STRING ){
629 <        strcpy( final_config, the_event->evt.asmt.rhs.sval );
630 <        have_final_config = 1;
631 <        return 1;
632 <      }
633 <      
634 <      the_event->err_msg =
635 <        strdup( "Error in parsing meta-data file!\n\tfinalConfig was not a string assignment.\n" );
636 <      return 0;
637 <      break;
638 <      
639 <    case G_NMOL:
640 <      switch( the_type ){
641 <        
642 <      case STRING:
643 <        the_event->err_msg =
644 <          strdup( "Error in parsing meta-data file!\n\tnMol is not a double or int.\n" );
645 <        return 0;
646 <        break;
647 <        
648 <      case DOUBLE:
649 <        n_mol = (int)the_event->evt.asmt.rhs.dval;
650 <        have_n_mol = 1;
651 <        return 1;
652 <        break;
653 <        
654 <      case INT:
655 <        n_mol = the_event->evt.asmt.rhs.ival;
656 <        have_n_mol = 1;
657 <        return 1;
658 <        break;
659 <        
660 <      default:
661 <        the_event->err_msg =
662 <          strdup( "Error in parsing meta-data file!\n\tnMol unrecognized.\n" );
663 <        return 0;
664 <        break;
665 <      }
666 <      break;
667 <      
668 <    case G_DENSITY:
669 <      switch( the_type ){
670 <        
671 <      case STRING:
672 <        the_event->err_msg =
673 <          strdup( "Error in parsing meta-data file!\n\tdensity is not a double or int.\n" );
674 <        return 0;
675 <        break;
676 <        
677 <      case DOUBLE:
678 <        density = the_event->evt.asmt.rhs.dval;
679 <        have_density = 1;
680 <        return 1;
681 <        break;
682 <        
683 <      case INT:
684 <        density = (double)the_event->evt.asmt.rhs.ival;
685 <        have_density = 1;
686 <        return 1;
687 <        break;
688 <        
689 <      default:
690 <        the_event->err_msg =
691 <          strdup( "Error in parsing meta-data file!\n\tdensity unrecognized.\n" );
692 <        return 0;
693 <        break;
694 <      }
695 <      break;
696 <      
697 <    case G_BOX:
698 <      switch( the_type ){
699 <        
700 <      case STRING:
701 <        the_event->err_msg =
702 <          strdup( "Error in parsing meta-data file!\n\tbox is not a double or int.\n" );
703 <        return 0;
704 <        break;
705 <        
706 <      case DOUBLE:
707 <        box = the_event->evt.asmt.rhs.dval;
708 <        have_box = 1;
709 <        return 1;
710 <        break;
711 <        
712 <      case INT:
713 <        box = (double)the_event->evt.asmt.rhs.ival;
714 <        have_box = 1;
715 <        return 1;
716 <        break;
717 <        
718 <      default:
719 <        the_event->err_msg =
720 <          strdup( "Error in parsing meta-data file!\n\tbox unrecognized.\n" );
721 <        return 0;
722 <        break;
723 <      }
724 <      break;
725 <      
726 <    case G_BOXX:
727 <      switch( the_type ){
728 <        
729 <      case STRING:
730 <        the_event->err_msg =
731 <          strdup( "Error in parsing meta-data file!\n\tboxX is not a double or int.\n" );
732 <        return 0;
733 <        break;
734 <        
735 <      case DOUBLE:
736 <        box_x = the_event->evt.asmt.rhs.dval;
737 <        have_box_x = 1;
738 <        return 1;
739 <        break;
740 <        
741 <      case INT:
742 <        box_x = (double)the_event->evt.asmt.rhs.ival;
743 <        have_box_x = 1;
744 <        return 1;
745 <        break;
746 <        
747 <      default:
748 <        the_event->err_msg =
749 <          strdup( "Error in parsing meta-data file!\n\tboxX unrecognized.\n" );
750 <        return 0;
751 <        break;
752 <      }
753 <      break;
754 <      
755 <    case G_BOXY:
756 <      switch( the_type ){
757 <        
758 <      case STRING:
759 <        the_event->err_msg =
760 <          strdup( "Error in parsing meta-data file!\n\tboxY is not a double or int.\n" );
761 <        return 0;
762 <        break;
763 <        
764 <      case DOUBLE:
765 <        box_y = the_event->evt.asmt.rhs.dval;
766 <        have_box_y = 1;
767 <        return 1;
768 <        break;
769 <        
770 <      case INT:
771 <        box_y = (double)the_event->evt.asmt.rhs.ival;
772 <        have_box_y = 1;
773 <        return 1;
774 <        break;
775 <        
776 <      default:
777 <        the_event->err_msg =
778 <          strdup( "Error in parsing meta-data file!\n\tboxY unrecognized.\n" );
779 <        return 0;
780 <        break;
781 <      }
782 <      break;
783 <      
784 <    case G_BOXZ:
785 <      switch( the_type ){
786 <        
787 <      case STRING:
788 <        the_event->err_msg =
789 <          strdup( "Error in parsing meta-data file!\n\tboxZ is not a double or int.\n" );
790 <        return 0;
791 <        break;
792 <        
793 <      case DOUBLE:
794 <        box_z = the_event->evt.asmt.rhs.dval;
795 <        have_box_z = 1;
796 <        return 1;
797 <        break;
798 <        
799 <      case INT:
800 <        box_z = (double)the_event->evt.asmt.rhs.ival;
801 <        have_box_z = 1;
802 <        return 1;
803 <        break;
804 <        
805 <      default:
806 <        the_event->err_msg =
807 <          strdup( "Error in parsing meta-data file!\n\tboxZ unrecognized.\n" );
808 <        return 0;
809 <        break;
810 <      }
811 <      break;
812 <      
813 <    case G_SAMPLETIME:
814 <      switch( the_type ){
815 <        
816 <      case STRING:
817 <        the_event->err_msg =
818 <          strdup( "Error in parsing meta-data file!\n\tsampleTime is not a double or int.\n" );
819 <        return 0;
820 <        break;
821 <        
822 <      case DOUBLE:
823 <        sample_time = the_event->evt.asmt.rhs.dval;
824 <        have_sample_time = 1;
825 <        return 1;
826 <        break;
827 <        
828 <      case INT:
829 <        sample_time = (double)the_event->evt.asmt.rhs.ival;
830 <        have_sample_time = 1;
831 <        return 1;
832 <        break;
833 <        
834 <      default:
835 <        the_event->err_msg =
836 <          strdup( "Error in parsing meta-data file!\n\tsampleTime unrecognized.\n" );
837 <        return 0;
838 <        break;
839 <      }
840 <      break;
841 <      
842 <    case G_STATUSTIME:
843 <      switch( the_type ){
844 <        
845 <      case STRING:
846 <        the_event->err_msg =
847 <          strdup( "Error in parsing meta-data file!\n\tstatusTime is not a double or int.\n" );
848 <        return 0;
849 <        break;
850 <        
851 <      case DOUBLE:
852 <        status_time = the_event->evt.asmt.rhs.dval;
853 <        have_status_time = 1;
854 <        return 1;
855 <        break;
856 <        
857 <      case INT:
858 <        status_time = (double)the_event->evt.asmt.rhs.ival;
859 <        have_status_time = 1;
860 <        return 1;
861 <        break;
862 <        
863 <      default:
864 <        the_event->err_msg =
865 <          strdup( "Error in parsing meta-data file!\n\tstatusTime unrecognized.\n" );
866 <        return 0;
867 <        break;
868 <      }
869 <      break;
323 >  std::string err("The following required keywords are missing:\n");
324 >  short int have_err = 0;
325  
326 <    case G_RESETTIME:
327 <      switch( the_type ){
328 <        
329 <      case STRING:
875 <        the_event->err_msg =
876 <          strdup( "Error in parsing meta-data file!\n\tresetTime is not a double or int.\n" );
877 <        return 0;
878 <        break;
879 <        
880 <      case DOUBLE:
881 <        resetTime = the_event->evt.asmt.rhs.dval;
882 <        have_reset_time = 1;
883 <        return 1;
884 <        break;
885 <        
886 <      case INT:
887 <        resetTime = (double)the_event->evt.asmt.rhs.ival;
888 <        have_reset_time = 1;
889 <        return 1;
890 <        break;
891 <        
892 <      default:
893 <        the_event->err_msg =
894 <          strdup( "Error in parsing meta-data file!\n\tresetTime unrecognized.\n" );
895 <        return 0;
896 <        break;
897 <      }
898 <      break;
899 <
900 <    case G_THERMALTIME:
901 <      switch( the_type ){
902 <        
903 <      case STRING:
904 <        the_event->err_msg =
905 <          strdup( "Error in parsing meta-data file!\n\tthermalTime is not a double or int.\n" );
906 <        return 0;
907 <        break;
908 <        
909 <      case DOUBLE:
910 <        thermal_time = the_event->evt.asmt.rhs.dval;
911 <        have_thermal_time = 1;
912 <        return 1;
913 <        break;
914 <        
915 <      case INT:
916 <        thermal_time = (double)the_event->evt.asmt.rhs.ival;
917 <        have_thermal_time = 1;
918 <        return 1;
919 <        break;
920 <        
921 <      default:
922 <        the_event->err_msg =
923 <          strdup( "Error in parsing meta-data file!\n\tthermalTime unrecognized.\n" );
924 <        return 0;
925 <        break;
926 <      }
927 <      break;
928 <      
929 <    case G_RCUT:
930 <      switch( the_type ){
931 <        
932 <      case STRING:
933 <        the_event->err_msg =
934 <          strdup( "Error in parsing meta-data file!\n\tcutoffRadius is not a double or int.\n" );
935 <        return 0;
936 <        break;
937 <        
938 <      case DOUBLE:
939 <        rcut = the_event->evt.asmt.rhs.dval;
940 <        have_rcut = 1;
941 <        return 1;
942 <        break;
943 <        
944 <      case INT:
945 <        rcut = (double)the_event->evt.asmt.rhs.ival;
946 <        have_rcut = 1;
947 <        return 1;
948 <        break;
949 <        
950 <      default:
951 <        the_event->err_msg =
952 <          strdup( "Error in parsing meta-data file!\n\tcutoffRadius unrecognized.\n" );
953 <        return 0;
954 <        break;
955 <      }
956 <      break;
957 <
958 <    case G_RSW:
959 <      switch( the_type ){
960 <        
961 <      case STRING:
962 <        the_event->err_msg =
963 <          strdup( "Error in parsing meta-data file!\n\tswitchingRadius is not a double or int.\n" );
964 <        return 0;
965 <        break;
966 <        
967 <      case DOUBLE:
968 <        rsw = the_event->evt.asmt.rhs.dval;
969 <        have_rsw = 1;
970 <        return 1;
971 <        break;
972 <        
973 <      case INT:
974 <        rsw = (double)the_event->evt.asmt.rhs.ival;
975 <        have_rsw = 1;
976 <        return 1;
977 <        break;
978 <        
979 <      default:
980 <        the_event->err_msg =
981 <          strdup( "Error in parsing meta-data file!\n\tswitchingRadius unrecognized.\n" );
982 <        return 0;
983 <        break;
984 <      }
985 <      break;
986 <      
987 <    case G_DIELECTRIC:
988 <      switch( the_type ){
989 <        
990 <      case STRING:
991 <        the_event->err_msg =
992 <          strdup( "Error in parsing meta-data file!\n\tdielectric is not a double or int.\n" );
993 <        return 0;
994 <        break;
995 <        
996 <      case DOUBLE:
997 <        dielectric = the_event->evt.asmt.rhs.dval;
998 <        have_dielectric = 1;
999 <        return 1;
1000 <        break;
1001 <        
1002 <      case INT:
1003 <        dielectric = (double)the_event->evt.asmt.rhs.ival;
1004 <        have_dielectric = 1;
1005 <        return 1;
1006 <        break;
1007 <        
1008 <      default:
1009 <        the_event->err_msg =
1010 <          strdup( "Error in parsing meta-data file!\n\tdielectric unrecognized.\n" );
1011 <        return 0;
1012 <        break;
1013 <      }
1014 <      break;
1015 <      
1016 <    case G_TEMPSET:
1017 <      if( the_type == STRING ){
1018 <        
1019 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) tempSet = 1;
1020 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) tempSet = 0;
1021 <        else{
1022 <          the_event->err_msg =
1023 <            strdup( "Error in parsing meta-data file!\n\ttempSet was not \"true\" or \"false\".\n" );
1024 <          return 0;
1025 <        }
1026 <        have_tempSet = 1;
1027 <        return 1;
1028 <      }
1029 <      
1030 <      the_event->err_msg =
1031 <        strdup( "Error in parsing meta-data file!\n\ttempSet was not \"true\" or \"false\".\n" );
1032 <      return 0;
1033 <      break;
1034 <
1035 <    case G_USEINITTIME:
1036 <      if( the_type == STRING ){
1037 <        
1038 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useInitTime = 1;
1039 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useInitTime = 0;
1040 <        else{
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 <        }
1045 <        return 1;
1046 <      }
1047 <      
1048 <      the_event->err_msg =
1049 <        strdup( "Error in parsing meta-data file!\n\tuseInitTime was not \"true\" or \"false\".\n" );
1050 <      return 0;
1051 <      break;
1052 <
1053 <    case G_USEINIT_XS_STATE:
1054 <      if( the_type == STRING ){
1055 <        
1056 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval ))
1057 <          useInitXSstate = 1;
1058 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval ))
1059 <          useInitXSstate = 0;
1060 <        else{
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 <        }
1065 <        return 1;
1066 <      }
1067 <      
1068 <      the_event->err_msg =
1069 <        strdup( "Error in parsing meta-data file!\n\tuseInitExtendedSystemState was not \"true\" or \"false\".\n" );
1070 <      return 0;
1071 <      break;
1072 <      
1073 <    case G_USEPBC:
1074 <      if( the_type == STRING ){
1075 <        
1076 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) usePBC = 1;
1077 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) usePBC = 0;
1078 <        else{
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 <        }
1083 <        return 1;
1084 <      }
1085 <      
1086 <      the_event->err_msg =
1087 <        strdup( "Error in parsing meta-data file!\n\tusePeriodicBoundaryConditions was not \"true\" or \"false\".\n" );
1088 <      return 0;
1089 <      break;
1090 <
1091 <    case G_USERF:
1092 <      if( the_type == STRING ){
1093 <        
1094 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useRF = 1;
1095 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useRF = 0;
1096 <        else{
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 <        }
1101 <        return 1;
1102 <      }
1103 <      
1104 <      the_event->err_msg =
1105 <        strdup( "Error in parsing meta-data file!\n\tuseReactionField was not \"true\" or \"false\".\n" );
1106 <      return 0;
1107 <      break;
1108 <
1109 <    case G_TARGETPRESSURE:
1110 <      switch( the_type ){
1111 <        
1112 <      case STRING:
1113 <        the_event->err_msg =
1114 <          strdup( "Error in parsing meta-data file!\n\ttargetPressure is not a double or int.\n" );
1115 <        return 0;
1116 <        break;
1117 <        
1118 <      case DOUBLE:
1119 <        target_pressure = the_event->evt.asmt.rhs.dval;
1120 <        have_target_pressure = 1;
1121 <        return 1;
1122 <        break;
1123 <        
1124 <      case INT:
1125 <        target_pressure = (double)the_event->evt.asmt.rhs.ival;
1126 <        have_target_pressure = 1;
1127 <        return 1;
1128 <        break;
1129 <        
1130 <      default:
1131 <        the_event->err_msg =
1132 <          strdup( "Error in parsing meta-data file!\n\ttargetPressure unrecognized.\n" );
1133 <        return 0;
1134 <        break;
1135 <      }
1136 <      break;
1137 <
1138 <    case G_TAUTHERMOSTAT:
1139 <      switch( the_type ){
1140 <        
1141 <      case STRING:
1142 <        the_event->err_msg =
1143 <          strdup( "Error in parsing meta-data file!\n\ttauThermostat is not a double or int.\n" );
1144 <        return 0;
1145 <        break;
1146 <        
1147 <      case DOUBLE:
1148 <        tau_thermostat = the_event->evt.asmt.rhs.dval;
1149 <        have_tau_thermostat = 1;
1150 <        return 1;
1151 <        break;
1152 <        
1153 <      case INT:
1154 <        tau_thermostat = (double)the_event->evt.asmt.rhs.ival;
1155 <        have_tau_thermostat = 1;
1156 <        return 1;
1157 <        break;
1158 <        
1159 <      default:
1160 <        the_event->err_msg =
1161 <          strdup( "Error in parsing meta-data file!\n\ttauThermostat unrecognized.\n" );
1162 <        return 0;
1163 <        break;
1164 <      }
1165 <      break;
1166 <
1167 <    case G_TAUBAROSTAT:
1168 <      switch( the_type ){
1169 <        
1170 <      case STRING:
1171 <        the_event->err_msg =
1172 <          strdup( "Error in parsing meta-data file!\n\ttauBarostat is not a double or int.\n" );
1173 <        return 0;
1174 <        break;
1175 <        
1176 <      case DOUBLE:
1177 <        tau_barostat = the_event->evt.asmt.rhs.dval;
1178 <        have_tau_barostat = 1;
1179 <        return 1;
1180 <        break;
1181 <        
1182 <      case INT:
1183 <        tau_barostat = (double)the_event->evt.asmt.rhs.ival;
1184 <        have_tau_barostat = 1;
1185 <        return 1;
1186 <        break;
1187 <        
1188 <      default:
1189 <        the_event->err_msg =
1190 <          strdup( "Error in parsing meta-data file!\n\ttauBarostat unrecognized.\n" );
1191 <        return 0;
1192 <        break;
1193 <      }
1194 <      break;
1195 <      
1196 <    case G_ZCONSTIME:
1197 <      switch( the_type ){
1198 <        
1199 <      case STRING:
1200 <        the_event->err_msg =
1201 <          strdup( "Error in parsing meta-data file!\n\tzcons_time is not a double or int.\n" );
1202 <        return 0;
1203 <        break;
1204 <        
1205 <      case DOUBLE:
1206 <        zcons_time = the_event->evt.asmt.rhs.dval;
1207 <        have_zcons_time = 1;
1208 <        return 1;
1209 <        break;
1210 <        
1211 <      case INT:
1212 <        zcons_time = (double)the_event->evt.asmt.rhs.ival;
1213 <        have_zcons_time = 1;
1214 <        return 1;
1215 <        break;
1216 <        
1217 <      default:
1218 <        the_event->err_msg =
1219 <          strdup( "Error in parsing meta-data file!\n\tzcons_time unrecognized.\n" );
1220 <        return 0;
1221 <        break;
1222 <      }
1223 <      break;
1224 <
1225 <    case G_ZCONSTOL:
1226 <      switch( the_type ){
1227 <        
1228 <      case STRING:
1229 <        the_event->err_msg =
1230 <          strdup( "Error in parsing meta-data file!\n\tzcons_tol is not a double or int.\n" );
1231 <        return 0;
1232 <        break;
1233 <        
1234 <      case DOUBLE:
1235 <        zcons_tol = the_event->evt.asmt.rhs.dval;
1236 <        have_zcons_tol = 1;
1237 <        return 1;
1238 <        break;
1239 <        
1240 <      case INT:
1241 <        zcons_tol = (double)the_event->evt.asmt.rhs.ival;
1242 <        have_zcons_tol = 1;
1243 <        return 1;
1244 <        break;
1245 <        
1246 <      default:
1247 <        the_event->err_msg =
1248 <          strdup( "Error in parsing meta-data file!\n\tzcons_ol unrecognized.\n" );
1249 <        return 0;
1250 <        break;
1251 <      }
1252 <      break;
1253 <  
1254 <    case G_ZCONSFORCEPOLICY:
1255 <      switch( the_type ){
1256 <        
1257 <      case STRING:
1258 <        strcpy(zconsForcePolicy, the_event->evt.asmt.rhs.sval);
1259 <
1260 <        for(int i = 0; zconsForcePolicy[i] != '\0'; i++)
1261 <          {
1262 <            zconsForcePolicy[i] = toupper(zconsForcePolicy[i]);
1263 <          }
1264 <        have_zcons_force_policy = 1;
1265 <        return 1;
1266 <        break;
1267 <        
1268 <      case DOUBLE:
1269 <        the_event->err_msg =
1270 <          strdup( "Error in parsing meta-data file!\n\tzconsForcePolicy is not a double or int.\n" );
1271 <        return 0;
1272 <        break;
1273 <        
1274 <      case INT:
1275 <        the_event->err_msg =
1276 <          strdup( "Error in parsing meta-data file!\n\tzconsForcePolicy is not a double or int.\n" );
1277 <        return 0;
1278 <        break;
1279 <        
1280 <      default:
1281 <        the_event->err_msg =
1282 <          strdup( "Error in parsing meta-data file!\n\tzconsForcePolicy unrecognized.\n" );
1283 <        return 0;
1284 <        break;
1285 <      }
1286 <      break;
1287 <      
1288 <    case G_ZCONSGAP:
1289 <      switch( the_type ){
1290 <  
1291 <      case STRING:
1292 <        the_event->err_msg =
1293 <          strdup( "Error in parsing meta-data file!\n\tzcons_gap is not a double or int.\n" );
1294 <        return 0;
1295 <        break;
1296 <  
1297 <      case DOUBLE:
1298 <        zcons_gap = the_event->evt.asmt.rhs.dval;
1299 <        have_zcons_gap= 1;
1300 <        return 1;
1301 <        break;
1302 <  
1303 <      case INT:
1304 <        zcons_gap= (double)the_event->evt.asmt.rhs.ival;
1305 <        have_zcons_gap= 1;
1306 <        return 1;
1307 <        break;
1308 <  
1309 <      default:
1310 <        the_event->err_msg =
1311 <          strdup( "Error in parsing meta-data file!\n\tzcons_gap unrecognized.\n" );
1312 <        return 0;
1313 <        break;
1314 <      }
1315 <      break;
1316 <
1317 <    case G_ZCONSFIXTIME:
1318 <      switch( the_type ){
1319 <  
1320 <      case STRING:
1321 <        the_event->err_msg =
1322 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime is not a double or int.\n" );
1323 <        return 0;
1324 <        break;
1325 <  
1326 <      case DOUBLE:
1327 <        zcons_fixtime= the_event->evt.asmt.rhs.dval;
1328 <        have_zcons_fixtime= 1;
1329 <        return 1;
1330 <        break;
1331 <  
1332 <      case INT:
1333 <        zcons_fixtime= (double)the_event->evt.asmt.rhs.ival;
1334 <        have_zcons_fixtime= 1;
1335 <        return 1;
1336 <        break;
1337 <  
1338 <      default:
1339 <        the_event->err_msg =
1340 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime unrecognized.\n" );
1341 <        return 0;
1342 <        break;
1343 <      }
1344 <      break;
1345 <
1346 <    case G_ZCONSUSINGSMD:
1347 <      switch( the_type ){
1348 <  
1349 <      case STRING:
1350 <        the_event->err_msg =
1351 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime is not an  int.\n" );
1352 <        return 0;
1353 <        break;
1354 <  
1355 <      case DOUBLE:
1356 <        the_event->err_msg =
1357 <          strdup( "Error in parsing meta-data file!\n\tzcons_fixtime is not an  int.\n" );
1358 <        return 0;
1359 <        break;
1360 <  
1361 <      case INT:
1362 <        zcons_using_smd= the_event->evt.asmt.rhs.ival;
1363 <        have_zcons_using_smd= 1;
1364 <        return 1;
1365 <        break;
1366 <  
1367 <      default:
1368 <        the_event->err_msg =
1369 <          strdup( "Error in parsing meta-data file!\n\tzcons_usingsmd unrecognized.\n" );
1370 <        return 0;
1371 <        break;
1372 <      }
1373 <      break;
1374 <      
1375 <    case G_MINIMIZER:
1376 <      switch( the_type ){
1377 <
1378 <      case STRING:
1379 <        strcpy(minimizer_name, the_event->evt.asmt.rhs.sval);
1380 <
1381 <        for(int i = 0; zconsForcePolicy[i] != '\0'; i++){
1382 <          zconsForcePolicy[i] = toupper(zconsForcePolicy[i]);
1383 <        }
1384 <        have_minimizer= 1;
1385 <        return 1;
1386 <        break;
1387 <        
1388 <      case DOUBLE:
1389 <        the_event->err_msg =
1390 <          strdup( "Error in parsing meta-data file!\n\tminimizer_name is not a double or int.\n" );
1391 <        return 0;
1392 <        break;
1393 <        
1394 <      case INT:
1395 <        the_event->err_msg =
1396 <          strdup( "Error in parsing meta-data file!\n\tminimizer_name is not a double or int.\n" );
1397 <        return 0;
1398 <        break;
1399 <        
1400 <      default:
1401 <        the_event->err_msg =
1402 <          strdup( "Error in parsing meta-data file!\n\tminimizer_name unrecognized.\n" );
1403 <        return 0;
1404 <        break;
1405 <      }
1406 <      break;
1407 <
1408 <    case G_MIN_MAXITER:
1409 <      switch( the_type ){
1410 <
1411 <      case STRING:
1412 <        the_event->err_msg =
1413 <          strdup( "Error in parsing meta-data file!\n\tminimizer_maxiteration is not a double or int.\n" );
1414 <        return 1;
1415 <        break;
1416 <        
1417 <      case DOUBLE:
1418 <        minimizer_maxiteration = (int)the_event->evt.asmt.rhs.dval;
1419 <        have_minimizer_maxiteration = 1;
1420 <        return 1;
1421 <        break;
1422 <        
1423 <      case INT:
1424 <        minimizer_maxiteration = the_event->evt.asmt.rhs.ival;
1425 <        have_minimizer_maxiteration = 1;
1426 <        return 1;
1427 <        break;
1428 <        
1429 <      default:
1430 <        the_event->err_msg =
1431 <          strdup( "Error in parsing meta-data file!\n\tminimizer_maxiteration unrecognized.\n" );
1432 <        return 0;
1433 <        break;
1434 <      }
1435 <      break;
1436 <      
1437 <    case G_MIN_WRITEFRQ:
1438 <      switch( the_type ){
1439 <
1440 <      case STRING:
1441 <        the_event->err_msg =
1442 <          strdup( "Error in parsing meta-data file!\n\tminimizer_writefrq is not an int.\n" );
1443 <        return 1;
1444 <        break;
1445 <        
1446 <      case DOUBLE:
1447 <        the_event->err_msg =
1448 <          strdup( "Error in parsing meta-data file!\n\tminimizer_writefrq is not an  int.\n" );
1449 <        return 1;
1450 <        break;
1451 <        
1452 <      case INT:
1453 <        minimizer_writefrq= the_event->evt.asmt.rhs.ival;
1454 <        have_minimizer_writefrq = 1;
1455 <        return 1;
1456 <        break;
1457 <        
1458 <      default:
1459 <        the_event->err_msg =
1460 <          strdup( "Error in parsing meta-data file!\n\tminimizer_writefrq unrecognized.\n" );
1461 <        return 0;
1462 <        break;
1463 <      }
1464 <      break;
1465 <
1466 <    case G_MIN_STEPSIZE:
1467 <      switch( the_type ){
1468 <
1469 <      case STRING:
1470 <        the_event->err_msg =
1471 <          strdup( "Error in parsing meta-data file!\n\tminimizer_resetfrq is not a double or int.\n" );
1472 <        return 1;
1473 <        break;
1474 <        
1475 <      case DOUBLE:
1476 <        minimizer_stepsize= the_event->evt.asmt.rhs.dval;
1477 <        have_minimizer_stepsize = 1;
1478 <        return 1;
1479 <        break;
1480 <        
1481 <      case INT:
1482 <        minimizer_stepsize= the_event->evt.asmt.rhs.ival;
1483 <        have_minimizer_stepsize = 1;
1484 <        return 1;
1485 <        break;
1486 <        
1487 <      default:
1488 <        the_event->err_msg =
1489 <          strdup( "Error in parsing meta-data file!\n\tminimizer_resetfrq unrecognized.\n" );
1490 <        return 0;
1491 <        break;
1492 <      }
1493 <      break;      
1494 <
1495 <    case G_MIN_FTOL:
1496 <      switch( the_type ){
1497 <
1498 <      case STRING:
1499 <        the_event->err_msg =
1500 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ftol is not a double or int.\n" );
1501 <        return 1;
1502 <        break;
1503 <        
1504 <      case DOUBLE:
1505 <        minimizer_ftol= the_event->evt.asmt.rhs.dval;
1506 <        have_minimizer_ftol = 1;
1507 <        return 1;
1508 <        break;
1509 <        
1510 <      case INT:
1511 <        minimizer_ftol= the_event->evt.asmt.rhs.ival;
1512 <        have_minimizer_ftol = 1;
1513 <        return 1;
1514 <        break;
1515 <        
1516 <      default:
1517 <        the_event->err_msg =
1518 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ftol unrecognized.\n" );
1519 <        return 0;
1520 <        break;
1521 <      }
1522 <      break;
1523 <      
1524 <    case G_MIN_GTOL:
1525 <      switch( the_type ){
1526 <
1527 <      case STRING:
1528 <        the_event->err_msg =
1529 <          strdup( "Error in parsing meta-data file!\n\tminimizer_gtol is not a double or int.\n" );
1530 <        return 1;
1531 <        break;
1532 <        
1533 <      case DOUBLE:
1534 <        minimizer_gtol= the_event->evt.asmt.rhs.dval;
1535 <        have_minimizer_gtol = 1;
1536 <        return 1;
1537 <        break;
1538 <        
1539 <      case INT:
1540 <        minimizer_gtol= the_event->evt.asmt.rhs.ival;
1541 <        have_minimizer_gtol = 1;
1542 <        return 1;
1543 <        break;
1544 <        
1545 <      default:
1546 <        the_event->err_msg =
1547 <          strdup( "Error in parsing meta-data file!\n\tminimizer_gtol unrecognized.\n" );
1548 <        return 0;
1549 <        break;
1550 <      }
1551 <      break;
1552 <      
1553 <    case G_MIN_LSMAXITER:
1554 <      switch( the_type ){
1555 <
1556 <      case STRING:
1557 <        the_event->err_msg =
1558 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_maxiteration is not an int.\n" );
1559 <        return 1;
1560 <        break;
1561 <        
1562 <      case DOUBLE:
1563 <        the_event->err_msg =
1564 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_maxiteration is not an int.\n" );
1565 <        return 1;
1566 <        break;
1567 <        
1568 <      case INT:
1569 <        minimizer_ls_maxiteration = the_event->evt.asmt.rhs.ival;
1570 <        have_minimizer_ls_maxiteration = 1;
1571 <        return 1;
1572 <        break;
1573 <        
1574 <      default:
1575 <        the_event->err_msg =
1576 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_maxiteration unrecognized.\n" );
1577 <        return 0;
1578 <        break;
1579 <      }
1580 <      break;      
1581 <
1582 <    case G_MIN_LSTOL:
1583 <      switch( the_type ){
1584 <
1585 <      case STRING:
1586 <        the_event->err_msg =
1587 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_tol is not a double or int.\n" );
1588 <        return 1;
1589 <        break;
1590 <        
1591 <      case DOUBLE:
1592 <        minimizer_ls_tol= the_event->evt.asmt.rhs.dval;
1593 <        have_minimizer_ls_tol = 1;
1594 <        return 1;
1595 <        break;
1596 <        
1597 <      case INT:
1598 <        minimizer_ls_tol= the_event->evt.asmt.rhs.ival;
1599 <        have_minimizer_ls_tol = 1;
1600 <        return 1;
1601 <        break;
1602 <        
1603 <      default:
1604 <        the_event->err_msg =
1605 <          strdup( "Error in parsing meta-data file!\n\tminimizer_ls_tol unrecognized.\n" );
1606 <        return 0;
1607 <        break;
1608 <      }
1609 <      break;
1610 <      
1611 <      // add more token cases here.
1612 <    case G_SEED:
1613 <      switch( the_type ){
1614 <        
1615 <      case STRING:
1616 <        the_event->err_msg =
1617 <          strdup( "Error in parsing meta-data file!\n\tseed is not a string.\n" );
1618 <        return 0;
1619 <        return 0;
1620 <        break;
1621 <        
1622 <      case DOUBLE:
1623 <        have_seed = 1;
1624 <        seed = (int)the_event->evt.asmt.rhs.dval;
1625 <        return 1;
1626 <        break;
1627 <        
1628 <      case INT:
1629 <        have_seed = 1;
1630 <        seed =  the_event->evt.asmt.rhs.ival ;
1631 <        return 1;
1632 <        break;
1633 <        
1634 <      default:
1635 <        the_event->err_msg =
1636 <          strdup( "Error in parsing meta-data file!\n\tseed unrecognized.\n" );
1637 <        return 0;
1638 <        break;
1639 <      }
1640 <      break;
1641 <
1642 <    case G_USE_SOLID_THERM_INT:
1643 <      if( the_type == STRING ){
1644 <        
1645 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useSolidThermInt = 1;
1646 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useSolidThermInt = 0;
1647 <        else{
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 <        }
1652 <        return 1;
1653 <      }
1654 <      
1655 <      the_event->err_msg =
1656 <        strdup( "Error in parsing meta-data file!\n\tuseSolidThermInt was not \"true\" or \"false\".\n" );
1657 <      return 0;
1658 <      break;
1659 <
1660 <    case G_USE_LIQUID_THERM_INT:
1661 <      if( the_type == STRING ){
1662 <        
1663 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useLiquidThermInt = 1;
1664 <        else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useLiquidThermInt = 0;
1665 <        else{
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 <        }
1670 <        return 1;
1671 <      }
1672 <      
1673 <      the_event->err_msg =
1674 <        strdup( "Error in parsing meta-data file!\n\tuseLiquidThermInt was not \"true\" or \"false\".\n" );
1675 <      return 0;
1676 <      break;
1677 <
1678 <    case G_THERM_INT_LAMBDA:
1679 <      switch( the_type ){
1680 <        
1681 <      case STRING:
1682 <        the_event->err_msg =
1683 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationLambda is not a double or int.\n" );
1684 <        return 1;
1685 <        break;
1686 <        
1687 <      case DOUBLE:
1688 <        thermodynamic_integration_lambda = the_event->evt.asmt.rhs.dval;
1689 <        have_thermodynamic_integration_lambda = 1;
1690 <        return 1;
1691 <        break;
1692 <        
1693 <      case INT:
1694 <        thermodynamic_integration_lambda = (double)the_event->evt.asmt.rhs.dval;
1695 <        have_thermodynamic_integration_lambda = 1;
1696 <        return 1;
1697 <        break;
1698 <        
1699 <      default:
1700 <        the_event->err_msg =
1701 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationLambda unrecognized.\n" );
1702 <        return 0;
1703 <        break;
1704 <      }
1705 <      break;      
1706 <
1707 <    case G_THERM_INT_K:
1708 <      switch( the_type ){
1709 <        
1710 <      case STRING:
1711 <        the_event->err_msg =
1712 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationK is not a double or int.\n" );
1713 <        return 1;
1714 <        break;
1715 <        
1716 <      case DOUBLE:
1717 <        thermodynamic_integration_k = the_event->evt.asmt.rhs.dval;
1718 <        have_thermodynamic_integration_k = 1;
1719 <        return 1;
1720 <        break;
1721 <        
1722 <      case INT:
1723 <        thermodynamic_integration_k = (double)the_event->evt.asmt.rhs.dval;
1724 <        have_thermodynamic_integration_k = 1;
1725 <        return 1;
1726 <        break;
1727 <        
1728 <      default:
1729 <        the_event->err_msg =
1730 <          strdup( "Error in parsing meta-data file!\n\tthermodynamicIntegrationK unrecognized.\n" );
1731 <        return 0;
1732 <        break;
1733 <      }
1734 <      break;  
1735 <  
1736 <    case G_FORCEFIELD_VARIANT:
1737 <      if( the_type == STRING ){
1738 <        strcpy( forcefield_variant, the_event->evt.asmt.rhs.sval );
1739 <        have_forcefield_variant = 1;
1740 <        return 1;
1741 <      }
1742 <      
1743 <      the_event->err_msg =
1744 <        strdup( "Error in parsing meta-data file!\n\tforceFieldVariant was not a string assignment.\n" );
1745 <      return 0;
1746 <      break;      
1747 <      // add more token cases here.      
1748 <
1749 <    case G_FORCEFIELD_FILENAME:
1750 <      if( the_type == STRING ){
1751 <        strcpy( forcefield_filename, the_event->evt.asmt.rhs.sval );
1752 <        have_forcefield_filename = 1;
1753 <        return 1;
1754 <      }
1755 <      
1756 <      the_event->err_msg =
1757 <        strdup( "Error in parsing meta-data file!\n\tforceFieldFileName was not a string assignment.\n" );
1758 <      return 0;
1759 <      break;      
1760 <
1761 <    case G_THERM_INT_DIST_SPRING:
1762 <      switch( the_type ){
1763 <        
1764 <      case STRING:
1765 <        the_event->err_msg =
1766 <          strdup( "Error in parsing meta-data file!\n\tthermIntDistSpringConst is not a double or int.\n" );
1767 <        return 1;
1768 <        break;
1769 <        
1770 <      case DOUBLE:
1771 <        therm_int_dist_spring = the_event->evt.asmt.rhs.dval;
1772 <        have_dist_spring_constant = 1;
1773 <        return 1;
1774 <        break;
1775 <        
1776 <      case INT:
1777 <        therm_int_dist_spring = (double)the_event->evt.asmt.rhs.dval;
1778 <        have_dist_spring_constant = 1;
1779 <        return 1;
1780 <        break;
1781 <        
1782 <      default:
1783 <        the_event->err_msg =
1784 <          strdup( "Error in parsing meta-data file!\n\tthermIntDistSpringConst unrecognized.\n" );
1785 <        return 0;
1786 <        break;
1787 <      }
1788 <      break;  
1789 <
1790 <    case G_THERM_INT_THETA_SPRING:
1791 <      switch( the_type ){
1792 <        
1793 <      case STRING:
1794 <        the_event->err_msg =
1795 <          strdup( "Error in parsing meta-data file!\n\tthermIntThetaSpringConst is not a double or int.\n" );
1796 <        return 1;
1797 <        break;
1798 <        
1799 <      case DOUBLE:
1800 <        therm_int_theta_spring = the_event->evt.asmt.rhs.dval;
1801 <        have_theta_spring_constant = 1;
1802 <        return 1;
1803 <        break;
1804 <        
1805 <      case INT:
1806 <        therm_int_theta_spring = (double)the_event->evt.asmt.rhs.dval;
1807 <        have_theta_spring_constant = 1;
1808 <        return 1;
1809 <        break;
1810 <        
1811 <      default:
1812 <        the_event->err_msg =
1813 <          strdup( "Error in parsing meta-data file!\n\tthermIntThetaSpringConst unrecognized.\n" );
1814 <        return 0;
1815 <        break;
1816 <      }
1817 <      break;
1818 <
1819 <    case G_THERM_INT_OMEGA_SPRING:
1820 <      switch( the_type ){
1821 <        
1822 <      case STRING:
1823 <        the_event->err_msg =
1824 <          strdup( "Error in parsing meta-data file!\n\tthermIntOmegaSpringConst is not a double or int.\n" );
1825 <        return 1;
1826 <        break;
1827 <        
1828 <      case DOUBLE:
1829 <        therm_int_omega_spring = the_event->evt.asmt.rhs.dval;
1830 <        have_omega_spring_constant = 1;
1831 <        return 1;
1832 <        break;
1833 <        
1834 <      case INT:
1835 <        therm_int_omega_spring = (double)the_event->evt.asmt.rhs.dval;
1836 <        have_omega_spring_constant = 1;
1837 <        return 1;
1838 <        break;
1839 <        
1840 <      default:
1841 <        the_event->err_msg =
1842 <          strdup( "Error in parsing meta-data file!\n\tthermIntOmegaSpringConst unrecognized.\n" );
1843 <        return 0;
1844 <        break;
1845 <      }
1846 <      break;  
1847 <
1848 <    case G_SURFACETENSION:
1849 <        switch( the_type ){
1850 <      
1851 <        case STRING:
1852 <          the_event->err_msg =
1853 <            strdup( "Error in parsing meta-data file!\n\tsurfaceTension is not a double or int.\n" );
1854 <          return 1;
1855 <          break;
1856 <          
1857 <        case DOUBLE:
1858 <          surface_tension= the_event->evt.asmt.rhs.dval;
1859 <          have_surface_tension = 1;
1860 <          return 1;
1861 <          break;
1862 <          
1863 <        case INT:
1864 <          surface_tension = (double)the_event->evt.asmt.rhs.dval;
1865 <          have_surface_tension = 1;
1866 <          return 1;
1867 <          break;
1868 <          
1869 <        default:
1870 <          the_event->err_msg =
1871 <            strdup( "Error in parsing meta-data file!\n\tsurfaceTension unrecognized.\n" );
1872 <          return 0;
1873 <          break;
1874 <        }
1875 <        break;
1876 <
1877 <    case G_PRINTPREESURETENSOR:
1878 <          if( the_type == STRING ){
1879 <        
1880 <        if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) {
1881 <            have_print_pressure_tensor= 1;
1882 <            print_pressure_tensor = 1;
1883 <        } else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) {
1884 <            have_print_pressure_tensor= 1;
1885 <            print_pressure_tensor = 0;
1886 <        } else{
1887 <          the_event->err_msg =
1888 <            strdup( "Error in parsing meta-data file!\n\tprintPressureTensor was not \"true\" or \"false\".\n" );
1889 <          return 0;
1890 <        }
1891 <        return 1;
1892 <          }
1893 <          
1894 <          the_event->err_msg =
1895 <        strdup( "Error in parsing meta-data file!\n\tprintPressureTensor was not \"true\" or \"false\".\n" );
1896 <          return 0;
1897 <          break;
1898 <
1899 <        
1900 <
1901 <      
1902 <      // 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    }
1905  
1906  switch( the_type ){
1907    
1908  case STRING:
1909    sprintf( err,
1910             "\tUnrecognized assignment:\n"
1911             "\t\t-> %s = %s\n",
1912             lhs, the_event->evt.asmt.rhs.sval );
1913    break;
1914    
1915  case DOUBLE:
1916    sprintf( err,
1917             "\tUnrecognized assignment:\n"
1918             "\t\t-> %s = %lf\n",
1919             lhs, the_event->evt.asmt.rhs.dval );
1920    break;
1921    
1922  case INT:
1923    sprintf( err,
1924             "\tUnrecognized assignment:\n"
1925             "\t\t-> %s = %d\n",
1926             lhs, the_event->evt.asmt.rhs.ival );
1927    break;
1928    
1929  default:
1930    sprintf( err,
1931             "\tUnrecognized assignment:\n"
1932             "\t\t-> %s = ?\n",
1933             lhs );
1934    break;
1935  }
1936  
1937  the_event->err_msg = strdup( err );
1938  return 0;
1939 }
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;
1951 <  }
1952 <
1953 <  if( !have_n_components ){
1954 <    strcat( err, "\t\t->nComponents\n" );
1955 <    have_err= 1;
1956 <  }
1957 <
394 >  //@todo memory leak
395 >  if( have_err )
396 >    return strdup( err.c_str() );
397    
1959  if ( !have_ensemble ) {
1960    // I'm not doing MD:
1961    if ( !have_minimizer ) {
1962      // I'm not doing MD or minimization:
1963      strcat( err, "\t\t->either ensemble or minimizer must be set!\n" );
1964      have_err = 1;      
1965    } else {
1966      // I'm a minimizer:
1967    }
1968  } else {
1969    // I *am* doing MD:
1970    if( !have_dt ){
1971      strcat( err, "\t\t->dt (timestep in fs)\n" );
1972      have_err= 1;
1973    }
1974    if( !have_run_time ){
1975      strcat( err, "\t\t->runTime (total run time in fs)\n" );
1976      have_err= 1;
1977    }    
1978  }
1979      
1980  if( have_err ) return strdup( err );
1981  
398    return NULL;
399 +
400 +
401   }
402  
403   int Globals::globalEnd( event* the_event ){
# Line 1989 | Line 407 | int Globals::globalEnd( event* the_event ){
407  
408    return 1;
409   }
1992

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines