ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 2204
Committed: Fri Apr 15 22:04:00 2005 UTC (19 years, 2 months ago) by gezelter
File size: 50147 byte(s)
Log Message:
xemacs has been drafted to perform our indentation services

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