ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/io/Globals.cpp
(Generate patch)

Comparing trunk/src/io/Globals.cpp (file contents):
Revision 2 by gezelter, Fri Sep 24 04:16:43 2004 UTC vs.
Revision 770 by tim, Fri Dec 2 15:38:03 2005 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines