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

Comparing trunk/OOPSE-3.0/src/io/Globals.cpp (file contents):
Revision 2328 by chuckv, Mon Sep 26 15:58:17 2005 UTC vs.
Revision 2464 by gezelter, Mon Nov 21 22:59:36 2005 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines