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

Comparing trunk/OOPSE/libmdtools/Atom.hpp (file contents):
Revision 413 by mmeineke, Wed Mar 26 21:54:49 2003 UTC vs.
Revision 1126 by tim, Tue Apr 20 05:39:38 2004 UTC

# Line 1 | Line 1
1   #ifndef _ATOM_H_
2   #define _ATOM_H_
3  
4 < #include <cstring>
5 < #include <cstdlib>
4 > #include <string.h>
5 > #include <stdlib.h>
6   #include <iostream>
7  
8 < class Atom{
8 > #include "SimState.hpp"
9 > #include "StuntDouble.hpp"
10 > #include "BaseVisitor.hpp"
11 >
12 > class Atom : public StuntDouble {
13   public:
14  
15 <  Atom(int theIndex);
15 >  Atom(int theIndex, SimState* theConfig );
16    virtual ~Atom() {}
17  
18 <  static double* pos; // the position array
15 <  static double* vel; // the velocity array
16 <  static double* frc; // the forc array
17 <  static double* trq; // the torque vector  ( space fixed )
18 <  static double* Amat; // the rotation matrix
19 <  static double* mu; // the dipole moment array
20 <  static double* ul; // the lab frame unit directional vector
21 <  static int nElements;
18 >  virtual void setCoords(void);
19  
20 <  static void createArrays (int the_nElements);
21 <  static void destroyArrays(void);
25 <  void addAtoms(int nAdded, double* Apos, double* Avel, double* Afrc,
26 <                double* Atrq, double* AAmat, double* Amu,
27 <                double* Aul);
28 <  void deleteAtom(int theIndex);
29 <  void deleteRange(int startIndex, int stopIndex);
20 >  void getPos( double theP[3] );
21 >  void setPos( double theP[3] );
22  
23 <  static double* getPosArray( void ) { return pos; }
24 <  static double* getVelArray( void ) { return vel; }
33 <  static double* getFrcArray( void ) { return frc; }
34 <  static double* getTrqArray( void ) { return trq; }
35 <  static double* getAmatArray( void ) { return Amat; }
36 <  static double* getMuArray( void ) { return mu; }
37 <  static double* getUlArray( void ) { return ul; }
38 <  
39 <  double getX() const {return pos[offsetX];}
40 <  double getY() const {return pos[offsetY];}
41 <  double getZ() const {return pos[offsetZ];}
42 <  void setX(double x) {pos[offsetX] = x;}
43 <  void setY(double y) {pos[offsetY] = y;}
44 <  void setZ(double z) {pos[offsetZ] = z;}
45 <  
46 <  double get_vx() const  {return vel[offsetX];}
47 <  double get_vy() const  {return vel[offsetY];}
48 <  double get_vz() const  {return vel[offsetZ];}
49 <  void set_vx(double vx) {vel[offsetX] = vx;}
50 <  void set_vy(double vy) {vel[offsetY] = vy;}
51 <  void set_vz(double vz) {vel[offsetZ] = vz;}
52 <  
53 <  double getFx() const   {return frc[offsetX];}
54 <  double getFy() const   {return frc[offsetY];}
55 <  double getFz() const   {return frc[offsetZ];}
56 <  void addFx(double add) {frc[offsetX] += add;}
57 <  void addFy(double add) {frc[offsetY] += add;}
58 <  void addFz(double add) {frc[offsetZ] += add;}
59 <  virtual void zeroForces() = 0;
23 >  void getVel( double theV[3] );
24 >  void setVel( double theV[3] );
25  
26 <  double getMass() const {return c_mass;}
26 >  void getFrc( double theF[3] );
27 >  void addFrc( double theF[3] );
28 >
29 >  virtual void zeroForces();
30 >
31 >  double getMass() {return c_mass;}
32    void setMass(double mass) {c_mass = mass;}
33    
64  double getSigma() const {return c_sigma;}
65  void setSigma(double sigma) {c_sigma = sigma;}
66
67  double getEpslon() const {return c_epslon;}
68  void setEpslon(double epslon) {c_epslon = epslon;}
69  
70  double getCovalent() const {return c_covalent;}
71  void setCovalent(double covalent) {c_covalent = covalent;}
72  
34    int getIndex() const {return index;}
35    void setIndex(int theIndex);
36 +
37    char *getType() {return c_name;}
38    void setType(char * name) {strcpy(c_name,name);}
39    
# Line 83 | Line 45 | class Atom{ (public)
45    void setGlobalIndex( int info ) { myGlobalIndex = info; }
46   #endif // is_mpi
47  
86  void set_n_hydrogens( int n_h ) {c_n_hyd = n_h;}
87  int get_n_hydrogens() const {return c_n_hyd;}
88
48    void setHasDipole( int value ) { has_dipole = value; }
49    int hasDipole( void ) { return has_dipole; }
50  
51 <  void setLJ( void )        { is_LJ = 1; is_VDW = 0; }
52 <  int isLJ( void )    { return is_LJ; }
51 >  void setHasCharge(int value) {has_charge = value;}
52 >  int hasCharge(void) {return has_charge;}
53  
95  void seVDW( void )        { is_VDW = 1; is_LJ = 0; }
96  int isVDW( void )    { return is_VDW; }
54  
55 <  virtual int isDirectional( void ) = 0;
56 <
100 <
55 >  virtual void accept(BaseVisitor* v) {v->visit(this);}
56 >  
57   protected:
58    
59 +  SimState* myConfig;
60 +
61 +  double* pos; // the position array
62 +  double* vel; // the velocity array
63 +  double* frc; // the forc array
64 +  double* trq; // the torque vector  ( space fixed )
65 +  double* Amat; // the rotation matrix
66 +  double* mu;   // the array of dipole moments
67 +  double* ul;   // the lab frame unit directional vector
68 +
69    double c_mass; /* the mass of the atom in amu */
104  double c_sigma; /* the sigma parameter for van der walls interactions */
105  double c_epslon; /* the esplon parameter for VDW interactions */
106  double c_covalent; // The covalent radius of the atom.
70  
71    int index; /* set the atom's index */
72    int offset; // the atom's offset in the storage array
# Line 115 | Line 78 | class Atom{ (public)
78  
79    char c_name[100]; /* it's name */
80    int ident;  // it's unique numeric identity.
118
119  int c_n_hyd; // the number of hydrogens bonded to the atom
81    
82    int has_dipole; // dipole boolean
83 <  int is_VDW;    // VDW boolean
123 <  int is_LJ;    // LJ boolean
83 >  int has_charge; // charge boolean
84  
85 +  bool hasCoords;
86 +
87   #ifdef IS_MPI
88    int myGlobalIndex;
89   #endif
90    
91   };
92  
131 class GeneralAtom : public Atom{
132
133 public:
134  GeneralAtom(int theIndex): Atom(theIndex){}
135  virtual ~GeneralAtom(){}
136
137  int isDirectional( void ){ return 0; }
138  void zeroForces() {
139    frc[offsetX] = 0.0;
140    frc[offsetY] = 0.0;
141    frc[offsetZ] = 0.0;
142  }
143 };
144
145 class DirectionalAtom : public Atom {
146  
147 public:
148  DirectionalAtom(int theIndex) : Atom(theIndex)
149  {
150    ssdIdentity = 0;
151    sux = 0.0;
152    suy = 0.0;
153    suz = 0.0;
154  }
155  virtual ~DirectionalAtom() {}
156
157  int isDirectional(void) { return 1; }
158  
159  void setSSD( int value) { ssdIdentity = value; }
160  int isSSD(void) {return ssdIdentity; }
161
162  void setA( double the_A[3][3] );
163
164  void setI( double the_I[3][3] );
165
166  void setQ( double the_q[4] );
167  
168  void setEuler( double phi, double theta, double psi );
169  
170  void setSUx( double the_sux ) { sux = the_sux; }
171  void setSUy( double the_suy ) { suy = the_suy; }
172  void setSUz( double the_suz ) { suz = the_suz; }
173
174  void setJx( double the_jx ) { jx = the_jx; }
175  void setJy( double the_jy ) { jy = the_jy; }
176  void setJz( double the_jz ) { jz = the_jz; }
177    
178  void addTx( double the_tx ) { trq[offsetX] += the_tx;}
179  void addTy( double the_ty ) { trq[offsetY] += the_ty;}
180  void addTz( double the_tz ) { trq[offsetZ] += the_tz;}
181
182  void zeroForces() {
183    frc[offsetX] = 0.0;
184    frc[offsetY] = 0.0;
185    frc[offsetZ] = 0.0;
186
187    trq[offsetX] = 0.0;
188    trq[offsetY] = 0.0;
189    trq[offsetZ] = 0.0;
190  }
191
192  double getAxx( void ) { return Amat[Axx]; }
193  double getAxy( void ) { return Amat[Axy]; }
194  double getAxz( void ) { return Amat[Axz]; }
195  
196  double getAyx( void ) { return Amat[Ayx]; }
197  double getAyy( void ) { return Amat[Ayy]; }
198  double getAyz( void ) { return Amat[Ayz]; }
199  
200  double getAzx( void ) { return Amat[Azx]; }
201  double getAzy( void ) { return Amat[Azy]; }
202  double getAzz( void ) { return Amat[Azz]; }
203
204  void getA( double the_A[3][3] ); // get the full rotation matrix
205
206  double getSUx( void ) { return sux; }
207  double getSUy( void ) { return suy; }
208  double getSUz( void ) { return suz; }
209
210  void getU( double the_u[3] ); // get the unit vetor
211  void getQ( double the_q[4] ); // get the quanternions
212
213  double getJx( void ) { return jx; }
214  double getJy( void ) { return jy; }
215  double getJz( void ) { return jz; }
216
217  double getTx( void ) { return trq[offsetX];}
218  double getTy( void ) { return trq[offsetY]; }
219  double getTz( void ) { return trq[offsetZ]; }
220
221  double getIxx( void ) { return Ixx; }
222  double getIxy( void ) { return Ixy; }
223  double getIxz( void ) { return Ixz; }
224  
225  double getIyx( void ) { return Iyx; }
226  double getIyy( void ) { return Iyy; }
227  double getIyz( void ) { return Iyz; }
228  
229  double getIzx( void ) { return Izx; }
230  double getIzy( void ) { return Izy; }
231  double getIzz( void ) { return Izz; }
232
233  double getMu( void ) { return mu[index]; }
234  void setMu( double the_mu ) { mu[index] = the_mu; }
235
236  void lab2Body( double r[3] );
237  void body2Lab( double r[3] );
238  void updateU( void );
239
240 private:
241  int dIndex;
242
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 )
247  double Iyx, Iyy, Iyz;
248  double Izx, Izy, Izz;
249
250  int ssdIdentity; // boolean of whether atom is ssd
251
252 };
253
93   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines