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

Comparing:
trunk/src/io/Globals.cpp (file contents), Revision 580 by chrisfen, Tue Aug 30 18:23:50 2005 UTC vs.
branches/development/src/io/Globals.cpp (file contents), Revision 1715 by gezelter, Tue May 22 21:55:31 2012 UTC

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

Comparing:
trunk/src/io/Globals.cpp (property svn:keywords), Revision 580 by chrisfen, Tue Aug 30 18:23:50 2005 UTC vs.
branches/development/src/io/Globals.cpp (property svn:keywords), Revision 1715 by gezelter, Tue May 22 21:55:31 2012 UTC

# Line 0 | Line 1
1 + Author Id Revision Date

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines