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 1490 by gezelter, Fri Sep 24 04:16:43 2004 UTC vs.
Revision 2372 by tim, Mon Oct 17 00:51:16 2005 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines