ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/headers/Atom.hpp
Revision: 213
Committed: Mon Dec 16 21:42:11 2002 UTC (21 years, 7 months ago) by mmeineke
File size: 6905 byte(s)
Log Message:
finishing work on making DumpWriter parrallel

File Contents

# User Rev Content
1 mmeineke 10 #ifndef _ATOM_H_
2     #define _ATOM_H_
3    
4     #include <cstring>
5     #include <iostream>
6    
7     class Atom{
8     public:
9 mmeineke 143 Atom(int theIndex) {
10 mmeineke 10 c_n_hyd = 0;
11     has_dipole = 0;
12     is_VDW = 0;
13     is_LJ = 0;
14 mmeineke 143 index = theIndex;
15 mmeineke 189 offset = 3 * index;
16 mmeineke 190 offsetX = offset;
17     offsetY = offset+1;
18     offsetZ = offset+2;
19 mmeineke 10 }
20 mmeineke 117 virtual ~Atom() {}
21 mmeineke 143
22     static void createArrays (int nElements) {
23     pos = new double[nElements*3];
24     vel = new double[nElements*3];
25     frc = new double[nElements*3];
26     trq = new double[nElements*3];
27     }
28     static void destroyArrays(void) {
29     delete[] pos;
30     delete[] vel;
31     delete[] frc;
32     delete[] trq;
33     }
34 mmeineke 10
35 mmeineke 190 double getX() const {return pos[offsetX];}
36     double getY() const {return pos[offsetY];}
37     double getZ() const {return pos[offsetZ];}
38     void setX(double x) {pos[offsetX] = x;}
39     void setY(double y) {pos[offsetY] = y;}
40     void setZ(double z) {pos[offsetZ] = z;}
41 mmeineke 10
42 mmeineke 190 double get_vx() const {return vel[offsetX];}
43     double get_vy() const {return vel[offsetY];}
44     double get_vz() const {return vel[offsetZ];}
45     void set_vx(double vx) {vel[offsetX] = vx;}
46     void set_vy(double vy) {vel[offsetY] = vy;}
47     void set_vz(double vz) {vel[offsetZ] = vz;}
48 mmeineke 10
49 mmeineke 190 double getFx() const {return frc[offsetX];}
50     double getFy() const {return frc[offsetY];}
51     double getFz() const {return frc[offsetZ];}
52     void addFx(double add) {frc[offsetX] += add;}
53     void addFy(double add) {frc[offsetY] += add;}
54     void addFz(double add) {frc[offsetZ] += add;}
55 mmeineke 10 virtual void zeroForces() = 0;
56    
57     double getMass() const {return c_mass;}
58     void setMass(double mass) {c_mass = mass;}
59    
60     double getSigma() const {return c_sigma;}
61     void setSigma(double sigma) {c_sigma = sigma;}
62    
63     double getEpslon() const {return c_epslon;}
64     void setEpslon(double epslon) {c_epslon = epslon;}
65    
66     double getCovalent() const {return c_covalent;}
67     void setCovalent(double covalent) {c_covalent = covalent;}
68    
69 mmeineke 143 int getIndex() const {return index;}
70 mmeineke 190 void setIndex(int theIndex) {
71     index = theIndex;
72     offset = index*3;
73     offsetX = offset;
74     offsetY = offset+1;
75     offsetZ = offset+2;
76     }
77    
78 mmeineke 10 char *getType() {return c_name;}
79     void setType(char * name) {strcpy(c_name,name);}
80    
81     void set_n_hydrogens( int n_h ) {c_n_hyd = n_h;}
82     int get_n_hydrogens() const {return c_n_hyd;}
83    
84     void setHasDipole( int value ) { has_dipole = value; }
85 chuckv 134 int hasDipole( void ) { return has_dipole; }
86 mmeineke 10
87     void setLJ( void ) { is_LJ = 1; is_VDW = 0; }
88 chuckv 134 int isLJ( void ) { return is_LJ; }
89 mmeineke 10
90     void seVDW( void ) { is_VDW = 1; is_LJ = 0; }
91 chuckv 134 int isVDW( void ) { return is_VDW; }
92 mmeineke 10
93     virtual int isDirectional( void ) = 0;
94    
95 mmeineke 143 static double* pos; // the position array
96     static double* vel; // the velocity array
97     static double* frc; // the forc array
98     static double* trq; // the torque vector ( space fixed )
99    
100 mmeineke 184 protected:
101    
102 mmeineke 10 double c_mass; /* the mass of the atom in amu */
103     double c_sigma; /* the sigma parameter for van der walls interactions */
104     double c_epslon; /* the esplon parameter for VDW interactions */
105     double c_covalent; // The covalent radius of the atom.
106    
107 mmeineke 143 int index; /* set the atom's index */
108 mmeineke 189 int offset; // the atom's offset in the storage array
109 mmeineke 213 int offsetX, offsetY, offsetZ;
110 mmeineke 10
111     char c_name[100]; /* it's name */
112    
113     int c_n_hyd; // the number of hydrogens bonded to the atom
114    
115 chuckv 134 int has_dipole; // dipole boolean
116     int is_VDW; // VDW boolean
117     int is_LJ; // LJ boolean
118 mmeineke 10
119     };
120    
121 mmeineke 184
122    
123 mmeineke 10 class GeneralAtom : public Atom{
124    
125     public:
126 mmeineke 143 GeneralAtom(int theIndex): Atom(theIndex){}
127 mmeineke 117 virtual ~GeneralAtom(){}
128 mmeineke 10
129     int isDirectional( void ){ return 0; }
130     void zeroForces() {
131 mmeineke 190 frc[offsetX] = 0.0;
132     frc[offsetY] = 0.0;
133     frc[offsetZ] = 0.0;
134 mmeineke 10 }
135     };
136    
137     class DirectionalAtom : public Atom {
138    
139     public:
140 mmeineke 143 DirectionalAtom(int theIndex) : Atom(theIndex)
141     {
142     ssdIdentity = 0;
143     }
144 mmeineke 117 virtual ~DirectionalAtom() {}
145 mmeineke 10
146 mmeineke 143 static void createDArrays(int nElements){
147     trq = new double[nElements*3];
148     }
149     static void destroyDArrays(void){
150     delete[] trq;
151     }
152    
153 mmeineke 10 int isDirectional(void) { return 1; }
154    
155     void setSSD( int value) { ssdIdentity = value; }
156     int isSSD(void) {return ssdIdentity; }
157    
158     void setA( double the_A[3][3] );
159    
160     void setI( double the_I[3][3] );
161    
162     void setQ( double the_q[4] );
163    
164     void setEuler( double phi, double theta, double psi );
165    
166     void setSUx( double the_sux ) { sux = the_sux; }
167     void setSUy( double the_suy ) { suy = the_suy; }
168     void setSUz( double the_suz ) { suz = the_suz; }
169    
170     void setJx( double the_jx ) { jx = the_jx; }
171     void setJy( double the_jy ) { jy = the_jy; }
172     void setJz( double the_jz ) { jz = the_jz; }
173    
174 mmeineke 190 void addTx( double the_tx ) { trq[offsetX] += the_tx;}
175     void addTy( double the_ty ) { trq[offsetY] += the_ty;}
176     void addTz( double the_tz ) { trq[offsetZ] += the_tz;}
177 mmeineke 10
178     void setMu( double the_mu ) { mu = the_mu; }
179    
180     void zeroForces() {
181 mmeineke 190 frc[offsetX] = 0.0;
182     frc[offsetY] = 0.0;
183     frc[offsetZ] = 0.0;
184 mmeineke 143
185 mmeineke 190 trq[offsetX] = 0.0;
186     trq[offsetY] = 0.0;
187     trq[offsetZ] = 0.0;
188 mmeineke 10 }
189    
190     double getAxx( void ) { return Axx; }
191     double getAxy( void ) { return Axy; }
192     double getAxz( void ) { return Axz; }
193    
194     double getAyx( void ) { return Ayx; }
195     double getAyy( void ) { return Ayy; }
196     double getAyz( void ) { return Ayz; }
197    
198     double getAzx( void ) { return Azx; }
199     double getAzy( void ) { return Azy; }
200     double getAzz( void ) { return Azz; }
201    
202 mmeineke 30 void getA( double the_A[3][3] ); // get the full rotation matrix
203    
204 mmeineke 10 double getSUx( void ) { return sux; }
205     double getSUy( void ) { return suy; }
206     double getSUz( void ) { return suz; }
207    
208     void getU( double the_u[3] ); // get the unit vector
209     void getQ( double the_q[4] ); // get the quanternions
210    
211     double getJx( void ) { return jx; }
212     double getJy( void ) { return jy; }
213     double getJz( void ) { return jz; }
214    
215 mmeineke 190 double getTx( void ) { return trq[offsetX];}
216     double getTy( void ) { return trq[offsetY]; }
217     double getTz( void ) { return trq[offsetZ]; }
218 mmeineke 10
219     double getIxx( void ) { return Ixx; }
220     double getIxy( void ) { return Ixy; }
221     double getIxz( void ) { return Ixz; }
222    
223     double getIyx( void ) { return Iyx; }
224     double getIyy( void ) { return Iyy; }
225     double getIyz( void ) { return Iyz; }
226    
227     double getIzx( void ) { return Izx; }
228     double getIzy( void ) { return Izy; }
229     double getIzz( void ) { return Izz; }
230    
231     double getMu( void ) { return mu; }
232    
233     void lab2Body( double r[3] );
234     void body2Lab( double r[3] );
235    
236     private:
237 mmeineke 143 int dIndex;
238 mmeineke 10
239 chuckv 134 double Axx, Axy, Axz; // the rotational matrix
240 mmeineke 10 double Ayx, Ayy, Ayz;
241     double Azx, Azy, Azz;
242    
243 mmeineke 143 double sux, suy, suz; // the standard unit vector ( body fixed )
244     double jx, jy, jz; // the angular momentum vector ( body fixed )
245 mmeineke 10
246 mmeineke 143 double Ixx, Ixy, Ixz; // the inertial tensor matrix ( body fixed )
247 mmeineke 10 double Iyx, Iyy, Iyz;
248     double Izx, Izy, Izz;
249    
250     double mu; // the magnitude of the dipole moment
251    
252     int ssdIdentity; // boolean of whether atom is ssd
253    
254     };
255    
256     #endif