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 425 by tim, Thu Mar 10 20:28:17 2005 UTC vs.
Revision 1341 by skuang, Fri May 8 19:47:05 2009 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 < }
56 >  DefineOptionalParameter(TargetTemp, "targetTemp");
57 >  DefineOptionalParameter(Ensemble, "ensemble");
58 >  DefineOptionalParameter(Dt, "dt");
59 >  DefineOptionalParameter(RunTime, "runTime");
60 >  DefineOptionalParameter(FinalConfig, "finalConfig");
61 >  DefineOptionalParameter(SampleTime, "sampleTime");
62 >  DefineOptionalParameter(ResetTime, "resetTime");
63 >  DefineOptionalParameter(StatusTime, "statusTime");
64 >  DefineOptionalParameter(CutoffRadius, "cutoffRadius");
65 >  DefineOptionalParameter(SwitchingRadius, "switchingRadius");
66 >  DefineOptionalParameter(TempSet, "tempSet");
67 >  DefineOptionalParameter(ThermalTime, "thermalTime");
68 >  DefineOptionalParameter(TargetPressure, "targetPressure");  
69 >  DefineOptionalParameter(TauThermostat, "tauThermostat");
70 >  DefineOptionalParameter(TauBarostat, "tauBarostat");
71 >  DefineOptionalParameter(ZconsTime, "zconsTime");
72 >  DefineOptionalParameter(ZconsTol, "zconsTol");
73 >  DefineOptionalParameter(ZconsForcePolicy, "zconsForcePolicy");
74 >  DefineOptionalParameter(Seed, "seed");
75 >  DefineOptionalParameter(Minimizer, "minimizer");
76 >  DefineOptionalParameter(MinimizerMaxIter,"minimizerMaxIter");
77 >  DefineOptionalParameter(MinimizerWriteFrq, "minimizerWriteFrq");
78 >  DefineOptionalParameter(MinimizerStepSize, "minimizerStepSize");
79 >  DefineOptionalParameter(MinimizerFTol, "minimizerFTol");
80 >  DefineOptionalParameter(MinimizerGTol, "minimizerGTol");
81 >  DefineOptionalParameter(MinimizerLSTol, "minimizerLSTol");
82 >  DefineOptionalParameter(MinimizerLSMaxIter, "minimizerLSMaxIter");
83 >  DefineOptionalParameter(ZconsGap, "zconsGap");
84 >  DefineOptionalParameter(ZconsFixtime, "zconsFixtime");
85 >  DefineOptionalParameter(ZconsUsingSMD, "zconsUsingSMD");
86 >  DefineOptionalParameter(ThermodynamicIntegrationLambda, "thermodynamicIntegrationLambda");
87 >  DefineOptionalParameter(ThermodynamicIntegrationK, "thermodynamicIntegrationK");
88 >  DefineOptionalParameter(ForceFieldVariant, "forceFieldVariant");
89 >  DefineOptionalParameter(ForceFieldFileName, "forceFieldFileName");
90 >  DefineOptionalParameter(DampingAlpha, "dampingAlpha");
91 >  DefineOptionalParameter(ThermIntDistSpringConst, "thermIntDistSpringConst");
92 >  DefineOptionalParameter(ThermIntThetaSpringConst, "thermIntThetaSpringConst");
93 >  DefineOptionalParameter(ThermIntOmegaSpringConst, "thermIntOmegaSpringConst");
94 >  DefineOptionalParameter(SurfaceTension, "surfaceTension");
95 >  DefineOptionalParameter(PrintPressureTensor, "printPressureTensor");
96 >  DefineOptionalParameter(TaggedAtomPair, "taggedAtomPair");
97 >  DefineOptionalParameter(PrintTaggedPairDistance, "printTaggedPairDistance");
98 >  DefineOptionalParameter(CutoffPolicy, "cutoffPolicy");
99 >  DefineOptionalParameter(SwitchingFunctionType, "switchingFunctionType");
100 >  DefineOptionalParameter(HydroPropFile, "HydroPropFile");
101 >  DefineOptionalParameter(Viscosity, "viscosity");
102 >  DefineOptionalParameter(BeadSize, "beadSize");
103 >  DefineOptionalParameter(FrozenBufferRadius, "frozenBufferRadius");
104 >  DefineOptionalParameter(LangevinBufferRadius, "langevinBufferRadius");
105 >  DefineOptionalParameter(NeighborListNeighbors,"NeighborListNeighbors");
106 >  DefineOptionalParameter(UseMultipleTemperatureMethod, "useMultipleTemperatureMethod");
107 >  DefineOptionalParameter(MTM_Ce, "MTM_Ce");
108 >  DefineOptionalParameter(MTM_G, "MTM_G");
109 >  DefineOptionalParameter(MTM_Io, "MTM_Io");
110 >  DefineOptionalParameter(MTM_Sigma, "MTM_Sigma");
111 >  DefineOptionalParameter(MTM_R, "MTM_R");
112 >  
113  
114 +  
115 +  DefineOptionalParameterWithDefaultValue(UsePeriodicBoundaryConditions, "usePeriodicBoundaryConditions", true);
116 +  DefineOptionalParameterWithDefaultValue(UseAtomicVirial, "useAtomicVirial", true);
117 +  DefineOptionalParameterWithDefaultValue(UseInitalTime, "useInitialTime", false);
118 +  DefineOptionalParameterWithDefaultValue(UseIntialExtendedSystemState, "useInitialExtendedSystemState", false);
119 +  DefineOptionalParameterWithDefaultValue(OrthoBoxTolerance, "orthoBoxTolerance", 1E-6);  
120 +  DefineOptionalParameterWithDefaultValue(UseSolidThermInt, "useSolidThermInt", false);
121 +  DefineOptionalParameterWithDefaultValue(UseLiquidThermInt, "useLiquidThermInt", false);
122 +  DefineOptionalParameterWithDefaultValue(ThermIntDistSpringConst, "thermIntDistSpringConst", 6.0);
123 +  DefineOptionalParameterWithDefaultValue(ThermIntThetaSpringConst, "thermIntThetaSpringConst", 7.5);
124 +  DefineOptionalParameterWithDefaultValue(ThermIntOmegaSpringConst, "thermIntOmegaSpringConst", 13.5);
125 +  DefineOptionalParameterWithDefaultValue(ElectrostaticSummationMethod, "electrostaticSummationMethod", "SHIFTED_FORCE");
126 +  DefineOptionalParameterWithDefaultValue(ElectrostaticScreeningMethod, "electrostaticScreeningMethod", "DAMPED");
127 +  DefineOptionalParameterWithDefaultValue(Dielectric, "dielectric", 78.5);
128 +  DefineOptionalParameterWithDefaultValue(CompressDumpFile, "compressDumpFile", 0);
129 +  DefineOptionalParameterWithDefaultValue(OutputForceVector, "outputForceVector", 0);
130 +  DefineOptionalParameterWithDefaultValue(SkinThickness, "skinThickness", 1.0);
131 +  DefineOptionalParameterWithDefaultValue(StatFileFormat, "statFileFormat", "TIME|TOTAL_ENERGY|POTENTIAL_ENERGY|KINETIC_ENERGY|TEMPERATURE|PRESSURE|VOLUME|CONSERVED_QUANTITY");    
132 +  DefineOptionalParameterWithDefaultValue(UseSphericalBoundaryConditions, "useSphericalBoundaryConditions", false);
133 +  DefineOptionalParameterWithDefaultValue(AccumulateBoxDipole, "accumulateBoxDipole", false);
134  
135 +  DefineOptionalParameterWithDefaultValue(UseRNEMD, "useRNEMD", false);
136 +  DefineOptionalParameterWithDefaultValue(RNEMD_swapTime, "RNEMD_swapTime", 100.0);
137 +  DefineOptionalParameterWithDefaultValue(RNEMD_nBins, "RNEMD_nBins", 16);
138 +  DefineOptionalParameterWithDefaultValue(RNEMD_swapType, "RNEMD_swapType", "Kinetic");
139 +  DefineOptionalParameterWithDefaultValue(RNEMD_objectSelection, "RNEMD_objectSelection", "select all");
140 +  
141  
142 < int Globals::componentAssign( event* the_event ){
143 <
144 <  switch( the_event->evt.asmt.asmt_type ){
142 >  deprecatedKeywords_.insert("nComponents");
143 >  deprecatedKeywords_.insert("nZconstraints");
144 >  deprecatedKeywords_.insert("initialConfig");
145      
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;
146   }
147  
148 < int Globals::componentEnd( event* the_event ){
149 <
150 <  the_event->err_msg = current_component->checkMe();
318 <  if( the_event->err_msg != NULL ) return 0;
319 <
320 <  return 1;
148 > Globals::~Globals() {
149 >    MemoryUtils::deletePointers(components_);
150 >    MemoryUtils::deletePointers(zconstraints_);
151   }
152  
153 < int Globals::newZconstraint( event* the_event ){
154 <  
153 > void Globals::validate() {
154 >  DataHolder::validate();
155  
156 <  int index = the_event->evt.blk_index;
157 <  char err[200];
158 <  current_zConstraint = new ZconStamp( index );
159 <  
160 <  have_zConstraints = 1;
156 >  CheckParameter(ForceField, isNotEmpty());
157 >  CheckParameter(TargetTemp, isPositive());
158 >  CheckParameter(Ensemble, isEqualIgnoreCase("NVE") || isEqualIgnoreCase("NVT") || isEqualIgnoreCase("NPTi") || isEqualIgnoreCase("NPTf") || isEqualIgnoreCase("NPTxyz") || isEqualIgnoreCase("NPAT")  || isEqualIgnoreCase("LANGEVINDYNAMICS") || isEqualIgnoreCase("LD") || isEqualIgnoreCase("NPRT") || isEqualIgnoreCase("NPGT") || isEqualIgnoreCase("NGammaT") || isEqualIgnoreCase("NGT") || isEqualIgnoreCase("SMIPD"));
159 >  CheckParameter(Dt, isPositive());
160 >  CheckParameter(RunTime, isPositive());
161 >  CheckParameter(FinalConfig, isNotEmpty());
162 >  CheckParameter(SampleTime, isNonNegative());
163 >  CheckParameter(ResetTime, isNonNegative());
164 >  CheckParameter(StatusTime, isNonNegative());
165 >  CheckParameter(CutoffRadius, isPositive());
166 >  CheckParameter(SwitchingRadius, isNonNegative());
167 >  CheckParameter(Dielectric, isPositive());
168 >  CheckParameter(ThermalTime,  isNonNegative());
169 >  CheckParameter(TauThermostat, isPositive());
170 >  CheckParameter(TauBarostat, isPositive());
171 >  CheckParameter(ZconsTime, isPositive());
172 >  CheckParameter(ZconsTol, isPositive());
173 >  CheckParameter(Seed, isPositive());
174 >  CheckParameter(Minimizer, isEqualIgnoreCase("SD") || isEqualIgnoreCase("CG"));
175 >  CheckParameter(MinimizerMaxIter, isPositive());
176 >  CheckParameter(MinimizerWriteFrq, isPositive());
177 >  CheckParameter(MinimizerStepSize, isPositive());
178 >  CheckParameter(MinimizerFTol, isPositive());
179 >  CheckParameter(MinimizerGTol, isPositive());
180 >  CheckParameter(MinimizerLSTol, isPositive());
181 >  CheckParameter(MinimizerLSMaxIter, isPositive());
182 >  CheckParameter(ZconsGap, isPositive());
183 >  CheckParameter(ZconsFixtime, isPositive());
184 >  CheckParameter(ThermodynamicIntegrationLambda, isNonNegative());
185 >  CheckParameter(ThermodynamicIntegrationK, isPositive());
186 >  CheckParameter(ForceFieldVariant, isNotEmpty());
187 >  CheckParameter(ForceFieldFileName, isNotEmpty());
188 >  CheckParameter(ThermIntDistSpringConst, isPositive());
189 >  CheckParameter(ThermIntThetaSpringConst, isPositive());
190 >  CheckParameter(ThermIntOmegaSpringConst, isPositive());
191 >  CheckParameter(ElectrostaticSummationMethod, isEqualIgnoreCase("NONE") || isEqualIgnoreCase("SHIFTED_POTENTIAL") || isEqualIgnoreCase("SHIFTED_FORCE") || isEqualIgnoreCase("REACTION_FIELD"));
192 >  CheckParameter(ElectrostaticScreeningMethod, isEqualIgnoreCase("UNDAMPED") || isEqualIgnoreCase("DAMPED"));
193 >  CheckParameter(CutoffPolicy, isEqualIgnoreCase("MIX") || isEqualIgnoreCase("MAX") || isEqualIgnoreCase("TRADITIONAL"));
194 >  CheckParameter(SwitchingFunctionType, isEqualIgnoreCase("CUBIC") || isEqualIgnoreCase("FIFTH_ORDER_POLYNOMIAL"));
195 >  //CheckParameter(StatFileFormat,);    
196 >  CheckParameter(OrthoBoxTolerance, isPositive());  
197 >  CheckParameter(ThermIntDistSpringConst, isPositive());
198 >  CheckParameter(ThermIntThetaSpringConst, isPositive());
199 >  CheckParameter(ThermIntOmegaSpringConst, isPositive());
200 >  CheckParameter(DampingAlpha,isNonNegative());
201 >  CheckParameter(SkinThickness, isPositive());
202 >  CheckParameter(Viscosity, isNonNegative());
203 >  CheckParameter(BeadSize, isPositive());
204 >  CheckParameter(FrozenBufferRadius, isPositive());
205 >  CheckParameter(LangevinBufferRadius, isPositive());
206 >  CheckParameter(NeighborListNeighbors, isPositive());
207 >  CheckParameter(RNEMD_swapTime, isPositive());
208 >  CheckParameter(RNEMD_nBins, isPositive() && isEven());
209 >  CheckParameter(RNEMD_swapType, isEqualIgnoreCase("Kinetic") || isEqualIgnoreCase("Px") || isEqualIgnoreCase("Py") || isEqualIgnoreCase("Pz"));
210  
211 <  if( have_n_zConstraints && index < n_zConstraints )
212 <    zConstraints[index] = current_zConstraint;
213 <  else{
214 <    if( have_n_zConstraints ){
215 <      sprintf( err, "meta-data parsing error: %d out of nZconstraints range",
337 <               index );
338 <      the_event->err_msg = strdup( err );
339 <      return 0;
211 >  for(std::vector<Component*>::iterator i = components_.begin(); i != components_.end(); ++i) {
212 >    if (!(*i)->findMoleculeStamp(moleculeStamps_)) {
213 >        std::ostringstream oss;
214 >        oss << "Globals Error: can not find molecule stamp for component " << (*i)->getType() << std::endl;
215 >        throw OOPSEException(oss.str());          
216      }
217 <    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;
217 >  }
218   }
351
352
353
354 int Globals::zConstraintAssign( event* the_event ){
355
356  switch( the_event->evt.asmt.asmt_type ){
219      
220 <  case STRING:
221 <    return current_zConstraint->assignString( the_event->evt.asmt.lhs,
222 <                                              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;
220 > bool Globals::addComponent(Component* comp) {
221 >    components_.push_back(comp);
222 >    return true;
223   }
224  
225 < int Globals::zConstraintEnd( event* the_event ){
226 <
227 <  the_event->err_msg = current_zConstraint->checkMe();
388 <  if( the_event->err_msg != NULL ) return 0;
389 <
390 <  return 1;
225 > bool Globals::addZConsStamp(ZConsStamp* zcons) {
226 >    zconstraints_.push_back(zcons);
227 >    return true;
228   }
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;
951
952    case G_RSW:
953      switch( the_type ){
954        
955      case STRING:
956        the_event->err_msg =
957          strdup( "Error in parsing meta-data file!\n\tswitchingRadius is not a double or int.\n" );
958        return 0;
959        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;
229  
230 <    case G_MIN_STEPSIZE:
231 <      switch( the_type ){
232 <
233 <      case STRING:
234 <        the_event->err_msg =
235 <          strdup( "Error in parsing meta-data file!\n\tminimizer_resetfrq is not a double or int.\n" );
236 <        return 1;
237 <        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;      
230 > bool Globals::addMoleculeStamp(MoleculeStamp* molStamp) {
231 >    std::string molStampName = molStamp->getName();
232 >    std::map<std::string, MoleculeStamp*>::iterator i;
233 >    bool ret = false;
234 >    i = moleculeStamps_.find(molStampName);
235 >    if (i == moleculeStamps_.end()) {
236 >        moleculeStamps_.insert(std::map<std::string, MoleculeStamp*>::value_type(molStampName, molStamp));
237 >        ret = true;
238      } else {
239 <      // I'm a minimizer:
239 >        std::ostringstream oss;
240 >        oss << "Globals Error: Molecule Stamp " << molStamp->getName() << "appears multiple times\n";
241 >        throw OOPSEException(oss.str());  
242      }
243 <  } 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;
243 >    return ret;
244   }
245 +
246  
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;
247   }
1931

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines