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 507 by gezelter, Fri Apr 15 22:04:00 2005 UTC vs.
Revision 927 by tim, Fri Mar 31 18:09:22 2006 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines