# | Line 6 | Line 6 | |
---|---|---|
6 | * redistribute this software in source and binary code form, provided | |
7 | * that the following conditions are met: | |
8 | * | |
9 | < | * 1. Acknowledgement of the program authors must be made in any |
10 | < | * publication of scientific results based in part on use of the |
11 | < | * program. An acceptable form of acknowledgement is citation of |
12 | < | * the article in which the program was described (Matthew |
13 | < | * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher |
14 | < | * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented |
15 | < | * Parallel Simulation Engine for Molecular Dynamics," |
16 | < | * J. Comput. Chem. 26, pp. 252-271 (2005)) |
17 | < | * |
18 | < | * 2. Redistributions of source code must retain the above copyright |
9 | > | * 1. Redistributions of source code must retain the above copyright |
10 | * notice, this list of conditions and the following disclaimer. | |
11 | * | |
12 | < | * 3. Redistributions in binary form must reproduce the above copyright |
12 | > | * 2. Redistributions in binary form must reproduce the above copyright |
13 | * notice, this list of conditions and the following disclaimer in the | |
14 | * documentation and/or other materials provided with the | |
15 | * distribution. | |
# | Line 38 | Line 29 | |
29 | * University of Notre Dame has been advised of the possibility of | |
30 | * such damages. | |
31 | * | |
32 | + | * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your |
33 | + | * research, please cite the appropriate papers when you publish your |
34 | + | * work. Good starting points are: |
35 | + | * |
36 | + | * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). |
37 | + | * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). |
38 | + | * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). |
39 | + | * [4] Vardeman & Gezelter, in progress (2009). |
40 | * | |
41 | * ParameterManager.hpp | |
43 | – | * OOPSE-2.0 |
42 | * | |
43 | * Created by Charles F. Vardeman II on 11/16/05. | |
44 | * @author Charles F. Vardeman II | |
45 | < | * @version $Id: ParameterManager.hpp,v 1.3 2006-05-17 21:51:42 tim Exp $ |
45 | > | * @version $Id: ParameterManager.hpp,v 1.6 2009-11-25 20:02:04 gezelter Exp $ |
46 | * | |
47 | */ | |
48 | ||
# | Line 52 | Line 50 | |
50 | #define UTILS_PARAMETERMANAGER_HPP | |
51 | ||
52 | #include <iostream> | |
53 | + | #include <cstdio> |
54 | ||
55 | #include <stdlib.h> | |
56 | #include <vector> | |
# | Line 60 | Line 59 | |
59 | #include "config.h" | |
60 | ||
61 | ||
62 | + | #include "utils/simError.h" |
63 | + | #include "utils/StringTokenizer.hpp" |
64 | #include "utils/CaseConversion.hpp" | |
65 | ||
66 | ||
66 | – | |
67 | template<typename T> | |
68 | struct ParameterTraits; | |
69 | ||
# | Line 84 | Line 84 | struct ParameterTraits<bool>{ | |
84 | template<typename T> static bool convert(T, RepType&){return false;} | |
85 | template<typename T> static RepType convert(T v) {RepType tmp; convert(v,tmp);return tmp;} | |
86 | static bool convert(std::string v, RepType& r) { | |
87 | < | oopse::toLower(v); |
87 | > | OpenMD::toLower(v); |
88 | bool result = false; | |
89 | if (v == "true") { | |
90 | r = true; | |
# | Line 109 | Line 109 | struct ParameterTraits<int>{ | |
109 | static std::string getParamType() { return "int";} | |
110 | }; | |
111 | ||
112 | + | //int |
113 | + | template<> |
114 | + | struct ParameterTraits<unsigned long int>{ |
115 | + | typedef unsigned long int RepType; |
116 | + | template<typename T> static bool convert(T, RepType&){return false;} |
117 | + | template<typename T> static RepType convert(T v) {RepType tmp; convert(v,tmp);return tmp;} |
118 | + | static bool convert(RepType v, RepType& r) { r=v; return true;} |
119 | + | static bool convert(int v, RepType& r) {r = static_cast<unsigned long int>(v); return true;} |
120 | + | static std::string getParamType() { return "unsigned long int";} |
121 | + | }; |
122 | + | |
123 | //RealType | |
124 | template<> | |
125 | struct ParameterTraits<RealType>{ | |
# | Line 117 | Line 128 | struct ParameterTraits<RealType>{ | |
128 | template<typename T> static RepType convert(T v) {RepType tmp; convert(v,tmp);return tmp;} | |
129 | static bool convert(RepType v, RepType& r) {r=v; return true;} | |
130 | static bool convert(int v, RepType& r) {r = static_cast<RealType>(v); return true;} | |
131 | + | static bool convert(unsigned long int v, RepType& r) {r = static_cast<RealType>(v); return true;} |
132 | static std::string getParamType() { return "RealType";} | |
133 | }; | |
134 | ||
135 | + | //Pair of ints |
136 | + | template<> |
137 | + | struct ParameterTraits<std::pair<int, int> >{ |
138 | + | typedef std::pair<int, int> RepType; |
139 | + | template<typename T> static bool convert(T, RepType&){return false;} |
140 | + | template<typename T> static RepType convert(T v) {RepType tmp; convert(v,tmp);return tmp;} |
141 | + | static bool convert(RepType v, RepType& r) {r=v; return true;} |
142 | + | static bool convert(std::string v, RepType& r) { |
143 | + | OpenMD::StringTokenizer tokenizer(v," ;,\t\n\r"); |
144 | + | if (tokenizer.countTokens() == 2) { |
145 | + | int atom1 = tokenizer.nextTokenAsInt(); |
146 | + | int atom2 = tokenizer.nextTokenAsInt(); |
147 | + | r = std::make_pair(atom1, atom2); |
148 | + | return true; |
149 | + | } else { |
150 | + | sprintf(painCave.errMsg, |
151 | + | "ParameterManager Error: " |
152 | + | "Not enough tokens to make pair!\n"); |
153 | + | painCave.severity = OPENMD_ERROR; |
154 | + | painCave.isFatal = 1; |
155 | + | simError(); |
156 | + | } |
157 | + | return false; |
158 | + | } |
159 | + | static std::string getParamType() { return "std::pair<int, int>";} |
160 | + | }; |
161 | ||
162 | + | |
163 | class ParameterBase { | |
164 | public: | |
165 | ParameterBase() : keyword_(), optional_(false), defaultValue_(false), empty_(true) {} | |
# | Line 134 | Line 173 | class ParameterBase { (public) | |
173 | bool empty() {return empty_;} | |
174 | virtual bool setData(std::string) = 0; | |
175 | virtual bool setData(int) = 0; | |
176 | + | virtual bool setData(unsigned long int) = 0; |
177 | virtual bool setData(RealType) = 0; | |
178 | + | virtual bool setData(std::pair<int, int>) = 0; |
179 | virtual std::string getParamType() = 0; | |
180 | protected: | |
181 | < | std::string keyword_; |
181 | > | std::string keyword_; |
182 | bool optional_; | |
183 | bool defaultValue_; | |
184 | bool empty_; | |
# | Line 153 | Line 194 | class Parameter : public ParameterBase{ (public) | |
194 | virtual bool setData(std::string sval) { | |
195 | return internalSetData<std::string>(sval); | |
196 | } | |
197 | + | |
198 | virtual bool setData(int ival) { | |
199 | return internalSetData<int>(ival); | |
200 | } | |
201 | + | |
202 | + | virtual bool setData(unsigned long int lival) { |
203 | + | return internalSetData<unsigned long int>(lival); |
204 | + | } |
205 | ||
206 | virtual bool setData(RealType dval) { | |
207 | return internalSetData<RealType>(dval); | |
208 | } | |
209 | + | |
210 | + | virtual bool setData(std::pair<int, int> pval) { |
211 | + | return internalSetData<std::pair<int, int> >(pval); |
212 | + | } |
213 | ||
214 | virtual std::string getParamType() { return ParameterTraits<ParamType>::getParamType();} | |
215 | private: | |
# | Line 200 | Line 250 | parameters_.insert(std::map<std::string, ParameterBase | |
250 | parameters_.insert(std::map<std::string, ParameterBase*>::value_type(std::string(KEYWORD), static_cast<ParameterBase*>(&NAME))); | |
251 | ||
252 | #define CheckParameter(NAME, CONSTRAINT) \ | |
253 | < | 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();} } |
253 | > | 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 = OPENMD_ERROR; simError();} } |
254 | ||
255 | ||
256 |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |