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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines