ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Roll.hpp
Revision: 1452
Committed: Mon Aug 23 15:11:36 2004 UTC (19 years, 10 months ago) by tim
File size: 5142 byte(s)
Log Message:
*** empty log message ***

File Contents

# Content
1 #ifndef _ROLL_H_
2 #define _ROLL_H_
3 #include "Rattle.hpp"
4 #include "Vector3d.hpp"
5 ////////////////////////////////////////////////////////////////////////////////
6 //Declaration of DCRollAFunctor
7 ////////////////////////////////////////////////////////////////////////////////
8 class DCRollAFunctor : public DCRattleAFunctor{
9 public:
10 DCRollAFunctor(SimInfo* info) : DCRattleAFunctor(info) {}
11 virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2);
12 virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB) {return consElemHandlerFail;}
13 virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
14 private:
15
16 void calcZeta(ConstraintAtom* consAtom, const Vector3d& bondDir, Vector3d&zeta);
17 void integrate(ConstraintAtom* consAtom, const Vector3d& force);
18
19 void calcZeta(ConstraintRigidBody* consRB, const Vector3d& bondDir, Vector3d& zeta);
20 void integrate(ConstraintRigidBody* consRB, const Vector3d& consForce);
21 void rotationPropagation(StuntDouble* sd, double ji[3]);
22 void rotate(int axes1, int axes2, double angle, double ji[3], double A[3][3]);
23 };
24
25 ////////////////////////////////////////////////////////////////////////////////
26 //Declaration of JCRollAFunctor
27 ////////////////////////////////////////////////////////////////////////////////
28 class JCRollAFunctor : public JCRattleAFunctor{
29 public:
30 JCRollAFunctor(SimInfo* info) : JCRattleAFunctor(info) {}
31 //virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2);
32 //virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB);
33 //virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
34 };
35
36 ////////////////////////////////////////////////////////////////////////////////
37 //Declaration of RollA
38 ////////////////////////////////////////////////////////////////////////////////
39 class RollA : public ConstraintAlgorithm{
40 public:
41 RollA(SimInfo* rhs) : ConstraintAlgorithm(rhs){
42 registerCallback(typeid(DistanceConstraintPair), new DCRollAFunctor(rhs));
43 registerCallback(typeid(JointConstraintPair), new JCRollAFunctor(rhs));
44 }
45 };
46
47 ////////////////////////////////////////////////////////////////////////////////
48 //Declaration of DCRollBFunctor
49 ////////////////////////////////////////////////////////////////////////////////
50 class DCRollBFunctor : public DCRattleBFunctor{
51 public:
52 DCRollBFunctor(SimInfo* info) : DCRattleBFunctor(info) {}
53 virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2){return consElemHandlerFail;}
54 virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB){return consElemHandlerFail;}
55 virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
56 private:
57 //void getZeta(ConstraintAtom* consAtom, const Vector3d& bondDir, Vector3d& zeta);
58 //void integrate(ConstraintAtom* consAtom, const Vector3d& consForce);
59
60 void getZeta(ConstraintRigidBody* consRB, const Vector3d& bondDir, Vector3d& zeta);
61 void integrate(ConstraintRigidBody* consRB, const Vector3d& consForce);
62 };
63
64 ////////////////////////////////////////////////////////////////////////////////
65 //Declaration of JCRollBFunctor
66 ////////////////////////////////////////////////////////////////////////////////
67 class JCRollBFunctor : public JCRattleBFunctor{
68 public:
69 JCRollBFunctor(SimInfo* info) : JCRattleBFunctor(info) {}
70 //virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2);
71 //virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB);
72 //virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
73 };
74
75 ////////////////////////////////////////////////////////////////////////////////
76 //Declaration of RollB
77 ////////////////////////////////////////////////////////////////////////////////
78 class RollB : public ConstraintAlgorithm{
79 public:
80 RollB(SimInfo* rhs) : ConstraintAlgorithm(rhs){
81 registerCallback(typeid(DistanceConstraintPair), new DCRollBFunctor(rhs));
82 registerCallback(typeid(JointConstraintPair), new JCRollBFunctor(rhs));
83 }
84 };
85
86 ////////////////////////////////////////////////////////////////////////////////
87 //Declaration of RollFramework
88 ////////////////////////////////////////////////////////////////////////////////
89 //class RattleAlgorithm will encapsulate preConstraint, RattleA and RattleB
90 //actually, we could use factory pattern to seperate the creation process
91 class RollFramework : public VelVerletConsFramework{
92 public:
93 RollFramework(SimInfo* rhs) : VelVerletConsFramework(rhs){
94 raAlgo = new RollA(rhs);
95 rbAlgo = new RollB(rhs);
96 }
97
98 ~RollFramework(){
99 delete raAlgo;
100 delete rbAlgo;
101 }
102
103 virtual int doConstrainA(){
104 raAlgo->doConstrain();
105 return raAlgo->haveError()? -1 : 1;
106
107 }
108
109 virtual int doConstrainB(){
110 rbAlgo->doConstrain();
111 return rbAlgo->haveError()? -1 : 1;
112
113 }
114 private:
115 RollA* raAlgo;
116 RollB* rbAlgo;
117 };
118 #endif //end ifndef _ROLL_H_

Properties

Name Value
svn:executable *