ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/io/Globals.cpp
Revision: 2308
Committed: Fri Sep 16 23:04:47 2005 UTC (18 years, 9 months ago) by chuckv
File size: 55264 byte(s)
Log Message:
Added keywords for compressed dump files.

File Contents

# Content
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_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