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

Comparing trunk/OOPSE-2.0/src/io/Globals.cpp (file contents):
Revision 2297 by chrisfen, Thu Sep 15 00:14:35 2005 UTC vs.
Revision 2373 by tim, Mon Oct 17 03:06:29 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_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
124 <
125 < Globals::Globals(){
126 <  initalize();
127 < }
128 <
129 < 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 <  
140 <  components = NULL;
141 <  
142 <  command_table.insert(CommandMapType::value_type("forceField", G_FORCEFIELD));
143 <  command_table.insert(CommandMapType::value_type("nComponents", G_NCOMPONENTS));
144 <  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));
203 <
204 <  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
213 <
214 <  have_force_field =  0;
215 <  have_n_components = 0;
216 <  have_target_temp =  0;
217 <  have_ensemble =     0;
218 <  have_dt =           0;
219 <  have_run_time =     0;
220 <  
221 <  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;
270 < }
271 <
272 < int Globals::newComponent( event* the_event ){
273 <  
274 <  current_component = new Component;
275 <  int index = the_event->evt.blk_index;
276 <  char err[200];
277 <  
278 <  if( have_n_components && index < n_components )
279 <    components[index] = current_component;
280 <  else{
281 <    if( have_n_components ){
282 <      sprintf( err, "meta-data parsing error: %d out of nComponents range",
283 <               index );
284 <      the_event->err_msg = strdup( err );
285 <      return 0;
286 <    }
287 <    else{
288 <      the_event->err_msg = strdup("meta-data parsing error: nComponents not given before"
289 <                                  " first component declaration." );
290 <      return 0;
291 <    }
292 <  }  
293 <
294 <  return 1;
295 < }
296 <
297 <
298 <
299 < int Globals::componentAssign( event* the_event ){
300 <
301 <  switch( the_event->evt.asmt.asmt_type ){
302 <    
303 <  case STRING:
304 <    return current_component->assignString( the_event->evt.asmt.lhs,
305 <                                            the_event->evt.asmt.rhs.sval,
306 <                                            &(the_event->err_msg));
307 <    break;
308 <    
309 <  case DOUBLE:
310 <    return current_component->assignDouble( the_event->evt.asmt.lhs,
311 <                                            the_event->evt.asmt.rhs.dval,
312 <                                            &(the_event->err_msg));
313 <    break;
314 <    
315 <  case INT:
316 <    return current_component->assignInt( the_event->evt.asmt.lhs,
317 <                                         the_event->evt.asmt.rhs.ival,
318 <                                         &(the_event->err_msg));
319 <    break;
320 <    
321 <  default:
322 <    the_event->err_msg = strdup( "Globals error. Invalid component"
323 <                                 " assignment type" );
324 <    return 0;
325 <    break;
326 <  }
327 <  return 0;
328 < }
329 <
330 < int Globals::componentEnd( event* the_event ){
331 <
332 <  the_event->err_msg = current_component->checkMe();
333 <  if( the_event->err_msg != NULL ) return 0;
334 <
335 <  return 1;
336 < }
337 <
338 < int Globals::newZconstraint( event* the_event ){
339 <  
340 <
341 <  int index = the_event->evt.blk_index;
342 <  char err[200];
343 <  current_zConstraint = new ZconStamp( index );
344 <  
345 <  have_zConstraints = 1;
346 <
347 <  if( have_n_zConstraints && index < n_zConstraints )
348 <    zConstraints[index] = current_zConstraint;
349 <  else{
350 <    if( have_n_zConstraints ){
351 <      sprintf( err, "meta-data parsing error: %d out of nZconstraints range",
352 <               index );
353 <      the_event->err_msg = strdup( err );
354 <      return 0;
355 <    }
356 <    else{
357 <      the_event->err_msg = strdup("meta-data parsing error: nZconstraints"
358 <                                  " not given before"
359 <                                  " first zConstraint declaration." );
360 <      return 0;
361 <    }
362 <  }  
363 <
364 <  return 1;
365 < }
366 <
367 <
368 <
369 < int Globals::zConstraintAssign( event* the_event ){
370 <
371 <  switch( the_event->evt.asmt.asmt_type ){
372 <    
373 <  case STRING:
374 <    return current_zConstraint->assignString( the_event->evt.asmt.lhs,
375 <                                              the_event->evt.asmt.rhs.sval,
376 <                                              &(the_event->err_msg));
377 <    break;
378 <    
379 <  case DOUBLE:
380 <    return current_zConstraint->assignDouble( the_event->evt.asmt.lhs,
381 <                                              the_event->evt.asmt.rhs.dval,
382 <                                              &(the_event->err_msg));
383 <    break;
384 <    
385 <  case INT:
386 <    return current_zConstraint->assignInt( the_event->evt.asmt.lhs,
387 <                                           the_event->evt.asmt.rhs.ival,
388 <                                           &(the_event->err_msg));
389 <    break;
390 <    
391 <  default:
392 <    the_event->err_msg = strdup( "Globals error. Invalid zConstraint"
393 <                                 " assignment type" );
394 <    return 0;
395 <    break;
396 <  }
397 <  return 0;
398 < }
399 <
400 < int Globals::zConstraintEnd( event* the_event ){
401 <
402 <  the_event->err_msg = current_zConstraint->checkMe();
403 <  if( the_event->err_msg != NULL ) return 0;
404 <
405 <  return 1;
406 < }
407 <
408 < 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;
462 <
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;
513 <
514 <    case G_ORTHOBOXTOLERANCE:
515 <      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;
879 <
880 <    case G_RESETTIME:
881 <      switch( the_type ){
882 <        
883 <      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.      
2007 <    }
2008 <  }
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 < }
2044 <
2045 < char* Globals::checkMe( void ){
2046 <  
2047 <  char err[300];
2048 <  short int have_err = 0;
2049 <
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 <  }
2056 <
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;
2087 < }
2088 <
2089 < int Globals::globalEnd( event* the_event ){
2090 <  
2091 <  the_event->err_msg = checkMe();
2092 <  if( the_event->err_msg != NULL ) return 0;
2093 <
2094 <  return 1;
2095 < }
2096 <
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 > #define DefineParameter(NAME,KEYWORD)                              \
56 >  NAME.setKeyword(KEYWORD);                  \
57 >  parameters_.insert(std::make_pair(std::string(KEYWORD),  &NAME));
58 >
59 > #define DefineOptionalParameter(NAME,KEYWORD)                              \
60 >  NAME.setKeyword(KEYWORD); NAME.setOptional(true);                    \
61 >  parameters_.insert(std::make_pair(std::string(KEYWORD),  &NAME));
62 >
63 > #define DefineOptionalParameterWithDefaultValue(NAME,KEYWORD, DEFAULTVALUE)                              \
64 >  NAME.setKeyword(KEYWORD); NAME.setOptional(true); NAME.setDefaultValue(DEFAULTVALUE);                      \
65 >  parameters_.insert(std::make_pair(std::string(KEYWORD),  &NAME));
66 >
67 > #define CheckParameter(NAME, CONSTRAINT)                              \
68 >  if (!NAME.empty()) { if (!(CONSTRAINT)(NAME.getData())) { sprintf(painCave.errMsg,"Error in checking %s : should be %s\n",NAME.getKeyword().c_str(),(CONSTRAINT).getConstraintDescription().c_str()); painCave.isFatal = 1; painCave.severity = OOPSE_ERROR; simError();} }                
69 >
70 > Globals::Globals(){
71 >
72 >  DefineParameter(ForceField, "forceField")
73 >  DefineParameter(NComponents, "nComponents")
74 >
75 >  DefineOptionalParameter(TargetTemp, "targetTemp");
76 >  DefineOptionalParameter(Ensemble, "ensemble");
77 >  DefineOptionalParameter(Dt, "dt");
78 >  DefineOptionalParameter(RunTime, "runTime");
79 >  DefineOptionalParameter(InitialConfig, "initialConfig");
80 >  DefineOptionalParameter(FinalConfig, "finalConfig");
81 >  DefineOptionalParameter(NMol, "nMol");
82 >  DefineOptionalParameter(Density, "density");
83 >  DefineOptionalParameter(Box, "box");
84 >  DefineOptionalParameter(BoxX, "boxX");
85 >  DefineOptionalParameter(BoxY, "boxY");
86 >  DefineOptionalParameter(BoxZ, "boxZ");
87 >  DefineOptionalParameter(SampleTime, "sampleTime");
88 >  DefineOptionalParameter(ResetTime, "resetTime");
89 >  DefineOptionalParameter(StatusTime, "statusTime");
90 >  DefineOptionalParameter(CutoffRadius, "cutoffRadius");
91 >  DefineOptionalParameter(SwitchingRadius, "switchingRadius");
92 >  DefineOptionalParameter(Dielectric, "dielectric");
93 >  DefineOptionalParameter(TempSet, "tempSet");
94 >  DefineOptionalParameter(ThermalTime, "thermalTime");
95 >  DefineOptionalParameter(TargetPressure, "targetPressure");
96 >  DefineOptionalParameter(TauThermostat, "tauThermostat");
97 >  DefineOptionalParameter(TauBarostat, "tauBarostat");
98 >  DefineOptionalParameter(ZconsTime, "zconsTime");
99 >  DefineOptionalParameter(NZconstraints, "nZconstraints");  
100 >  DefineOptionalParameter(ZconsTol, "zconsTol");
101 >  DefineOptionalParameter(ZconsForcePolicy, "zconsForcePolicy");
102 >  DefineOptionalParameter(Seed, "seed");
103 >  DefineOptionalParameter(Minimizer, "minimizer");
104 >  DefineOptionalParameter(MinimizerMaxIter,"minimizerMaxIter");
105 >  DefineOptionalParameter(MinimizerWriteFrq, "minimizerWriteFrq");
106 >  DefineOptionalParameter(MinimizerStepSize, "minimizerStepSize");
107 >  DefineOptionalParameter(MinimizerFTol, "minimizerFTol");
108 >  DefineOptionalParameter(MinimizerGTol, "minimizerGTol");
109 >  DefineOptionalParameter(MinimizerLSTol, "minimizerLSTol");
110 >  DefineOptionalParameter(MinimizerLSMaxIter, "minimizerLSMaxIter");
111 >  DefineOptionalParameter(ZconsGap, "zconsGap");
112 >  DefineOptionalParameter(ZconsFixtime, "zconsFixtime");
113 >  DefineOptionalParameter(ZconsUsingSMD, "zconsUsingSMD");
114 >  DefineOptionalParameter(ThermodynamicIntegrationLambda, "thermodynamicIntegrationLambda");
115 >  DefineOptionalParameter(ThermodynamicIntegrationK, "thermodynamicIntegrationK");
116 >  DefineOptionalParameter(ForceFieldVariant, "forceFieldVariant");
117 >  DefineOptionalParameter(ForceFieldFileName, "forceFieldFileName");
118 >  DefineOptionalParameter(ThermIntDistSpringConst, "thermIntDistSpringConst");
119 >  DefineOptionalParameter(ThermIntThetaSpringConst, "thermIntThetaSpringConst");
120 >  DefineOptionalParameter(ThermIntOmegaSpringConst, "thermIntOmegaSpringConst");
121 >  DefineOptionalParameter(SurfaceTension, "surfaceTension");
122 >  DefineOptionalParameter(PrintPressureTensor, "printPressureTensor");
123 >  DefineOptionalParameter(ElectrostaticSummationMethod, "electrostaticSummationMethod");
124 >  DefineOptionalParameter(CutoffPolicy, "cutoffPolicy");
125 >  DefineOptionalParameter(StatFileFormat, "statFileFormat");    
126 >  
127 >  DefineOptionalParameterWithDefaultValue(MixingRule, "mixingRule", "standard");
128 >  DefineOptionalParameterWithDefaultValue(UsePeriodicBoundaryConditions, "usePeriodicBoundaryConditions", true);
129 >  DefineOptionalParameterWithDefaultValue(UseInitalTime, "useInitialTime", false);
130 >  DefineOptionalParameterWithDefaultValue(UseIntialExtendedSystemState, "useInitialExtendedSystemState", false);
131 >  DefineOptionalParameterWithDefaultValue(OrthoBoxTolerance, "orthoBoxTolerance", 1E-6);  
132 >  DefineOptionalParameterWithDefaultValue(UseSolidThermInt, "useSolidThermInt", false);
133 >  DefineOptionalParameterWithDefaultValue(UseLiquidThermInt, "useLiquidThermInt", false);
134 >  DefineOptionalParameterWithDefaultValue(ThermIntDistSpringConst, "thermIntDistSpringConst", 6.0);
135 >  DefineOptionalParameterWithDefaultValue(ThermIntThetaSpringConst, "thermIntThetaSpringConst", 7.5);
136 >  DefineOptionalParameterWithDefaultValue(ThermIntOmegaSpringConst, "thermIntOmegaSpringConst", 13.5);
137 >  DefineOptionalParameterWithDefaultValue(DampingAlpha, "dampingAlpha", 1.5);
138 >  DefineOptionalParameterWithDefaultValue(CompressDumpFile, "compressDumpFile", 0);
139 >  DefineOptionalParameterWithDefaultValue(SkinThickness, "skinThickness", 1.0);
140 >  
141 > }
142 >
143 > int Globals::globalAssign( event* the_event ){
144 >  char errorMessage[65535];
145 >  int key;
146 >  interface_assign_type the_type =  the_event->evt.asmt.asmt_type;
147 >  char* lhs = the_event->evt.asmt.lhs;
148 >  std::string keyword(lhs);
149 >
150 >  bool result = false;
151 >
152 >  /**@todo fix memory leak */  
153 >  ParamMap::iterator i =parameters_.find(keyword);
154 >  if (i != parameters_.end()) {
155 >    if( the_type == STRING ){
156 >       result = i->second->setData(std::string(the_event->evt.asmt.rhs.sval));
157 >       if (!result ) {
158 >            sprintf(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);
159 >            the_event->err_msg = strdup(errorMessage);
160 >       }
161 >    } else if( the_type == DOUBLE ){
162 >      result = i->second->setData(the_event->evt.asmt.rhs.dval);
163 >       if (!result )
164 >         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 );
165 >       the_event->err_msg = strdup(errorMessage);
166 >    }      
167 >    else if (the_type == INT ){
168 >      result = i->second->setData(the_event->evt.asmt.rhs.ival);
169 >       if (!result )
170 >         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 );
171 >       the_event->err_msg = strdup(errorMessage);
172 >      
173 >    } else {
174 >        sprintf(errorMessage,  "Internal error of parser\n");
175 >        the_event->err_msg = strdup(errorMessage);
176 >    }
177 >  } else {
178 >    sprintf(errorMessage,  "%s is an unrecognized keyword\n", keyword.c_str() );
179 >    the_event->err_msg = strdup(errorMessage);
180 >  }
181 >
182 >  if (keyword == "nComponents" && getNComponents() > 0) {
183 >    components = new Component*[getNComponents()];
184 >  }else if (keyword == "nZconstraints" && getNZconstraints() > 0) {
185 >    zConstraints = new ZconStamp*[getNZconstraints()];
186 >  }
187 >  
188 >  return result;
189 > }
190 >
191 > int Globals::newComponent( event* the_event ){
192 >  
193 >  current_component = new Component;
194 >  int index = the_event->evt.blk_index;
195 >  char err[200];
196 >  
197 >  if( haveNComponents() && index < getNComponents() )
198 >    components[index] = current_component;
199 >  else{
200 >    if( haveNComponents()  ){
201 >      sprintf( err, "meta-data parsing error: %d out of nComponents range",
202 >               index );
203 >      the_event->err_msg = strdup( err );
204 >      return 0;
205 >    }
206 >    else{
207 >      the_event->err_msg = strdup("meta-data parsing error: nComponents not given before"
208 >                                  " first component declaration." );
209 >      return 0;
210 >    }
211 >  }  
212 >
213 >  return 1;
214 > }
215 >
216 >
217 >
218 > int Globals::componentAssign( event* the_event ){
219 >
220 >  switch( the_event->evt.asmt.asmt_type ){
221 >    
222 >  case STRING:
223 >    return current_component->assignString( the_event->evt.asmt.lhs,
224 >                                            the_event->evt.asmt.rhs.sval,
225 >                                            &(the_event->err_msg));
226 >    break;
227 >    
228 >  case DOUBLE:
229 >    return current_component->assignDouble( the_event->evt.asmt.lhs,
230 >                                            the_event->evt.asmt.rhs.dval,
231 >                                            &(the_event->err_msg));
232 >    break;
233 >    
234 >  case INT:
235 >    return current_component->assignInt( the_event->evt.asmt.lhs,
236 >                                         the_event->evt.asmt.rhs.ival,
237 >                                         &(the_event->err_msg));
238 >    break;
239 >    
240 >  default:
241 >    the_event->err_msg = strdup( "Globals error. Invalid component"
242 >                                 " assignment type" );
243 >    return 0;
244 >    break;
245 >  }
246 >  return 0;
247 > }
248 >
249 > int Globals::componentEnd( event* the_event ){
250 >
251 >  the_event->err_msg = current_component->checkMe();
252 >  if( the_event->err_msg != NULL ) return 0;
253 >
254 >  return 1;
255 > }
256 >
257 > int Globals::newZconstraint( event* the_event ){
258 >  
259 >
260 >  int index = the_event->evt.blk_index;
261 >  char err[200];
262 >  current_zConstraint = new ZconStamp( index );
263 >  
264 >  if( haveNZconstraints() && index < getNZconstraints() )
265 >    zConstraints[index] = current_zConstraint;
266 >  else{
267 >    if( haveNZconstraints() ){
268 >      sprintf( err, "meta-data parsing error: %d out of nZconstraints range",
269 >               index );
270 >      the_event->err_msg = strdup( err );
271 >      return 0;
272 >    }
273 >    else{
274 >      the_event->err_msg = strdup("meta-data parsing error: nZconstraints"
275 >                                  " not given before"
276 >                                  " first zConstraint declaration." );
277 >      return 0;
278 >    }
279 >  }  
280 >
281 >  return 1;
282 > }
283 >
284 >
285 >
286 > int Globals::zConstraintAssign( event* the_event ){
287 >
288 >  switch( the_event->evt.asmt.asmt_type ){
289 >    
290 >  case STRING:
291 >    return current_zConstraint->assignString( the_event->evt.asmt.lhs,
292 >                                              the_event->evt.asmt.rhs.sval,
293 >                                              &(the_event->err_msg));
294 >    break;
295 >    
296 >  case DOUBLE:
297 >    return current_zConstraint->assignDouble( the_event->evt.asmt.lhs,
298 >                                              the_event->evt.asmt.rhs.dval,
299 >                                              &(the_event->err_msg));
300 >    break;
301 >    
302 >  case INT:
303 >    return current_zConstraint->assignInt( the_event->evt.asmt.lhs,
304 >                                           the_event->evt.asmt.rhs.ival,
305 >                                           &(the_event->err_msg));
306 >    break;
307 >    
308 >  default:
309 >    the_event->err_msg = strdup( "Globals error. Invalid zConstraint"
310 >                                 " assignment type" );
311 >    return 0;
312 >    break;
313 >  }
314 >  return 0;
315 > }
316 >
317 > int Globals::zConstraintEnd( event* the_event ){
318 >
319 >  the_event->err_msg = current_zConstraint->checkMe();
320 >  if( the_event->err_msg != NULL ) return 0;
321 >
322 >  return 1;
323 > }
324 >
325 > char* Globals::checkMe( void ){
326 >
327 >
328 >  std::string err("The following required keywords are missing:\n");
329 >  short int have_err = 0;
330 >
331 >  ParamMap::iterator i;
332 >  for (i = parameters_.begin(); i != parameters_.end(); ++i) {
333 >    if (!i->second->isOptional() && i->second->empty()) {
334 >        err +=  i->second->getKeyword() + "\n";
335 >    }
336 >  }
337 >
338 >  CheckParameter(ForceField, isNotEmpty());
339 >  CheckParameter(NComponents,isPositive());
340 >  CheckParameter(TargetTemp, isPositive());
341 >  CheckParameter(Ensemble, isEqualIgnoreCase(std::string("NVE")) || isEqualIgnoreCase(std::string("NVT")) ||
342 >                                          isEqualIgnoreCase(std::string("NPTi")) || isEqualIgnoreCase(std::string("NPTf"))||
343 >                                          isEqualIgnoreCase(std::string("NPTxyz")) );
344 >
345 >  CheckParameter(Dt, isPositive());
346 >  CheckParameter(RunTime, isPositive());
347 >  CheckParameter(InitialConfig, isNotEmpty());
348 >  CheckParameter(FinalConfig, isNotEmpty());
349 >  CheckParameter(NMol, isPositive());
350 >  CheckParameter(Density, isPositive());
351 >  CheckParameter(Box, isPositive());
352 >  CheckParameter(BoxX, isPositive());
353 >  CheckParameter(BoxY, isPositive());
354 >  CheckParameter(BoxZ, isPositive());
355 >  CheckParameter(SampleTime, isNonNegative());
356 >  CheckParameter(ResetTime, isNonNegative());
357 >  CheckParameter(StatusTime, isNonNegative());
358 >  CheckParameter(CutoffRadius, isPositive());
359 >  CheckParameter(SwitchingRadius, isNonNegative());
360 >  CheckParameter(Dielectric, isPositive());
361 >  CheckParameter(ThermalTime,  isNonNegative());
362 >  CheckParameter(TargetPressure,  isPositive());
363 >  CheckParameter(TauThermostat, isPositive());
364 >  CheckParameter(TauBarostat, isPositive());
365 >  CheckParameter(ZconsTime, isPositive());
366 >  CheckParameter(NZconstraints, isPositive());  
367 >  CheckParameter(ZconsTol, isPositive());
368 >  //CheckParameter(ZconsForcePolicy,);
369 >  CheckParameter(Seed, isPositive());
370 >  CheckParameter(Minimizer, isEqualIgnoreCase(std::string("SD")) || isEqualIgnoreCase(std::string("CG")));
371 >  CheckParameter(MinimizerMaxIter, isPositive());
372 >  CheckParameter(MinimizerWriteFrq, isPositive());
373 >  CheckParameter(MinimizerStepSize, isPositive());
374 >  CheckParameter(MinimizerFTol, isPositive());
375 >  CheckParameter(MinimizerGTol, isPositive());
376 >  CheckParameter(MinimizerLSTol, isPositive());
377 >  CheckParameter(MinimizerLSMaxIter, isPositive());
378 >  CheckParameter(ZconsGap, isPositive());
379 >  CheckParameter(ZconsFixtime, isPositive());
380 >  CheckParameter(ThermodynamicIntegrationLambda, isPositive());
381 >  CheckParameter(ThermodynamicIntegrationK, isPositive());
382 >  CheckParameter(ForceFieldVariant, isNotEmpty());
383 >  CheckParameter(ForceFieldFileName, isNotEmpty());
384 >  CheckParameter(ThermIntDistSpringConst, isPositive());
385 >  CheckParameter(ThermIntThetaSpringConst, isPositive());
386 >  CheckParameter(ThermIntOmegaSpringConst, isPositive());
387 >  CheckParameter(SurfaceTension, isPositive());
388 >  CheckParameter(ElectrostaticSummationMethod, isEqualIgnoreCase(std::string("NONE")) || isEqualIgnoreCase(std::string("UNDAMPED_WOLF")) || isEqualIgnoreCase(std::string("DAMPED_WOLF")) || isEqualIgnoreCase(std::string("REACTION_FIELD")) );
389 >  CheckParameter(CutoffPolicy, isEqualIgnoreCase(std::string("MIX")) || isEqualIgnoreCase(std::string("MAX")) || isEqualIgnoreCase(std::string("TRADITIONAL")));
390 >  //CheckParameter(StatFileFormat,);    
391 >  //CheckParameter(MixingRule,);
392 >  CheckParameter(OrthoBoxTolerance, isPositive());  
393 >  CheckParameter(ThermIntDistSpringConst, isPositive());
394 >  CheckParameter(ThermIntThetaSpringConst, isPositive());
395 >  CheckParameter(ThermIntOmegaSpringConst, isPositive());
396 >  CheckParameter(DampingAlpha,isPositive());
397 >  CheckParameter(SkinThickness, isPositive());
398 >  
399 >  //@todo memory leak
400 >  if( have_err )
401 >    return strdup( err.c_str() );
402 >  
403 >  return NULL;
404 >
405 >
406 > }
407 >
408 > int Globals::globalEnd( event* the_event ){
409 >  
410 >  the_event->err_msg = checkMe();
411 >  if( the_event->err_msg != NULL ) return 0;
412 >
413 >  return 1;
414 > }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines