ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/io/Globals.cpp
Revision: 2328
Committed: Mon Sep 26 15:58:17 2005 UTC (18 years, 9 months ago) by chuckv
File size: 56090 byte(s)
Log Message:
Added support for skinThickness keyword to Globals.

File Contents

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