ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 2279
Committed: Tue Aug 30 18:23:50 2005 UTC (18 years, 10 months ago) by chrisfen
File size: 53560 byte(s)
Log Message:
made some changes for implementing the wolf potential

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