ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/io/Globals.cpp
(Generate patch)

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines