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

Comparing trunk/OOPSE-2.0/src/io/Globals.hpp (file contents):
Revision 2328 by chuckv, Mon Sep 26 15:58:17 2005 UTC vs.
Revision 2364 by tim, Thu Oct 13 22:26:47 2005 UTC

# Line 53 | Line 53
53   #include "types/Component.hpp"
54   #include "types/MakeStamps.hpp"
55   #include "types/ZconStamp.hpp"
56 + #include "utils/CaseConversion.hpp"
57  
58 + template<typename T>
59 + struct ParameterTraits;
60  
61 + //string
62 + template<>                    
63 + struct ParameterTraits<std::string>{
64 +  typedef std::string RepType;       // Representation type of the value
65  
66 < /**
67 < * @class Globals Globals.hpp "io/Globals.hpp"
68 < * @brief parsing and storing global parameters for simulation
69 < * @todo need refactorying
70 < */
71 < class Globals{
72 <  
73 < public:
74 <  
75 <  Globals();
76 <  ~Globals();
66 > template<typename T> static bool    convert(T v, RepType& r){return false;} // !NB everything is ok
67 > template<typename T> static RepType convert(T v)            {RepType tmp; convert(v,tmp);return tmp;}
68 >  static bool convert(RepType v, RepType& r) { r = v; return true;}
69 > };
70 > //bool
71 > template<>                    
72 > struct ParameterTraits<bool>{
73 >  typedef bool RepType;
74 >  template<typename T> static bool    convert(T, RepType&){return false;}
75 >  template<typename T> static RepType convert(T v)        {RepType tmp; convert(v,tmp);return tmp;}
76 >  static bool convert(std::string v, RepType& r) {
77 >    oopse::toLower(v);
78 >    bool result = false;
79 >    if (v == "true") {
80 >        r = true;
81 >        result = true;
82 >    } else if (v == "false") {
83 >        r = false;
84 >        result = true;
85 >    }
86 >    
87 >     return result;
88 >  }
89 > };
90  
91 <  void initalize();
92 <  
93 <  int newComponent( event* the_event );
94 <  int componentAssign( event* the_event );
95 <  int componentEnd( event* the_event );
91 > //int  
92 > template<>
93 > struct ParameterTraits<int>{
94 >    typedef int RepType;
95 >    template<typename T> static bool    convert(T, RepType&){return false;}
96 >    template<typename T> static RepType convert(T v)        {RepType tmp; convert(v,tmp);return tmp;}
97 >    static bool convert(RepType v, RepType& r)            { r=v; return true;}
98 > };
99  
100 <  int newZconstraint( event* the_event );
101 <  int zConstraintAssign( event* the_event );
102 <  int zConstraintEnd( event* the_event );
103 <  
104 <  int globalAssign( event* the_event );
105 <  int globalEnd( event* the_event );
106 <
107 <  char*  getForceField( void )      { return force_field; }
108 <  int    getNComponents( void )     { return n_components; }
86 <  double getTargetTemp( void )      { return target_temp; }
87 <  double getTargetPressure( void )  { return target_pressure; }
88 <  double getQmass( void )           { return q_mass; }
89 <  double getTauThermostat( void )   { return tau_thermostat; }
90 <  double getTauBarostat( void )     { return tau_barostat; }
91 <  char*  getEnsemble( void )        { return ensemble; }
92 <  double getDt( void )              { return dt; }
93 <  double getRunTime( void )         { return run_time; }
94 <
95 <  int    getNzConstraints( void )   { return n_zConstraints; }
96 <  char*  getInitialConfig( void )   { return initial_config; }
97 <  char*  getFinalConfig( void )     { return final_config; }
98 <  int    getNMol( void )            { return n_mol; }
99 <  double getDensity( void )         { return density; }
100 <  double getBox( void )             { return box; }
101 <  double getBoxX( void )            { return box_x; }
102 <  double getBoxY( void )            { return box_y; }
103 <  double getBoxZ( void )            { return box_z; }
104 <  double getSampleTime( void )      { return sample_time; }
105 <  double getStatusTime( void )      { return status_time; }
106 <  double getResetTime( void )       { return resetTime; }
107 <  double getThermalTime( void )     { return thermal_time; }
108 <  double getDielectric( void )      { return dielectric; }
109 <  double getRcut( void )            { return rcut; }
110 <  double getRsw( void )             { return rsw; }
111 <  double getSkinThickness(void)     { return skinThickness;}
112 <  int    getTempSet( void )         { return tempSet; }
113 <  int    getUseInitTime( void )     { return useInitTime; }
114 <  int    getUseInitXSstate( void )  { return useInitXSstate; }
115 <  double getOrthoBoxTolerance(void) { return orthoBoxTolerance; }
116 <  int    getPBC( void )             { return usePBC; }
117 <  char*  getMixingRule( void)       { return mixingRule; }
118 <  double getZconsTime(void)         { return zcons_time; }
119 <  double getZconsTol(void)          { return zcons_tol; }
120 <  char*  getZconsForcePolicy(void)  { return zconsForcePolicy; }
121 <  double getZconsGap(void)          { return zcons_gap; }
122 <  double getZconsFixtime(void)      { return zcons_fixtime; }
123 <  int    getZconsUsingSMD(void)     { return zcons_using_smd; }
124 <  int    getSeed(void)              { return seed; }
125 <  char*  getMinimizer(void)         { return minimizer_name; }
126 <  int    getMinMaxIter(void)        { return minimizer_maxiteration; }
127 <  int    getMinWriteFrq(void)       { return minimizer_writefrq; }
128 <  double getMinStepSize(void)       { return minimizer_stepsize; }
129 <  double getMinFTol(void)           { return minimizer_ftol; }
130 <  double getMinGTol(void)           { return minimizer_gtol; }
131 <  double getMinLSTol(void)          { return minimizer_ls_tol; }
132 <  int    getMinLSMaxIter(void)      { return minimizer_ls_maxiteration; }
133 <  int    getUseSolidThermInt(void)  { return useSolidThermInt; }
134 <  int    getUseLiquidThermInt(void) { return useLiquidThermInt; }
135 <  double getThermIntLambda(void)    { return thermodynamic_integration_lambda; }
136 <  double getThermIntK(void)         { return thermodynamic_integration_k; }
137 <  char*  getForceFieldVariant( void ) { return forcefield_variant; }
138 <  char*  getForceFieldFileName()    { return forcefield_filename; }
139 <  double getDistSpringConst(void)   { return therm_int_dist_spring; }
140 <  double getThetaSpringConst(void)  { return therm_int_theta_spring; }
141 <  double getOmegaSpringConst(void)  { return therm_int_omega_spring; }
142 <  double getSurfaceTension(void)    { return surface_tension; }
143 <  bool   getPrintPressureTensor(void) { return print_pressure_tensor;}
144 <  char*  getElectrostaticSummationMethod(void) { return electrostaticSummationMethod; }
145 <  double getDampingAlpha(void)      { return dampingAlpha; }
146 <  char*  getCutoffPolicy(void)      { return cutoffPolicy; }
147 <  bool   getCompressDumpFile(void)  { return compressDumpFile;}
148 <  
149 <  short int haveDt( void )            { return have_dt; }
150 <  short int haveRunTime( void )       { return have_run_time; }
151 <  short int haveEnsemble( void )      { return have_ensemble; }
152 <  short int haveTargetTemp( void )    { return have_target_temp; }
153 <  short int haveInitialConfig( void ) { return have_initial_config; }
154 <  short int haveFinalConfig( void )   { return have_final_config; }
155 <  short int haveNMol( void )          { return have_n_mol; }
156 <  short int haveDensity( void )       { return have_density; }
157 <  short int haveBox( void )           { return have_box; }
158 <  short int haveBoxX( void )          { return have_box_x; }
159 <  short int haveBoxY( void )          { return have_box_y; }
160 <  short int haveBoxZ( void )          { return have_box_z; }
161 <  short int haveSampleTime( void )    { return have_sample_time; }
162 <  short int haveResetTime( void )     { return have_reset_time; }
163 <  short int haveStatusTime( void )    { return have_status_time; }
164 <  short int haveThermalTime( void )   { return have_thermal_time; }
165 <  short int haveRcut( void )          { return have_rcut; }
166 <  short int haveRsw( void )           { return have_rsw; }
167 <  short int haveDielectric( void )    { return have_dielectric; }
168 <  short int haveTempSet( void )       { return have_tempSet; }
169 <  short int haveTargetPressure( void ){ return have_target_pressure; }
170 <  short int haveQmass( void )         { return have_q_mass; }
171 <  short int haveTauThermostat( void ) { return have_tau_thermostat; }
172 <  short int haveTauBarostat( void )   { return have_tau_barostat; }
173 <  short int haveZconstraintTime(void) { return have_zcons_time; }
174 <  short int haveZconstraints( void )  { return have_zConstraints; }
175 <  short int haveZconsTol(void)        { return have_zcons_tol; }
176 <  short int haveZconsForcePolicy(void){ return have_zcons_force_policy; }
177 <  short int haveZConsGap(void)        { return have_zcons_gap; }
178 <  short int haveZConsFixTime(void)    { return have_zcons_fixtime; }
179 <  short int haveZConsUsingSMD(void)   { return have_zcons_using_smd; }  
180 <  short int haveSeed(void)            { return have_seed; }
181 <  short int haveMinimizer(void)       { return have_minimizer; }
182 <  short int haveMinMaxIter(void)      { return have_minimizer_maxiteration; }
183 <  short int haveMinWriteFrq(void)     { return have_minimizer_writefrq; }
184 <  short int haveMinStepSize(void)     { return have_minimizer_stepsize; }
185 <  short int haveMinFTol(void)         { return have_minimizer_ftol; }
186 <  short int haveMinGTol(void)         { return have_minimizer_gtol; }
187 <  short int haveMinLSTol(void)        { return have_minimizer_ls_tol; }
188 <  short int haveMinLSMaxIter(void)    { return have_minimizer_ls_maxiteration;}
189 <  short int haveThermIntLambda(void)  { return have_thermodynamic_integration_lambda; }
190 <  short int haveThermIntK(void)       { return have_thermodynamic_integration_k; }
191 <  short int haveForceFieldVariant(void)  { return have_forcefield_variant; }
192 <  short int haveForceFieldFileName(void) { return have_forcefield_filename; }
193 <  short int haveDistSpringConst(void)    { return have_dist_spring_constant; }
194 <  short int haveThetaSpringConst(void)   { return have_theta_spring_constant; }
195 <  short int haveOmegaSpringConst(void)   { return have_omega_spring_constant; }
196 <  short int haveSurfaceTension(void)     { return have_surface_tension; }
197 <  short int havePrintPressureTensor(void) {return have_print_pressure_tensor;}
198 <  short int haveElectrostaticSummationMethod(void) {return have_electro_sum_method;}
199 <  short int haveDampingAlpha(void)       { return have_damping_alpha; }
200 <  short int haveCutoffPolicy(void)       { return have_cutoff_policy; }
201 <  short int haveCompressDumpfile(void)   { return have_compress_dumpfile; }
202 <  short int haveSkinThickness(void)      {return have_skin_thickness; }
100 > //double
101 > template<>                    
102 > struct ParameterTraits<double>{
103 >    typedef double RepType;
104 >    template<typename T> static bool    convert(T, RepType&){return false;}
105 >    template<typename T> static RepType convert(T v)        {RepType tmp; convert(v,tmp);return tmp;}
106 >    static bool convert(RepType v, RepType& r)            {r=v; return true;}
107 >    static bool convert(int v, RepType& r)                {r = static_cast<double>(v); return true;}
108 > };
109  
204  /* other accessors */
205  Component** getComponents( void )   { return components; }
206  ZconStamp** getZconStamp( void )    { return zConstraints; }
207  
208 private:
209  
110  
111 <  typedef std::map<std::string, int> CommandMapType;
112 <  CommandMapType command_table;
111 > class ParameterBase {
112 >  public:    
113 >    ParameterBase() : keyword_(), optional_(false), defaultValue_(false), empty_(true) {}
114 >    bool isOptional() {return optional_;}
115 >    void setOptional(bool optional) {optional_ = optional;}
116 >    bool hasDefaultValue() {return defaultValue_;}
117 >    virtual bool isValid() { return true;}
118 >    const std::string& getKeyword() {return keyword_;}
119 >    void setKeyword(const std::string& keyword) { keyword_ = keyword;}
120 >    bool empty() {return empty_;}
121 >    virtual bool setData(std::string) = 0;
122 >    virtual bool setData(int) = 0;
123 >    virtual bool setData(double) = 0;
124 >    
125 >  protected:
126 >    std::string keyword_;
127 >    bool optional_;
128 >    bool defaultValue_;
129 >    bool empty_;
130 > };
131  
132 <  
133 <  char* checkMe( void );
134 <  
135 <  Component* current_component;
136 <  Component** components; // the array of components
137 <
220 <  ZconStamp* current_zConstraint;
221 <  ZconStamp** zConstraints; // the array of zConstraints
132 > template<class ParamType>
133 > class Parameter : public ParameterBase{
134 >   public:    
135 >    typedef ParameterTraits<ParamType> ValueType;
136 >     void setDefaultValue(const ParamType& value) {data_ = value; defaultValue_ = true;}
137 >     ParamType getData() { return data_;}
138  
139 <  char force_field[100];
140 <  int n_components;
141 <  int n_zConstraints;
142 <  double target_temp;
143 <  double target_pressure;
144 <  char ensemble[100];
145 <  char mixingRule[100];
146 <  double dt;
147 <  double run_time;
148 <  char initial_config[120];
149 <  char final_config[120];
150 <  int n_mol;
151 <  double density;
152 <  double box;
153 <  double box_x, box_y, box_z;
154 <  double sample_time;
155 <  double status_time;
156 <  double resetTime;
157 <  double orthoBoxTolerance;
158 <  double thermal_time;
159 <  double rcut;
160 <  double rsw;
161 <  double skinThickness;
162 <  double dielectric;
163 <  int tempSet;
248 <  int useInitTime;
249 <  int useInitXSstate;
250 <  int usePBC;
251 <  double q_mass;
252 <  double tau_thermostat;
253 <  double tau_barostat;
254 <  double zcons_time;    
255 <  double zcons_tol;
256 <  char zconsForcePolicy[100];
257 <  double zcons_gap;
258 <  double zcons_fixtime;
259 <  int zcons_using_smd;
260 <  
261 <  int seed;
262 <  char minimizer_name[100];
263 <  int minimizer_maxiteration;
264 <  int minimizer_writefrq;
265 <  double minimizer_stepsize;
266 <  double minimizer_ftol;
267 <  double minimizer_gtol;
268 <  double minimizer_ls_tol;
269 <  int minimizer_ls_maxiteration;
270 <  int useSolidThermInt;
271 <  int useLiquidThermInt;
272 <  double thermodynamic_integration_lambda;
273 <  double thermodynamic_integration_k;
274 <  char forcefield_variant[100];
275 <  char forcefield_filename[100];
276 <  double therm_int_dist_spring;
277 <  double therm_int_theta_spring;
278 <  double therm_int_omega_spring;
279 <  double surface_tension;
280 <  bool print_pressure_tensor;
281 <  char electrostaticSummationMethod[100];
282 <  double dampingAlpha;
283 <  char cutoffPolicy[100];
284 <  bool compressDumpFile;
285 <  
286 <  //required arguments
287 <  short int have_force_field, have_n_components, have_target_temp;
288 <  short int have_target_pressure, have_ensemble, have_dt, have_run_time;
289 <  
290 <  // optional arguments
291 <  short int have_initial_config, have_final_config, have_n_mol;
292 <  short int have_density, have_box, have_box_x, have_box_y, have_box_z;
293 <  short int have_sample_time, have_status_time, have_rcut, have_dielectric;
294 <  short int have_tempSet, have_thermal_time, have_rsw, have_q_mass;
295 <  short int have_tau_thermostat, have_tau_barostat;
296 <  short int have_zcons_time, have_zConstraints, have_n_zConstraints;
297 <  short int have_zcons_tol, have_seed;
298 <  short int have_zcons_force_policy, have_reset_time;
299 <  short int have_zcons_gap, have_zcons_fixtime;
300 <  short int have_zcons_using_smd;
301 <  short int have_minimizer, have_minimizer_maxiteration;
302 <  short int have_minimizer_writefrq, have_minimizer_stepsize;
303 <  short int have_minimizer_ftol, have_minimizer_gtol;
304 <  short int have_minimizer_ls_tol, have_minimizer_ls_maxiteration;
305 <  short int have_thermodynamic_integration_lambda;
306 <  short int have_thermodynamic_integration_k;
307 <  short int have_forcefield_variant;
308 <  short int have_forcefield_filename;  
309 <  short int have_dist_spring_constant;
310 <  short int have_theta_spring_constant;
311 <  short int have_omega_spring_constant;
312 <  short int have_surface_tension;
313 <  short int have_print_pressure_tensor;
314 <  short int have_electro_sum_method;
315 <  short int have_damping_alpha;
316 <  short int have_cutoff_policy;
317 <  short int have_compress_dumpfile;
318 <  short int have_skin_thickness;
139 >    virtual bool setData(std::string sval) {
140 >        return internalSetData<std::string>(sval);
141 >    }
142 >    virtual bool setData(int ial) {
143 >        return internalSetData<int>(ial);
144 >    }
145 >    
146 >    virtual bool setData(double dval) {
147 >        return internalSetData<double>(dval);
148 >    }
149 >
150 >   private:
151 >     template<class T> bool internalSetData(T data) {
152 >        ParamType tmp;
153 >        bool result = ValueType::convert(data, tmp);
154 >        if (result) {
155 >            empty_ = false;
156 >            data_ = tmp;
157 >        }
158 >        return result;
159 >     }
160 >    
161 >   private:
162 >     ParamType data_;
163 >      
164   };
165  
166 + #define DeclareParameter(NAME, TYPE)         \
167 +    private:                                                   \
168 +      Parameter<TYPE> NAME;                                     \
169 +    public:                                                      \
170 +      bool have##NAME() { return !NAME.empty();}  \
171 +      TYPE get##NAME() { return NAME.getData();}
172 +
173 +
174 + class Globals {
175 +  public:
176 +    Globals();
177 +    
178 +  DeclareParameter(ForceField, std::string);
179 +  DeclareParameter(NComponents, int);  
180 +  DeclareParameter(TargetTemp, double);
181 +  DeclareParameter(Ensemble, std::string);
182 +  DeclareParameter(Dt, double);
183 +  DeclareParameter(RunTime, double);
184 +  DeclareParameter(InitialConfig, std::string);
185 +  DeclareParameter(FinalConfig, std::string);
186 +  DeclareParameter(NMol, int);
187 +  DeclareParameter(Density, double);
188 +  DeclareParameter(Box, double);
189 +  DeclareParameter(BoxX, double);
190 +  DeclareParameter(BoxY, double);
191 +  DeclareParameter(BoxZ, double);
192 +  DeclareParameter(SampleTime, double);
193 +  DeclareParameter(ResetTime, double);
194 +  DeclareParameter(StatusTime, double);
195 +  DeclareParameter(CutoffRadius, double);
196 +  DeclareParameter(SwitchingRadius, double);
197 +  DeclareParameter(Dielectric, double);
198 +  DeclareParameter(TempSet, bool);
199 +  DeclareParameter(ThermalTime, double);
200 +  DeclareParameter(MixingRule, std::string);
201 +  DeclareParameter(UsePeriodicBoundaryConditions, bool);
202 +  DeclareParameter(TargetPressure, double);
203 +  DeclareParameter(TauThermostat, double);
204 +  DeclareParameter(TauBarostat, double);
205 +  DeclareParameter(ZconsTime, double);
206 +  DeclareParameter(NZconstraints, int);
207 +  DeclareParameter(ZconsTol, double);
208 +  DeclareParameter(ZconsForcePolicy, std::string);
209 +  DeclareParameter(Seed, int);
210 +  DeclareParameter(UseInitalTime, bool);
211 +  DeclareParameter(UseIntialExtendedSystemState, bool);
212 +  DeclareParameter(OrthoBoxTolerance, double);
213 +  DeclareParameter(Minimizer, std::string);
214 +  DeclareParameter(MinimizerMaxIter, double);
215 +  DeclareParameter(MinimizerWriteFrq, int);
216 +  DeclareParameter(MinimizerStepSize, double);
217 +  DeclareParameter(MinimizerFTol, double);
218 +  DeclareParameter(MinimizerGTol, double);
219 +  DeclareParameter(MinimizerLSTol, double);
220 +  DeclareParameter(MinimizerLSMaxIter, int);
221 +  DeclareParameter(ZconsGap, double);
222 +  DeclareParameter(ZconsFixtime, double);
223 +  DeclareParameter(ZconsUsingSMD, bool);
224 +  DeclareParameter(UseSolidThermInt, bool);
225 +  DeclareParameter(UseLiquidThermInt, bool);
226 +  DeclareParameter(ThermodynamicIntegrationLambda, double);
227 +  DeclareParameter(ThermodynamicIntegrationK, double);
228 +  DeclareParameter(ForceFieldVariant, std::string);
229 +  DeclareParameter(ForceFieldFileName, std::string);
230 +  DeclareParameter(ThermIntDistSpringConst, double);
231 +  DeclareParameter(ThermIntThetaSpringConst, double);
232 +  DeclareParameter(ThermIntOmegaSpringConst, double);
233 +  DeclareParameter(SurfaceTension, double);
234 +  DeclareParameter(PrintPressureTensor, bool);
235 +  DeclareParameter(ElectrostaticSummationMethod, std::string);
236 +  DeclareParameter(DampingAlpha, double);
237 +  DeclareParameter(CutoffPolicy, std::string);
238 +  DeclareParameter(CompressDumpFile, bool);
239 +  DeclareParameter(SkinThickness, double);
240 +  DeclareParameter(StatFileFormat, std::string);    
241 +
242 +  private:
243 +    typedef std::map<std::string, ParameterBase*> ParamMap;
244 +    ParamMap parameters_;
245 +    
246 +    Component* current_component;
247 +    Component** components; // the array of components
248 +
249 +    ZconStamp* current_zConstraint;
250 +    ZconStamp** zConstraints; // the array of zConstraints
251 +
252 +    char* checkMe();
253 +
254 +  public:
255 +    int newComponent( event* the_event );
256 +    int componentAssign( event* the_event );
257 +    int componentEnd( event* the_event );
258 +
259 +    int newZconstraint( event* the_event );
260 +    int zConstraintAssign( event* the_event );
261 +    int zConstraintEnd( event* the_event );
262 +  
263 +    int globalAssign( event* the_event );
264 +    int globalEnd( event* the_event );    
265 +
266 +    ZconStamp** getZconStamp() {return zConstraints;}
267 +    Component** getComponents() {return components;}
268 + };
269   #endif
270 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines