ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/io/Globals.cpp
Revision: 2297
Committed: Thu Sep 15 00:14:35 2005 UTC (18 years, 9 months ago) by chrisfen
File size: 54843 byte(s)
Log Message:
changes to include the coulombicCorrection selector

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