ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 2279
Committed: Tue Aug 30 18:23:50 2005 UTC (18 years, 10 months ago) by chrisfen
File size: 53560 byte(s)
Log Message:
made some changes for implementing the wolf potential

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