ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/headers/Atom.hpp
(Generate patch)

Comparing trunk/mdtools/headers/Atom.hpp (file contents):
Revision 11 by mmeineke, Tue Jul 9 18:40:59 2002 UTC vs.
Revision 213 by mmeineke, Mon Dec 16 21:42:11 2002 UTC

# Line 6 | Line 6 | class Atom{ (public)
6  
7   class Atom{
8   public:
9 <  Atom() {
9 >  Atom(int theIndex) {
10      c_n_hyd = 0;
11      has_dipole = 0;
12      is_VDW = 0;
13      is_LJ = 0;
14 +    index = theIndex;
15 +    offset = 3 * index;
16 +    offsetX = offset;
17 +    offsetY = offset+1;
18 +    offsetZ = offset+2;
19    }
20 <  ~Atom() {}
20 >  virtual ~Atom() {}
21 >
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    
35 <  double getX() const {return c_x;}
36 <  double getY() const {return c_y;}
37 <  double getZ() const {return c_z;}
38 <  void setX(double x) {c_x = x;}
39 <  void setY(double y) {c_y = y;}
40 <  void setZ(double z) {c_z = z;}
35 >  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    
42 <  double get_vx() const {return c_vx;}
43 <  double get_vy() const {return c_vy;}
44 <  double get_vz() const {return c_vz;}
45 <  void set_vx(double vx) {c_vx = vx;}
46 <  void set_vy(double vy) {c_vy = vy;}
47 <  void set_vz(double vz) {c_vz = vz;}
42 >  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    
49 <  double getFx() const {return c_Fx;}
50 <  double getFy() const {return c_Fy;}
51 <  double getFz() const {return c_Fz;}
52 <  void addFx(double add) {c_Fx += add;}
53 <  void addFy(double add) {c_Fy += add;}
54 <  void addFz(double add) {c_Fz += add;}
49 >  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    virtual void zeroForces() = 0;
56  
57    double getMass() const {return c_mass;}
# Line 48 | Line 66 | class Atom{ (public)
66    double getCovalent() const {return c_covalent;}
67    void setCovalent(double covalent) {c_covalent = covalent;}
68    
69 <  int getIndex() const {return c_index;}
70 <  void setIndex(int index) {c_index = index;}
71 <  
69 >  int getIndex() const {return index;}
70 >  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    char *getType() {return c_name;}
79    void setType(char * name) {strcpy(c_name,name);}
80  
# Line 58 | Line 82 | class Atom{ (public)
82    int get_n_hydrogens() const {return c_n_hyd;}
83  
84    void setHasDipole( int value ) { has_dipole = value; }
85 <  short int hasDipole( void ) { return has_dipole; }
85 >  int hasDipole( void ) { return has_dipole; }
86  
87    void setLJ( void )        { is_LJ = 1; is_VDW = 0; }
88 <  short int isLJ( void )    { return is_LJ; }
88 >  int isLJ( void )    { return is_LJ; }
89  
90    void seVDW( void )        { is_VDW = 1; is_LJ = 0; }
91 <  short int isVDW( void )    { return is_VDW; }
91 >  int isVDW( void )    { return is_VDW; }
92  
93    virtual int isDirectional( void ) = 0;
94  
95 +  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   protected:
72  double c_x; /*the atom's position */
73  double c_y;
74  double c_z;
75            
76  double c_vx; /*the atom's velocity */
77  double c_vy;
78  double c_vz;
79            
80  double c_Fx; /* the atom's forces */
81  double c_Fy;
82  double c_Fz;
101    
102    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 <  int c_index; /* set the atom's index */
107 >  int index; /* set the atom's index */
108 >  int offset; // the atom's offset in the storage array
109 >  int offsetX, offsetY, offsetZ;
110  
111    char c_name[100]; /* it's name */
112  
113    int c_n_hyd; // the number of hydrogens bonded to the atom
114    
115 <  short int has_dipole; // dipole boolean
116 <  short int is_VDW;    // VDW boolean
117 <  short int is_LJ;    // LJ boolean
115 >  int has_dipole; // dipole boolean
116 >  int is_VDW;    // VDW boolean
117 >  int is_LJ;    // LJ boolean
118    
119   };
120  
121 +
122 +
123   class GeneralAtom : public Atom{
124  
125   public:
126 <  GeneralAtom(){}
127 <  ~GeneralAtom(){}
126 >  GeneralAtom(int theIndex): Atom(theIndex){}
127 >  virtual ~GeneralAtom(){}
128  
129    int isDirectional( void ){ return 0; }
130    void zeroForces() {
131 <    c_Fx = 0.0; c_Fy = 0.0; c_Fz = 0.0;
131 >    frc[offsetX]   = 0.0;
132 >    frc[offsetY] = 0.0;
133 >    frc[offsetZ] = 0.0;
134    }
135   };
136  
137   class DirectionalAtom : public Atom {
138    
139   public:
140 <  DirectionalAtom() { ssdIdentity = 0; }
141 <  ~DirectionalAtom() {}
140 >  DirectionalAtom(int theIndex) : Atom(theIndex)
141 >  {
142 >    ssdIdentity = 0;
143 >  }
144 >  virtual ~DirectionalAtom() {}
145  
146 +  static void createDArrays(int nElements){
147 +    trq = new double[nElements*3];
148 +  }
149 +  static void destroyDArrays(void){
150 +    delete[] trq;
151 +  }
152 +
153    int isDirectional(void) { return 1; }
154    
155    void setSSD( int value) { ssdIdentity = value; }
# Line 137 | Line 171 | class DirectionalAtom : public Atom { (public)
171    void setJy( double the_jy ) { jy = the_jy; }
172    void setJz( double the_jz ) { jz = the_jz; }
173      
174 <  void addTx( double the_tx ) { tx += the_tx;}
175 <  void addTy( double the_ty ) { ty += the_ty;}
176 <  void addTz( double the_tz ) { tz += the_tz;}
174 >  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  
178    void setMu( double the_mu ) { mu = the_mu; }
179  
180    void zeroForces() {
181 <    c_Fx = 0.0; c_Fy = 0.0; c_Fz = 0.0;
182 <    tx = 0.0; ty = 0.0; tz = 0.0;
181 >    frc[offsetX]   = 0.0;
182 >    frc[offsetY] = 0.0;
183 >    frc[offsetZ] = 0.0;
184 >
185 >    trq[offsetX]   = 0.0;
186 >    trq[offsetY] = 0.0;
187 >    trq[offsetZ] = 0.0;
188    }
189  
190    double getAxx( void ) { return Axx; }
# Line 160 | Line 199 | class DirectionalAtom : public Atom { (public)
199    double getAzy( void ) { return Azy; }
200    double getAzz( void ) { return Azz; }
201  
202 +  void getA( double the_A[3][3] ); // get the full rotation matrix
203 +
204    double getSUx( void ) { return sux; }
205    double getSUy( void ) { return suy; }
206    double getSUz( void ) { return suz; }
# Line 171 | Line 212 | class DirectionalAtom : public Atom { (public)
212    double getJy( void ) { return jy; }
213    double getJz( void ) { return jz; }
214  
215 <  double getTx( void ) { return tx; }
216 <  double getTy( void ) { return ty; }
217 <  double getTz( void ) { return tz; }
215 >  double getTx( void ) { return trq[offsetX];}
216 >  double getTy( void ) { return trq[offsetY]; }
217 >  double getTz( void ) { return trq[offsetZ]; }
218  
219    double getIxx( void ) { return Ixx; }
220    double getIxy( void ) { return Ixy; }
# Line 193 | Line 234 | class DirectionalAtom : public Atom { (public)
234    void body2Lab( double r[3] );
235  
236   private:
237 +  int dIndex;
238  
239 <  double Axx, Axy, Axz;; // the rotational matrix
239 >  double Axx, Axy, Axz; // the rotational matrix
240    double Ayx, Ayy, Ayz;
241    double Azx, Azy, Azz;
242  
243 <  double sux, suy, suz; // the standard unit vector ( body fixed )
244 <  double jx, jy, jz; // the angular momentum vector ( body fixed )
203 <  double tx, ty, tz; // the torque vector           ( space fixed )
243 >  double sux, suy, suz; // the standard unit vector    ( body fixed )
244 >  double jx, jy, jz;    // the angular momentum vector ( body fixed )
245    
246 <  double Ixx, Ixy, Ixz; // the inertial tensor matrix ( body fixed )
246 >  double Ixx, Ixy, Ixz; // the inertial tensor matrix  ( body fixed )
247    double Iyx, Iyy, Iyz;
248    double Izx, Izy, Izz;
249  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines