ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/types/AtomType.hpp
Revision: 2220
Committed: Thu May 5 14:47:35 2005 UTC (19 years, 2 months ago) by chrisfen
File size: 6228 byte(s)
Log Message:
OOPSE setup for TAP water.  It's not parametrized, but OOPSE will now let me run it...

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 //below functions are just forward functions
167 /**
168 * Adds property into property map
169 * @param genData GenericData to be added into PropertyMap
170 */
171 void addProperty(GenericData* genData);
172
173 /**
174 * Removes property from PropertyMap by name
175 * @param propName the name of property to be removed
176 */
177 void removeProperty(const std::string& propName);
178
179 /**
180 * clear all of the properties
181 */
182 void clearProperties();
183
184 /**
185 * Returns all names of properties
186 * @return all names of properties
187 */
188 std::vector<std::string> getPropertyNames();
189
190 /**
191 * Returns all of the properties in PropertyMap
192 * @return all of the properties in PropertyMap
193 */
194 std::vector<GenericData*> getProperties();
195
196 /**
197 * Returns property
198 * @param propName name of property
199 * @return a pointer point to property with propName. If no property named propName
200 * exists, return NULL
201 */
202 GenericData* getPropertyByName(const std::string& propName);
203
204 protected:
205
206 AtomTypeProperties atp;
207 double mass_;
208 std::string name_;
209
210 private:
211 //prevent copy construction and copy assignment, since property map contains
212 //pointers which can not be copied and managered safely, except make the generic data
213 //at PropertyMap as copy on write shared pointer
214 AtomType(const AtomType&);
215 AtomType& operator=(const AtomType& atomType);
216
217
218 PropertyMap properties_;
219
220 };
221
222 struct LJParam {
223 double epsilon;
224 double sigma;
225 int soft_pot;
226 };
227 typedef SimpleTypeData<LJParam> LJParamGenericData;
228
229 struct EAMParam {
230 double latticeConstant;
231 int nrho;
232 double drho;
233 int nr;
234 double dr;
235 double rcut;
236 std::vector<double> rvals;
237 std::vector<double> rhovals;
238 std::vector<double> Frhovals;
239 };
240
241 typedef SimpleTypeData<EAMParam> EAMParamGenericData;
242 }
243
244 #endif