ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/SHAPES/RigidBody.hpp
Revision: 1281
Committed: Mon Jun 21 13:38:55 2004 UTC (20 years ago) by chrisfen
File size: 2089 byte(s)
Log Message:
Now calculates energies and builds the grid files.  There are still bugs, but
it compiles and runs...

File Contents

# User Rev Content
1 gezelter 1271 #ifndef __RIGIDBODY_HPP__
2     #define __RIGIDBODY_HPP__
3    
4     #include <vector>
5     using namespace std;
6    
7     class VDWAtom;
8    
9     typedef struct {
10     double vec[3];
11     double& operator[](int index) {return vec[index];}
12     } vec3;
13    
14     typedef struct {
15     double mat[3][3];
16     double* operator[](int index) {return mat[index];}
17     } mat3x3;
18    
19     class RigidBody {
20    
21     public:
22    
23     RigidBody();
24     virtual ~RigidBody();
25    
26     void addAtom(VDWAtom* at);
27    
28     void getPos( double theP[3] );
29     void setPos( double theP[3] );
30    
31     virtual bool isLinear() {return is_linear;}
32     virtual int linearAxis() {return linear_axis;}
33    
34     double getMass( void ) { return mass; }
35    
36     void setEuler( double phi, double theta, double psi );
37     void getQ( double the_q[4] ); // get the quanternions
38     void setQ( double the_q[4] );
39    
40     void getA( double the_A[3][3] ); // get the full rotation matrix
41     void setA( double the_A[3][3] );
42    
43     void getI( double the_I[3][3] );
44     void lab2Body( double r[3] );
45     void body2Lab( double r[3] );
46    
47     void calcRefCoords( void );
48 chrisfen 1276 void doEulerToRotMat(double euler[3], double myA[3][3] );
49 gezelter 1271 void updateAtoms( void );
50    
51     void getGrad(double gradient[6] );
52     void getEulerAngles( double myEuler[3] );
53    
54     double max(double x, double y);
55     double min(double x, double y);
56 chrisfen 1276
57     double findMaxExtent( void );
58 gezelter 1271
59     // utility routines
60    
61     void findCOM( void );
62    
63     vector<VDWAtom*> getAtoms() { return myAtoms;}
64     int getNumAtoms() {return myAtoms.size();}
65    
66     void getAtomPos(double theP[3], int index);
67     void getAtomRefCoor(double pos[3], int index);
68 chrisfen 1281 double getAtomRpar(int index);
69     double getAtomEps(int index);
70    
71 gezelter 1271 protected:
72    
73     double mass; // the total mass
74     double pos[3]; // the position array (center of mass)
75     double A[3][3]; // the rotation matrix
76     double I[3][3]; // the inertial tensor (body fixed)
77     double sU[3][3]; // the standard unit vectors (body fixed)
78    
79     bool is_linear;
80     int linear_axis;
81     double momIntTol;
82    
83     vector<VDWAtom*> myAtoms; // the vector of atoms
84     vector<vec3> refCoords;
85     vector<mat3x3> refOrients;
86    
87     char rbName[100]; //it will eventually be converted into string
88     };
89    
90     #endif