ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 2109
Committed: Thu Mar 10 20:28:17 2005 UTC (19 years, 3 months ago) by tim
File size: 50167 byte(s)
Log Message:
using map to replace link list

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