ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/ConstraintElement.hpp
Revision: 1232
Committed: Thu Jun 3 21:51:55 2004 UTC (20 years, 1 month ago) by tim
File size: 5799 byte(s)
Log Message:
new implementation of constraint

File Contents

# User Rev Content
1 tim 1232 #ifndef _CONSTRAINTELEMENT_H_
2     #define _CONSTRAINTELEMENT_H_
3    
4     #include "RigidBody.hpp"
5     #include "Atom.hpp"
6    
7    
8     //class ConstraintElement is designed to not only provide the interface of StuntDouble, but also
9     //neccessary functionality to retrieve old position, old velocity and etc.
10     //First of all, those old data should be stored inside StuntDouble. We decide to store it on StuntDouble's
11     //generic property.
12     ////////////////////////////////////////////////////////////////////////////////
13     //Declaration of ConstraintElement
14     ////////////////////////////////////////////////////////////////////////////////
15     class ConstraintElement{
16     public:
17    
18     virtual ~ConstraintElement() {}
19    
20     //Interface of stunt double
21     bool isAtom() {return refSd->isAtom();}
22     bool isDirectionalAtom() {return refSd->isDirectional();}
23     bool isRigidBody() {return refSd->isRigidBody();}
24    
25     double getMass(void) {return refSd->getMass();}
26    
27     void getPos(double pos[3]) {refSd->getPos(pos);}
28     void setPos(double pos[3]) {refSd->setPos(pos);}
29    
30     void getVel(double vel[3]) {refSd->getVel(vel);}
31     void setVel(double vel[3]) {refSd->setVel(vel);}
32    
33     void getFrc(double frc[3]) {refSd->getFrc(frc);}
34     void addFrc(double frc[3]) {refSd->addFrc(frc);}
35    
36     void getA(double A[3][3]) {refSd->getA(A);}
37     void setA(double A[3][3]) {refSd->setA(A);}
38    
39     void getJ(double j[3]) {refSd->getJ(j);}
40     void setJ(double j[3]) {refSd->setJ(j);}
41    
42     void getQ( double q[4] ) {refSd->getQ(q);}
43     void setQ( double q[4] ) {refSd->setQ(q);}
44    
45     void setType(char* type){refSd->setType(type);}
46     char* getType() {return refSd->getType();}
47    
48     void getTrq(double trq[3]) {refSd->getTrq(trq);}
49     void addTrq(double trq[3]) {refSd->addTrq(trq);}
50    
51     void getI(double I[3][3]) {refSd->getI(I);}
52     void lab2Body(double vec[3]) {refSd->lab2Body(vec);}
53    
54     void getGrad(double grad[6]) {refSd->getGrad(grad);}
55     void setEuler(double phi, double theta, double psi) {refSd->setEuler(phi, theta, psi);}
56     void getEulerAngles(double eulers[3]) {refSd->getEulerAngles(eulers);}
57    
58     bool isLinear() {return refSd->isLinear();}
59     int linearAxis() {return refSd->linearAxis();}
60    
61     double getZangle() {return refSd->getZangle();}
62     void setZangle(double zAngle) {refSd->setZangle(zAngle);}
63     void addZangle(double zAngle) {refSd->addZangle(zAngle);}
64    
65    
66     virtual void getOldPos(double pos[3])=0;
67     virtual void getOldVel(double vel[3])=0;
68     virtual void getOldJ(double j[3])=0;
69     virtual void getOldA(double a[3][3])=0;
70     virtual void getOldQ(double q[4])=0;
71    
72     bool getMoved() {return movedData->getData();}
73     void setMoved(bool status) {movedData->setData(status);}
74    
75     bool getMoving() {return movingData->getData();}
76     void setMoving(bool status) {movingData->setData(status);}
77    
78     virtual void saveOldState() = 0;
79    
80     protected:
81     ConstraintElement(StuntDouble* rhs);
82    
83     StuntDouble* refSd;
84    
85     private:
86     BoolData* movedData;
87     BoolData* movingData;
88    
89     };
90    
91    
92     ////////////////////////////////////////////////////////////////////////////////
93     //Declaration of ConsAtomData
94     ////////////////////////////////////////////////////////////////////////////////
95     struct ConsAtomInfo{
96     double pos[3];
97     double vel[3];
98     double a[3][3];
99     double j[3];
100     double q[4];
101     };
102    
103     class ConsAtomData : public GenericData{
104     public:
105     ConsAtomData() : data(NULL){}
106     ~ConsAtomData(){
107     if(data != NULL)
108     delete data;
109     }
110    
111     ConsAtomInfo* getData() {return data;}
112     void setData(ConsAtomInfo* info) {
113     if (data != NULL)
114     delete data;
115    
116     data = info;
117     }
118    
119     private:
120     ConsAtomInfo* data;
121     };
122     ////////////////////////////////////////////////////////////////////////////////
123     //Declaration of ConstraintElement
124     ////////////////////////////////////////////////////////////////////////////////
125     class ConstraintAtom : public ConstraintElement{
126     public:
127     ConstraintAtom(Atom* rhs);
128    
129     void getOldPos(double pos[3]);
130     void getOldVel(double vel[3]);
131     void getOldJ(double j[3]);
132     void getOldA(double a[3][3]);
133     void getOldQ(double q[4]);
134    
135     Atom* getAtom() {return dynamic_cast<Atom*>(refSd);}
136    
137     virtual void saveOldState();
138    
139     protected:
140     ConsAtomInfo* oldConsAtomInfo;
141    
142     };
143    
144    
145    
146     ////////////////////////////////////////////////////////////////////////////////
147     //Declaration of ConsRbData
148     ////////////////////////////////////////////////////////////////////////////////
149     class ConsRbData : public GenericData{
150     public:
151     ConsRbData() : rb(NULL){}
152     ~ConsRbData(){
153     if (rb != NULL)
154     delete rb;
155     }
156    
157     RigidBody* getData() {return rb;}
158     void setData(RigidBody* rhs) {
159     if (rb != NULL)
160     delete rb;
161     rb = rhs;
162     }
163    
164     private:
165     RigidBody* rb;
166     };
167    
168     ////////////////////////////////////////////////////////////////////////////////
169     //Declaration of ConstraintElement
170     ////////////////////////////////////////////////////////////////////////////////
171     class ConstraintRigidBody : public ConstraintElement{
172     public:
173     ConstraintRigidBody(RigidBody*rhs, int index);
174    
175     void getOldPos(double pos[3]) {oldRb->getPos(pos);}
176     void getOldVel(double vel[3]) {oldRb->getVel(vel);}
177     void getOldJ(double j[3]) {oldRb->getJ(j);}
178     void getOldA(double a[3][3]) {oldRb->getA(a);}
179     void getOldQ(double q[4]) {oldRb->getQ(q);}
180    
181     void getOldAtomPos(double pos[3]) {oldRb->getAtomPos(pos, consAtomIndex);}
182     void getCurAtomPos(double pos[3]) {((RigidBody*)refSd)->getAtomPos(pos, consAtomIndex);}
183    
184     RigidBody* getRigidBody() { return dynamic_cast<RigidBody*>(refSd);}
185    
186     virtual void saveOldState();
187    
188     private:
189     int consAtomIndex;
190     RigidBody* oldRb;
191     };
192     #endif // endif _CONSTRAINTELEMENT_H_

Properties

Name Value
svn:executable *