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 2308 by chuckv, Fri Sep 16 23:04:47 2005 UTC vs.
Revision 2447 by chuckv, Wed Nov 16 21:37:45 2005 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines