ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Atom.hpp
Revision: 670
Committed: Thu Aug 7 21:47:18 2003 UTC (20 years, 11 months ago) by mmeineke
File size: 6112 byte(s)
Log Message:
switched SimInfo to use a system configuration from SimState rather than arrays from Atom

File Contents

# User Rev Content
1 mmeineke 377 #ifndef _ATOM_H_
2     #define _ATOM_H_
3    
4     #include <cstring>
5     #include <cstdlib>
6     #include <iostream>
7    
8 mmeineke 670 #include "SimState.hpp"
9    
10 mmeineke 377 class Atom{
11     public:
12    
13 mmeineke 670 Atom(int theIndex, SimState* theConfig );
14 gezelter 409 virtual ~Atom() {}
15 mmeineke 377
16 mmeineke 670 void setCoords(void);
17 mmeineke 377
18 mmeineke 670 // void addAtoms(int nAdded, double* Apos, double* Avel, double* Afrc,
19     // double* Atrq, double* AAmat, double* Amu,
20     // double* Aul);
21     // void deleteAtom(int theIndex);
22     // void deleteRange(int startIndex, int stopIndex);
23 mmeineke 377
24 mmeineke 599 void getPos( double theP[3] );
25     void setPos( double theP[3] );
26    
27     void getVel( double theV[3] );
28     void setVel( double theV[3] );
29    
30     void getFrc( double theF[3] );
31     void addFrc( double theF[3] );
32    
33 mmeineke 377 virtual void zeroForces() = 0;
34    
35     double getMass() const {return c_mass;}
36     void setMass(double mass) {c_mass = mass;}
37 chuckv 669
38     double getEamRcut() const {return myEamRcut;}
39     void setEamRcut(double eamRcut) {myEamRcut = eamRcut;}
40 mmeineke 377
41     double getSigma() const {return c_sigma;}
42     void setSigma(double sigma) {c_sigma = sigma;}
43    
44     double getEpslon() const {return c_epslon;}
45     void setEpslon(double epslon) {c_epslon = epslon;}
46    
47     double getCovalent() const {return c_covalent;}
48     void setCovalent(double covalent) {c_covalent = covalent;}
49    
50     int getIndex() const {return index;}
51 gezelter 409 void setIndex(int theIndex);
52 mmeineke 377 char *getType() {return c_name;}
53     void setType(char * name) {strcpy(c_name,name);}
54    
55     int getIdent( void ) { return ident; }
56     void setIdent( int info ) { ident = info; }
57    
58     #ifdef IS_MPI
59     int getGlobalIndex( void ) { return myGlobalIndex; }
60     void setGlobalIndex( int info ) { myGlobalIndex = info; }
61     #endif // is_mpi
62    
63     void set_n_hydrogens( int n_h ) {c_n_hyd = n_h;}
64     int get_n_hydrogens() const {return c_n_hyd;}
65    
66     void setHasDipole( int value ) { has_dipole = value; }
67     int hasDipole( void ) { return has_dipole; }
68    
69     void setLJ( void ) { is_LJ = 1; is_VDW = 0; }
70     int isLJ( void ) { return is_LJ; }
71    
72     void seVDW( void ) { is_VDW = 1; is_LJ = 0; }
73     int isVDW( void ) { return is_VDW; }
74    
75 chuckv 631 void setEAM( void ) { is_EAM = 1; }
76     int isEAM( void ) { return is_EAM; }
77    
78 mmeineke 377 virtual int isDirectional( void ) = 0;
79    
80    
81     protected:
82    
83 mmeineke 670 SimState* myConfig;
84    
85     double* pos; // the position array
86     double* vel; // the velocity array
87     double* frc; // the forc array
88     double* trq; // the torque vector ( space fixed )
89     double* Amat; // the rotation matrix
90     double* mu; // the array of dipole moments
91     double* ul; // the lab frame unit directional vector
92    
93 mmeineke 377 double c_mass; /* the mass of the atom in amu */
94     double c_sigma; /* the sigma parameter for van der walls interactions */
95     double c_epslon; /* the esplon parameter for VDW interactions */
96     double c_covalent; // The covalent radius of the atom.
97    
98 chuckv 669 double myEamRcut; // Atom rcut for eam defined by the forcefield.
99    
100 mmeineke 377 int index; /* set the atom's index */
101     int offset; // the atom's offset in the storage array
102     int offsetX, offsetY, offsetZ;
103    
104     int Axx, Axy, Axz; // the rotational matrix indices
105     int Ayx, Ayy, Ayz;
106     int Azx, Azy, Azz;
107    
108     char c_name[100]; /* it's name */
109     int ident; // it's unique numeric identity.
110    
111     int c_n_hyd; // the number of hydrogens bonded to the atom
112    
113     int has_dipole; // dipole boolean
114     int is_VDW; // VDW boolean
115     int is_LJ; // LJ boolean
116 chuckv 631 int is_EAM; //EAM boolean
117 mmeineke 377
118 mmeineke 670 bool hasCoords;
119    
120 mmeineke 377 #ifdef IS_MPI
121     int myGlobalIndex;
122     #endif
123    
124     };
125    
126     class GeneralAtom : public Atom{
127    
128     public:
129 mmeineke 670 GeneralAtom(int theIndex, SimState* theConfig): Atom(theIndex, theConfig){}
130 mmeineke 377 virtual ~GeneralAtom(){}
131    
132     int isDirectional( void ){ return 0; }
133 mmeineke 670 void zeroForces( void );
134 mmeineke 377 };
135    
136     class DirectionalAtom : public Atom {
137    
138     public:
139 mmeineke 670 DirectionalAtom(int theIndex, SimState* theConfig) : Atom(theIndex,
140     theConfig)
141 mmeineke 377 {
142     ssdIdentity = 0;
143     sux = 0.0;
144     suy = 0.0;
145     suz = 0.0;
146     }
147     virtual ~DirectionalAtom() {}
148    
149 mmeineke 597 void printAmatIndex( void );
150    
151 mmeineke 377 int isDirectional(void) { return 1; }
152    
153     void setSSD( int value) { ssdIdentity = value; }
154     int isSSD(void) {return ssdIdentity; }
155    
156    
157     void setEuler( double phi, double theta, double psi );
158 mmeineke 599
159     double getSUx( void ) { return sux; }
160     double getSUy( void ) { return suy; }
161     double getSUz( void ) { return suz; }
162 mmeineke 377
163     void setSUx( double the_sux ) { sux = the_sux; }
164     void setSUy( double the_suy ) { suy = the_suy; }
165     void setSUz( double the_suz ) { suz = the_suz; }
166    
167 mmeineke 670 void zeroForces();
168 mmeineke 377
169     void getA( double the_A[3][3] ); // get the full rotation matrix
170 mmeineke 599 void setA( double the_A[3][3] );
171 mmeineke 377
172 mmeineke 599 void getU( double the_u[3] ); // get the unit vetor
173     void updateU( void );
174 mmeineke 377
175     void getQ( double the_q[4] ); // get the quanternions
176 mmeineke 599 void setQ( double the_q[4] );
177 mmeineke 377
178 mmeineke 599 void getJ( double theJ[3] );
179     void setJ( double theJ[3] );
180    
181 mmeineke 377 double getJx( void ) { return jx; }
182     double getJy( void ) { return jy; }
183     double getJz( void ) { return jz; }
184    
185 mmeineke 599 void setJx( double the_jx ) { jx = the_jx; }
186     void setJy( double the_jy ) { jy = the_jy; }
187     void setJz( double the_jz ) { jz = the_jz; }
188    
189     void getTrq( double theT[3] );
190     void addTrq( double theT[3] );
191    
192 gezelter 611 // double getTx( void ) { return trq[offsetX];}
193     // double getTy( void ) { return trq[offsetY]; }
194     // double getTz( void ) { return trq[offsetZ]; }
195 mmeineke 377
196 mmeineke 599 void setI( double the_I[3][3] );
197     void getI( double the_I[3][3] );
198    
199 mmeineke 377 double getIxx( void ) { return Ixx; }
200     double getIxy( void ) { return Ixy; }
201     double getIxz( void ) { return Ixz; }
202    
203     double getIyx( void ) { return Iyx; }
204     double getIyy( void ) { return Iyy; }
205     double getIyz( void ) { return Iyz; }
206    
207     double getIzx( void ) { return Izx; }
208     double getIzy( void ) { return Izy; }
209     double getIzz( void ) { return Izz; }
210    
211 mmeineke 670 double getMu( void );
212     void setMu( double the_mu );
213 mmeineke 377
214     void lab2Body( double r[3] );
215     void body2Lab( double r[3] );
216    
217 mmeineke 599
218 mmeineke 377 private:
219     int dIndex;
220    
221     double sux, suy, suz; // the standard unit vector ( body fixed )
222     double jx, jy, jz; // the angular momentum vector ( body fixed )
223    
224     double Ixx, Ixy, Ixz; // the inertial tensor matrix ( body fixed )
225     double Iyx, Iyy, Iyz;
226     double Izx, Izy, Izz;
227    
228     int ssdIdentity; // boolean of whether atom is ssd
229    
230     };
231    
232     #endif