# | Line 36 | Line 36 | |
---|---|---|
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 | < | * |
39 | > | * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). |
40 | > | * [4] , Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). * |
41 | * ParameterManager.hpp | |
42 | * | |
43 | * Created by Charles F. Vardeman II on 11/16/05. | |
# | Line 157 | Line 157 | struct ParameterTraits<std::pair<int, int> >{ | |
157 | return false; | |
158 | } | |
159 | static std::string getParamType() { return "std::pair<int, int>";} | |
160 | + | }; |
161 | + | |
162 | + | //OpenMD's internal Vector3d |
163 | + | template<> |
164 | + | struct ParameterTraits<OpenMD::Vector3d >{ |
165 | + | typedef OpenMD::Vector3d RepType; |
166 | + | template<typename T> static bool convert(T, RepType&){return false;} |
167 | + | template<typename T> static RepType convert(T v) {RepType tmp; convert(v,tmp);return tmp;} |
168 | + | static bool convert(RepType v, RepType& r) {r=v; return true;} |
169 | + | static bool convert(std::string v, RepType& r) { |
170 | + | OpenMD::StringTokenizer tokenizer(v," ();,\t\n\r"); |
171 | + | if (tokenizer.countTokens() == 3) { |
172 | + | RealType v1 = tokenizer.nextTokenAsDouble(); |
173 | + | RealType v2 = tokenizer.nextTokenAsDouble(); |
174 | + | RealType v3 = tokenizer.nextTokenAsDouble(); |
175 | + | r = OpenMD::Vector3d(v1, v2, v3); |
176 | + | return true; |
177 | + | } else { |
178 | + | sprintf(painCave.errMsg, |
179 | + | "ParameterManager Error: " |
180 | + | "Incorrect number of tokens to make a Vector3!\n"); |
181 | + | painCave.severity = OPENMD_ERROR; |
182 | + | painCave.isFatal = 1; |
183 | + | simError(); |
184 | + | } |
185 | + | return false; |
186 | + | } |
187 | + | static std::string getParamType() { return "OpenMD::Vector3d";} |
188 | }; | |
189 | ||
190 | ||
# | Line 176 | Line 204 | class ParameterBase { (public) | |
204 | virtual bool setData(unsigned long int) = 0; | |
205 | virtual bool setData(RealType) = 0; | |
206 | virtual bool setData(std::pair<int, int>) = 0; | |
207 | + | virtual bool setData(OpenMD::Vector3d) = 0; |
208 | virtual std::string getParamType() = 0; | |
209 | protected: | |
210 | std::string keyword_; | |
# | Line 210 | Line 239 | class Parameter : public ParameterBase{ (public) | |
239 | virtual bool setData(std::pair<int, int> pval) { | |
240 | return internalSetData<std::pair<int, int> >(pval); | |
241 | } | |
242 | + | virtual bool setData(OpenMD::Vector3d pval) { |
243 | + | return internalSetData<OpenMD::Vector3d >(pval); |
244 | + | } |
245 | ||
246 | virtual std::string getParamType() { return ParameterTraits<ParamType>::getParamType();} | |
247 | private: | |
# | Line 235 | Line 267 | TYPE get##NAME() { return NAME.getData();} | |
267 | bool have##NAME() { return !NAME.empty();} \ | |
268 | TYPE get##NAME() { return NAME.getData();} | |
269 | ||
270 | + | #define DeclareAlterableParameter(NAME, TYPE) \ |
271 | + | private: \ |
272 | + | Parameter<TYPE> NAME; \ |
273 | + | public: \ |
274 | + | bool have##NAME() { return !NAME.empty();} \ |
275 | + | TYPE get##NAME() { return NAME.getData();} \ |
276 | + | bool set##NAME(TYPE s) { return NAME.setData(s);} \ |
277 | ||
278 | ||
279 | + | |
280 | #define DefineParameter(NAME,KEYWORD) \ | |
281 | NAME.setKeyword(KEYWORD); \ | |
282 | parameters_.insert(std::map<std::string, ParameterBase*>::value_type(std::string(KEYWORD), static_cast<ParameterBase*>(&NAME))); |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |