ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/io/Globals.cpp
Revision: 2238
Committed: Sun May 22 21:05:15 2005 UTC (19 years, 2 months ago) by tim
File size: 52071 byte(s)
Log Message:
adding keyword printPressureTensor

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