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

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines