ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Atom.cpp
Revision: 1118
Committed: Mon Apr 19 03:52:27 2004 UTC (20 years, 2 months ago) by tim
File size: 3185 byte(s)
Log Message:
new implement of quickLate using visitor and composite pattern

File Contents

# User Rev Content
1 mmeineke 561 #include <iostream>
2    
3     using namespace std;
4    
5 mmeineke 670 #include "simError.h"
6 gezelter 409 #include "Atom.hpp"
7    
8 mmeineke 670 Atom::Atom(int theIndex, SimState* theConfig) {
9 gezelter 1097
10     objType = OT_ATOM;
11 mmeineke 670 myConfig = theConfig;
12     hasCoords = false;
13 mmeineke 707
14 gezelter 409 has_dipole = 0;
15    
16     index = theIndex;
17 mmeineke 670 offset = 0;
18 gezelter 409 offsetX = offset;
19     offsetY = offset+1;
20     offsetZ = offset+2;
21    
22 mmeineke 670 Axx = 0;
23 gezelter 409 Axy = Axx+1;
24     Axz = Axx+2;
25    
26     Ayx = Axx+3;
27     Ayy = Axx+4;
28     Ayz = Axx+5;
29    
30     Azx = Axx+6;
31     Azy = Axx+7;
32     Azz = Axx+8;
33     }
34    
35 mmeineke 670 void Atom::setIndex(int theIndex) {
36     index = theIndex;
37     }
38 mmeineke 413
39 mmeineke 670 void Atom::setCoords(void){
40    
41     if( myConfig->isAllocated() ){
42    
43     myConfig->getAtomPointers( index,
44     &pos,
45     &vel,
46     &frc,
47     &trq,
48     &Amat,
49     &mu,
50     &ul );
51 gezelter 409 }
52 mmeineke 670 else{
53     sprintf( painCave.errMsg,
54     "Attempted to set Atom %d coordinates with an unallocated "
55 mmeineke 787 "SimState object.\n", index );
56 mmeineke 670 painCave.isFatal = 1;
57     simError();
58     }
59 gezelter 1097
60 mmeineke 670 hasCoords = true;
61 gezelter 1097
62 gezelter 409 }
63    
64 mmeineke 599 void Atom::getPos( double theP[3] ){
65    
66 mmeineke 670 if( hasCoords ){
67     theP[0] = pos[offsetX];
68     theP[1] = pos[offsetY];
69     theP[2] = pos[offsetZ];
70     }
71     else{
72    
73     sprintf( painCave.errMsg,
74     "Attempt to get Pos for atom %d before coords set.\n",
75     index );
76     painCave.isFatal = 1;
77     simError();
78     }
79 mmeineke 599 }
80    
81     void Atom::setPos( double theP[3] ){
82 gezelter 1097
83 mmeineke 670 if( hasCoords ){
84     pos[offsetX] = theP[0];
85     pos[offsetY] = theP[1];
86     pos[offsetZ] = theP[2];
87     }
88     else{
89    
90     sprintf( painCave.errMsg,
91     "Attempt to set Pos for atom %d before coords set.\n",
92     index );
93     painCave.isFatal = 1;
94     simError();
95     }
96 mmeineke 599 }
97    
98     void Atom::getVel( double theV[3] ){
99    
100 mmeineke 670 if( hasCoords ){
101     theV[0] = vel[offsetX];
102     theV[1] = vel[offsetY];
103     theV[2] = vel[offsetZ];
104     }
105     else{
106    
107     sprintf( painCave.errMsg,
108     "Attempt to get vel for atom %d before coords set.\n",
109     index );
110     painCave.isFatal = 1;
111     simError();
112     }
113    
114 mmeineke 599 }
115    
116     void Atom::setVel( double theV[3] ){
117    
118 mmeineke 670 if( hasCoords ){
119     vel[offsetX] = theV[0];
120     vel[offsetY] = theV[1];
121     vel[offsetZ] = theV[2];
122     }
123     else{
124    
125     sprintf( painCave.errMsg,
126     "Attempt to set vel for atom %d before coords set.\n",
127     index );
128     painCave.isFatal = 1;
129     simError();
130     }
131 mmeineke 599 }
132    
133     void Atom::getFrc( double theF[3] ){
134    
135 mmeineke 670 if( hasCoords ){
136     theF[0] = frc[offsetX];
137     theF[1] = frc[offsetY];
138     theF[2] = frc[offsetZ];
139     }
140     else{
141    
142     sprintf( painCave.errMsg,
143     "Attempt to get frc for atom %d before coords set.\n",
144     index );
145     painCave.isFatal = 1;
146     simError();
147     }
148 mmeineke 599 }
149    
150     void Atom::addFrc( double theF[3] ){
151    
152 mmeineke 670 if( hasCoords ){
153     frc[offsetX] += theF[0];
154     frc[offsetY] += theF[1];
155     frc[offsetZ] += theF[2];
156     }
157     else{
158    
159     sprintf( painCave.errMsg,
160     "Attempt to add frc for atom %d before coords set.\n",
161     index );
162     painCave.isFatal = 1;
163     simError();
164     }
165 mmeineke 599 }
166 mmeineke 670
167    
168 gezelter 1097 void Atom::zeroForces( void ){
169 mmeineke 670
170     if( hasCoords ){
171     frc[offsetX] = 0.0;
172     frc[offsetY] = 0.0;
173     frc[offsetZ] = 0.0;
174     }
175     else{
176    
177     sprintf( painCave.errMsg,
178     "Attempt to zero frc for atom %d before coords set.\n",
179     index );
180     painCave.isFatal = 1;
181     simError();
182     }
183     }
184 tim 1118
185     void Atom::accept(BaseVisitor* v){
186     v->visit(this);
187     }
188