ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 2238
Committed: Sun May 22 21:05:15 2005 UTC (19 years, 1 month ago) by tim
File size: 52071 byte(s)
Log Message:
adding keyword printPressureTensor

File Contents

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