ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 2285
Committed: Wed Sep 7 20:46:46 2005 UTC (18 years, 9 months ago) by gezelter
File size: 54435 byte(s)
Log Message:
adding c-side interface to change cutoff Policy

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