ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/Globals.cpp
Revision: 1957
Committed: Tue Jan 25 17:45:23 2005 UTC (19 years, 5 months ago) by tim
File size: 46959 byte(s)
Log Message:
(1) complete section parser's error message
(2) add GhostTorsion
(3) accumulate inertial tensor from the directional atoms before calculate rigidbody's inertial tensor

File Contents

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