ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 2328
Committed: Mon Sep 26 15:58:17 2005 UTC (18 years, 9 months ago) by chuckv
File size: 56090 byte(s)
Log Message:
Added support for skinThickness keyword to Globals.

File Contents

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