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

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