ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/io/Globals.cpp
Revision: 2308
Committed: Fri Sep 16 23:04:47 2005 UTC (18 years, 9 months ago) by chuckv
File size: 55264 byte(s)
Log Message:
Added keywords for compressed dump files.

File Contents

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