ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/io/Globals.cpp
(Generate patch)

Comparing trunk/OOPSE-2.0/src/io/Globals.cpp (file contents):
Revision 2364 by tim, Thu Oct 13 22:26:47 2005 UTC vs.
Revision 2373 by tim, Mon Oct 17 03:06:29 2005 UTC

# Line 50 | Line 50
50   #include "io/mpiBASS.h"
51   #endif // is_mpi
52  
53 + #include "io/ParamConstraint.hpp"
54  
55   #define DefineParameter(NAME,KEYWORD)                              \
56    NAME.setKeyword(KEYWORD);                  \
# Line 63 | Line 64 | Globals::Globals(){
64    NAME.setKeyword(KEYWORD); NAME.setOptional(true); NAME.setDefaultValue(DEFAULTVALUE);                      \
65    parameters_.insert(std::make_pair(std::string(KEYWORD),  &NAME));
66  
67 + #define CheckParameter(NAME, CONSTRAINT)                              \
68 +  if (!NAME.empty()) { if (!(CONSTRAINT)(NAME.getData())) { sprintf(painCave.errMsg,"Error in checking %s : should be %s\n",NAME.getKeyword().c_str(),(CONSTRAINT).getConstraintDescription().c_str()); painCave.isFatal = 1; painCave.severity = OOPSE_ERROR; simError();} }                
69 +
70   Globals::Globals(){
71  
72    DefineParameter(ForceField, "forceField")
# Line 127 | Line 131 | Globals::Globals(){
131    DefineOptionalParameterWithDefaultValue(OrthoBoxTolerance, "orthoBoxTolerance", 1E-6);  
132    DefineOptionalParameterWithDefaultValue(UseSolidThermInt, "useSolidThermInt", false);
133    DefineOptionalParameterWithDefaultValue(UseLiquidThermInt, "useLiquidThermInt", false);
134 +  DefineOptionalParameterWithDefaultValue(ThermIntDistSpringConst, "thermIntDistSpringConst", 6.0);
135 +  DefineOptionalParameterWithDefaultValue(ThermIntThetaSpringConst, "thermIntThetaSpringConst", 7.5);
136 +  DefineOptionalParameterWithDefaultValue(ThermIntOmegaSpringConst, "thermIntOmegaSpringConst", 13.5);
137    DefineOptionalParameterWithDefaultValue(DampingAlpha, "dampingAlpha", 1.5);
138    DefineOptionalParameterWithDefaultValue(CompressDumpFile, "compressDumpFile", 0);
139    DefineOptionalParameterWithDefaultValue(SkinThickness, "skinThickness", 1.0);
# Line 134 | Line 141 | int Globals::globalAssign( event* the_event ){
141   }
142  
143   int Globals::globalAssign( event* the_event ){
144 <  
144 >  char errorMessage[65535];
145    int key;
139  int token;
146    interface_assign_type the_type =  the_event->evt.asmt.asmt_type;
147    char* lhs = the_event->evt.asmt.lhs;
148    std::string keyword(lhs);
149  
150 <  bool result;
150 >  bool result = false;
151  
152 <
152 >  /**@todo fix memory leak */  
153    ParamMap::iterator i =parameters_.find(keyword);
154    if (i != parameters_.end()) {
155      if( the_type == STRING ){
156         result = i->second->setData(std::string(the_event->evt.asmt.rhs.sval));
157         if (!result ) {
158 <            sprintf(the_event->err_msg, "Error in parsing meta-data file!\n\t%s must be a string.\n", keyword.c_str() );
158 >            sprintf(errorMessage, "Error in parsing %s: expect %s, but get a string \"%s\".\n", keyword.c_str(), i->second->getParamType().c_str(), the_event->evt.asmt.rhs.sval);
159 >            the_event->err_msg = strdup(errorMessage);
160         }
161      } else if( the_type == DOUBLE ){
162        result = i->second->setData(the_event->evt.asmt.rhs.dval);
163         if (!result )
164 <         sprintf(the_event->err_msg, "Error in parsing meta-data file!\n\t%s must be a double.\n", keyword.c_str() );
164 >         sprintf(errorMessage, "Error in parsing %s: expect %s, but get a double %f.\n", keyword.c_str(), i->second->getParamType().c_str(), the_event->evt.asmt.rhs.dval );
165 >       the_event->err_msg = strdup(errorMessage);
166      }      
167      else if (the_type == INT ){
168        result = i->second->setData(the_event->evt.asmt.rhs.ival);
169         if (!result )
170 <         sprintf(the_event->err_msg,  "Error in parsing meta-data file!\n\t%s must be an int.\n", keyword.c_str() );
170 >         sprintf(errorMessage,  "Error in parsing %s: expect %s, but get an int %d.\n", keyword.c_str(), i->second->getParamType().c_str(), the_event->evt.asmt.rhs.ival );
171 >       the_event->err_msg = strdup(errorMessage);
172        
173      } else {
174 <    
174 >        sprintf(errorMessage,  "Internal error of parser\n");
175 >        the_event->err_msg = strdup(errorMessage);
176      }
177 +  } else {
178 +    sprintf(errorMessage,  "%s is an unrecognized keyword\n", keyword.c_str() );
179 +    the_event->err_msg = strdup(errorMessage);
180    }
181  
182    if (keyword == "nComponents" && getNComponents() > 0) {
# Line 322 | Line 335 | char* Globals::checkMe( void ){
335      }
336    }
337  
338 +  CheckParameter(ForceField, isNotEmpty());
339 +  CheckParameter(NComponents,isPositive());
340 +  CheckParameter(TargetTemp, isPositive());
341 +  CheckParameter(Ensemble, isEqualIgnoreCase(std::string("NVE")) || isEqualIgnoreCase(std::string("NVT")) ||
342 +                                          isEqualIgnoreCase(std::string("NPTi")) || isEqualIgnoreCase(std::string("NPTf"))||
343 +                                          isEqualIgnoreCase(std::string("NPTxyz")) );
344 +
345 +  CheckParameter(Dt, isPositive());
346 +  CheckParameter(RunTime, isPositive());
347 +  CheckParameter(InitialConfig, isNotEmpty());
348 +  CheckParameter(FinalConfig, isNotEmpty());
349 +  CheckParameter(NMol, isPositive());
350 +  CheckParameter(Density, isPositive());
351 +  CheckParameter(Box, isPositive());
352 +  CheckParameter(BoxX, isPositive());
353 +  CheckParameter(BoxY, isPositive());
354 +  CheckParameter(BoxZ, isPositive());
355 +  CheckParameter(SampleTime, isNonNegative());
356 +  CheckParameter(ResetTime, isNonNegative());
357 +  CheckParameter(StatusTime, isNonNegative());
358 +  CheckParameter(CutoffRadius, isPositive());
359 +  CheckParameter(SwitchingRadius, isNonNegative());
360 +  CheckParameter(Dielectric, isPositive());
361 +  CheckParameter(ThermalTime,  isNonNegative());
362 +  CheckParameter(TargetPressure,  isPositive());
363 +  CheckParameter(TauThermostat, isPositive());
364 +  CheckParameter(TauBarostat, isPositive());
365 +  CheckParameter(ZconsTime, isPositive());
366 +  CheckParameter(NZconstraints, isPositive());  
367 +  CheckParameter(ZconsTol, isPositive());
368 +  //CheckParameter(ZconsForcePolicy,);
369 +  CheckParameter(Seed, isPositive());
370 +  CheckParameter(Minimizer, isEqualIgnoreCase(std::string("SD")) || isEqualIgnoreCase(std::string("CG")));
371 +  CheckParameter(MinimizerMaxIter, isPositive());
372 +  CheckParameter(MinimizerWriteFrq, isPositive());
373 +  CheckParameter(MinimizerStepSize, isPositive());
374 +  CheckParameter(MinimizerFTol, isPositive());
375 +  CheckParameter(MinimizerGTol, isPositive());
376 +  CheckParameter(MinimizerLSTol, isPositive());
377 +  CheckParameter(MinimizerLSMaxIter, isPositive());
378 +  CheckParameter(ZconsGap, isPositive());
379 +  CheckParameter(ZconsFixtime, isPositive());
380 +  CheckParameter(ThermodynamicIntegrationLambda, isPositive());
381 +  CheckParameter(ThermodynamicIntegrationK, isPositive());
382 +  CheckParameter(ForceFieldVariant, isNotEmpty());
383 +  CheckParameter(ForceFieldFileName, isNotEmpty());
384 +  CheckParameter(ThermIntDistSpringConst, isPositive());
385 +  CheckParameter(ThermIntThetaSpringConst, isPositive());
386 +  CheckParameter(ThermIntOmegaSpringConst, isPositive());
387 +  CheckParameter(SurfaceTension, isPositive());
388 +  CheckParameter(ElectrostaticSummationMethod, isEqualIgnoreCase(std::string("NONE")) || isEqualIgnoreCase(std::string("UNDAMPED_WOLF")) || isEqualIgnoreCase(std::string("DAMPED_WOLF")) || isEqualIgnoreCase(std::string("REACTION_FIELD")) );
389 +  CheckParameter(CutoffPolicy, isEqualIgnoreCase(std::string("MIX")) || isEqualIgnoreCase(std::string("MAX")) || isEqualIgnoreCase(std::string("TRADITIONAL")));
390 +  //CheckParameter(StatFileFormat,);    
391 +  //CheckParameter(MixingRule,);
392 +  CheckParameter(OrthoBoxTolerance, isPositive());  
393 +  CheckParameter(ThermIntDistSpringConst, isPositive());
394 +  CheckParameter(ThermIntThetaSpringConst, isPositive());
395 +  CheckParameter(ThermIntOmegaSpringConst, isPositive());
396 +  CheckParameter(DampingAlpha,isPositive());
397 +  CheckParameter(SkinThickness, isPositive());
398 +  
399    //@todo memory leak
400    if( have_err )
401      return strdup( err.c_str() );

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines