ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/types/AtomType.hpp
Revision: 2427
Committed: Mon Nov 14 21:29:36 2005 UTC (18 years, 7 months ago) by chuckv
File size: 6627 byte(s)
Log Message:
Sutton-Chen almost done. Just need to fix do_forces to use Sutton-Chen.

File Contents

# Content
1 /*
2 * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 *
4 * The University of Notre Dame grants you ("Licensee") a
5 * non-exclusive, royalty free, license to use, modify and
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
19 * notice, this list of conditions and the following disclaimer.
20 *
21 * 3. Redistributions in binary form must reproduce the above copyright
22 * notice, this list of conditions and the following disclaimer in the
23 * documentation and/or other materials provided with the
24 * distribution.
25 *
26 * This software is provided "AS IS," without a warranty of any
27 * kind. All express or implied conditions, representations and
28 * warranties, including any implied warranty of merchantability,
29 * fitness for a particular purpose or non-infringement, are hereby
30 * excluded. The University of Notre Dame and its licensors shall not
31 * be liable for any damages suffered by licensee as a result of
32 * using, modifying or distributing the software or its
33 * derivatives. In no event will the University of Notre Dame or its
34 * licensors be liable for any lost revenue, profit or data, or for
35 * direct, indirect, special, consequential, incidental or punitive
36 * damages, however caused and regardless of the theory of liability,
37 * arising out of the use of or inability to use software, even if the
38 * University of Notre Dame has been advised of the possibility of
39 * such damages.
40 */
41
42 #ifndef TYPES_ATOMTYPE_HPP
43
44 #define TYPES_ATOMTYPE_HPP
45
46 #include <string>
47
48 #include "utils/PropertyMap.hpp"
49
50 #define __C
51 #include "types/AtomTypeProperties.h"
52 #include "UseTheForce/DarkSide/atype_interface.h"
53
54 namespace oopse {
55 /**
56 * @class AtomType
57 * AtomType is what OOPSE looks to for unchanging data about an atom.
58 * Things that belong to AtomType are universal properties (i.e. does
59 * this atom have a Charge? What is it's mass_?) Dynamic properties of
60 * an atom are not intended to be properties of an atom type
61 */
62 class AtomType {
63 public:
64
65 AtomType();
66
67 virtual ~AtomType() { } ;
68
69 virtual void complete();
70
71 /**
72 * Finishes off the AtomType by communicating the logical portions of the
73 * structure to the Fortran atype module
74 */
75 void makeFortranAtomType();
76
77 void setMass(double m) {
78 mass_ = m;
79 }
80
81 double getMass(void) {
82 return mass_;
83 }
84
85 void setIdent(int id) {
86 atp.ident = id;
87 }
88
89 int getIdent() {
90 return atp.ident;
91 }
92
93 void setName(const std::string&name) {
94 name_ = name;
95 }
96
97 std::string getName() {
98 return name_;
99 }
100
101 void setLennardJones() {
102 atp.is_LennardJones = 1;
103 }
104
105 bool isLennardJones() {
106 return atp.is_LennardJones;
107 }
108
109
110 bool isElectrostatic() {
111 return isCharge() || isMultipole();
112 }
113
114 void setEAM() {
115 atp.is_EAM = 1;
116 }
117
118 bool isEAM() {
119 return atp.is_EAM;
120 }
121
122 void setCharge() {
123 atp.is_Charge = 1;
124 }
125
126 bool isCharge() {
127 return atp.is_Charge;
128 }
129
130 bool isDirectional() {
131 return atp.is_Directional;
132 }
133
134 bool isDipole() {
135 return atp.is_Dipole;
136 }
137
138 bool isSplitDipole() {
139 return atp.is_SplitDipole;
140 }
141
142 bool isQuadrupole() {
143 return atp.is_Quadrupole;
144 }
145
146 bool isMultipole() {
147 return isDipole() || isQuadrupole();
148 }
149
150 bool isGayBerne() {
151 return atp.is_GayBerne;
152 }
153
154 bool isSticky() {
155 return atp.is_Sticky;
156 }
157
158 bool isStickyPower() {
159 return atp.is_StickyPower;
160 }
161
162 bool isShape() {
163 return atp.is_Shape;
164 }
165
166 bool isSC() {
167 return atp.is_SC;
168 }
169
170 void setSC() {
171 atp.is_SC = 1;
172 }
173
174
175 bool isMEAM() {
176 return atp.is_MEAM;
177 }
178
179 void setMEAM() {
180 atp.is_MEAM = 1;
181 }
182
183
184 //below functions are just forward functions
185 /**
186 * Adds property into property map
187 * @param genData GenericData to be added into PropertyMap
188 */
189 void addProperty(GenericData* genData);
190
191 /**
192 * Removes property from PropertyMap by name
193 * @param propName the name of property to be removed
194 */
195 void removeProperty(const std::string& propName);
196
197 /**
198 * clear all of the properties
199 */
200 void clearProperties();
201
202 /**
203 * Returns all names of properties
204 * @return all names of properties
205 */
206 std::vector<std::string> getPropertyNames();
207
208 /**
209 * Returns all of the properties in PropertyMap
210 * @return all of the properties in PropertyMap
211 */
212 std::vector<GenericData*> getProperties();
213
214 /**
215 * Returns property
216 * @param propName name of property
217 * @return a pointer point to property with propName. If no property named propName
218 * exists, return NULL
219 */
220 GenericData* getPropertyByName(const std::string& propName);
221
222 protected:
223
224 AtomTypeProperties atp;
225 double mass_;
226 std::string name_;
227
228 private:
229 //prevent copy construction and copy assignment, since property map contains
230 //pointers which can not be copied and managered safely, except make the generic data
231 //at PropertyMap as copy on write shared pointer
232 AtomType(const AtomType&);
233 AtomType& operator=(const AtomType& atomType);
234
235
236 PropertyMap properties_;
237
238 };
239
240 struct LJParam {
241 double epsilon;
242 double sigma;
243 int soft_pot;
244 };
245 typedef SimpleTypeData<LJParam> LJParamGenericData;
246
247 struct EAMParam {
248 double latticeConstant;
249 int nrho;
250 double drho;
251 int nr;
252 double dr;
253 double rcut;
254 std::vector<double> rvals;
255 std::vector<double> rhovals;
256 std::vector<double> Frhovals;
257 };
258
259 typedef SimpleTypeData<EAMParam> EAMParamGenericData;
260
261 struct SCParam {
262 double c;
263 double m;
264 double n;
265 double alpha;
266 double epsilon;
267 };
268 typedef SimpleTypeData<SCParam> SCParamGenericData;
269
270
271
272
273 }
274
275 #endif