ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Molecule.hpp
Revision: 1234
Committed: Fri Jun 4 03:15:31 2004 UTC (20 years ago) by tim
File size: 3952 byte(s)
Log Message:
new rattle algorithm is working

File Contents

# Content
1 #ifndef _MOLECULE_H_
2 #define _MOLECULE_H_
3
4 #include <set>
5 #include <vector>
6
7 #include "Atom.hpp"
8 #include "SRI.hpp"
9 #include "MoleculeStamp.hpp"
10 #include "RigidBody.hpp"
11 #include "CutoffGroup.hpp"
12 #include "ConstraintPair.hpp"
13
14 using namespace std;
15
16 typedef struct{
17
18 int stampID; // the ID in the BASS component stamp array
19 int nAtoms; // the number of atoms in the molecule
20 int nBonds; // ... .. .. . .bonds .. .. . . . .
21 int nBends; // . . . . .. . .bends . . . . .. .
22 int nTorsions; // .. . . .. . . torsions . . .. . .
23 int nRigidBodies; // .. .. .. . rigid bodies ... ..
24 int nOriented; // .. . . . .. . oriented atoms . . .
25
26 Atom** myAtoms; // the array of atoms
27 Bond** myBonds; // arrays of all the short range interactions
28 Bend** myBends;
29 Torsion** myTorsions;
30 vector<RigidBody*> myRigidBodies;
31 vector<StuntDouble*> myIntegrableObjects;
32 vector<CutoffGroup*> myCutoffGroups;
33 vector<ConstraintPair*> myConstraintPairs;
34 } molInit;
35
36 class Molecule{
37
38 public:
39
40 Molecule( void );
41 ~Molecule( void );
42
43 void initialize( molInit &theInit );
44
45 void setMyIndex( int theIndex ){ myIndex = theIndex;}
46 int getMyIndex( void ) { return myIndex; }
47
48 int getGlobalIndex( void ) { return globalIndex; }
49 void setGlobalIndex( int theIndex ) { globalIndex = theIndex; }
50
51 int getNAtoms ( void ) {return nAtoms;}
52 int getNBonds ( void ) {return nBonds;}
53 int getNBends ( void ) {return nBends;}
54 int getNTorsions( void ) {return nTorsions;}
55 int getNRigidBodies( void ) {return myRigidBodies.size();}
56 int getNOriented( void ) {return nOriented;}
57 int getNMembers ( void ) {return nMembers;}
58 int getStampID ( void ) {return stampID;}
59
60 Atom** getMyAtoms ( void ) {return myAtoms;}
61 Bond** getMyBonds ( void ) {return myBonds;}
62 Bend** getMyBends ( void ) {return myBends;}
63 Torsion** getMyTorsions( void ) {return myTorsions;}
64 vector<RigidBody*> getMyRigidBodies( void ) {return myRigidBodies;}
65 vector<StuntDouble*>& getIntegrableObjects(void) {return myIntegrableObjects;}
66
67 //beginCutoffGroup return the first group and initialize the iterator
68 CutoffGroup* beginCutoffGroup(vector<CutoffGroup*>::iterator& i){
69 i = myCutoffGroups.begin();
70 return i != myCutoffGroups.end()? *i : NULL;
71 }
72
73 //nextCutoffGroup return next cutoff group based on the iterator
74 CutoffGroup* nextCutoffGroup(vector<CutoffGroup*>::iterator& i){
75 i++;
76 return i != myCutoffGroups.end()? *i : NULL;
77 }
78
79 int getNCutoffGroups() {return nCutoffGroups;}
80
81 int getNConstrains() {return myConstraintPairs.size();}
82 vector<ConstraintPair*>& getConstraintPairs() {return myConstraintPairs;}
83
84
85 void setStampID( int info ) {stampID = info;}
86
87 void calcForces( void );
88 void atoms2rigidBodies( void );
89 double getPotential( void );
90
91 void printMe( void );
92
93 void getCOM( double COM[3] );
94 void moveCOM( double delta[3] );
95 double getCOMvel( double COMvel[3] );
96
97 double getTotalMass();
98
99 private:
100
101 int stampID; // the ID in the BASS component stamp array
102 int nAtoms; // the number of atoms in the molecule
103 int nBonds; // ... .. .. . .bonds .. .. . . . .
104 int nBends; // . . . . .. . .bends . . . . .. .
105 int nTorsions; // .. . . .. . . torsions . . .. . .
106 int nRigidBodies; // .. . . .. .rigid bodies . . .. . .
107 int nOriented; // .. . . . .. . oriented atoms . . .
108 int nMembers; // .. . . . . . .atoms (legacy code) . . .
109 int nCutoffGroups;
110
111 int myIndex; // mostly just for debug (and for making pressure calcs work)
112 int globalIndex;
113
114 Atom** myAtoms; // the array of atoms
115 Bond** myBonds; // arrays of all the short range interactions
116 Bend** myBends;
117 Torsion** myTorsions;
118 vector<RigidBody*> myRigidBodies;
119 vector<StuntDouble*> myIntegrableObjects;
120 vector<CutoffGroup*> myCutoffGroups;
121 vector<ConstraintPair*> myConstraintPairs;
122
123 };
124
125 #endif