ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Atom.cpp
Revision: 410
Committed: Wed Mar 26 21:23:00 2003 UTC (21 years, 3 months ago) by gezelter
File size: 4347 byte(s)
Log Message:
Fixes in Atom and Exclude list

File Contents

# User Rev Content
1 gezelter 409 #include "Atom.hpp"
2    
3     Atom::Atom(int theIndex) {
4     c_n_hyd = 0;
5     has_dipole = 0;
6     is_VDW = 0;
7     is_LJ = 0;
8    
9     index = theIndex;
10     offset = 3 * index;
11     offsetX = offset;
12     offsetY = offset+1;
13     offsetZ = offset+2;
14    
15     Axx = index*9;
16     Axy = Axx+1;
17     Axz = Axx+2;
18    
19     Ayx = Axx+3;
20     Ayy = Axx+4;
21     Ayz = Axx+5;
22    
23     Azx = Axx+6;
24     Azy = Axx+7;
25     Azz = Axx+8;
26     }
27    
28     void Atom::createArrays (int nElements) {
29     int i;
30    
31     pos = new double[nElements*3];
32     vel = new double[nElements*3];
33     frc = new double[nElements*3];
34     trq = new double[nElements*3];
35     Amat = new double[nElements*9];
36     mu = new double[nElements];
37     ul = new double[nElements*3];
38    
39     // init directional values to zero
40    
41     for( i=0; i<nElements; i++){
42     trq[i] = 0.0;
43     trq[i+1] = 0.0;
44     trq[i+2] = 0.0;
45    
46     Amat[i] = 1.0;
47     Amat[i+1] = 0.0;
48     Amat[i+2] = 0.0;
49    
50     Amat[i+3] = 0.0;
51     Amat[i+4] = 1.0;
52     Amat[i+5] = 0.0;
53    
54     Amat[i+6] = 0.0;
55     Amat[i+7] = 0.0;
56     Amat[i+8] = 1.0;
57    
58     mu[i] = 0.0;
59    
60     ul[i] = 1.0;
61     ul[i+1] = 0.0;
62     ul[i+2] = 0.0;
63     }
64     }
65    
66     void Atom::destroyArrays(void) {
67     delete[] pos;
68     delete[] vel;
69     delete[] frc;
70     delete[] trq;
71     delete[] Amat;
72     delete[] mu;
73     }
74    
75     void Atom::setIndex(int theIndex) {
76     index = theIndex;
77     offset = index*3;
78     offsetX = offset;
79     offsetY = offset+1;
80     offsetZ = offset+2;
81    
82     Axx = index*9;
83     Axy = Axx+1;
84     Axz = Axx+2;
85    
86     Ayx = Axx+3;
87     Ayy = Axx+4;
88     Ayz = Axx+5;
89    
90     Azx = Axx+6;
91     Azy = Axx+7;
92     Azz = Axx+8;
93     }
94    
95     void Atom::addAtoms(int nAdded, double* Apos, double* Avel, double* Afrc,
96     double* Atrq, double* AAmat, double* Amu,
97     double* Aul) {
98    
99     int nNew = nElements+nAdded;
100    
101     double* new_pos = new double[nNew*3];
102     double* new_vel = new double[nNew*3];
103     double* new_frc = new double[nNew*3];
104     double* new_trq = new double[nNew*3];
105     double* new_Amat = new double[nNew*9];
106     double* new_mu = new double[nNew];
107     double* new_ul = new double[nNew*3];
108     int i, j;
109    
110     for (i = 0; i < 3*nElements; i++) {
111     new_pos[i] = pos[i];
112     new_vel[i] = vel[i];
113     new_frc[i] = frc[i];
114     new_trq[i] = trq[i];
115     new_ul[i] = ul[i];
116     }
117    
118     for(i = 0; i < 3*nAdded; i++) {
119     j = i + 3*nElements;
120 gezelter 410 new_pos[j] = Apos[i];
121     new_vel[j] = Avel[i];
122     new_frc[j] = Afrc[i];
123     new_trq[j] = Atrq[i];
124     new_ul[j] = Aul[i];
125 gezelter 409 }
126    
127     for (i = 0; i < 9*nElements; i++) {
128     new_Amat[i] = Amat[i];
129     }
130    
131     for(i = 0; i < 9*nAdded; i++) {
132     j = i + 9*nElements;
133 gezelter 410 new_Amat[j] = AAmat[i];
134 gezelter 409 }
135    
136     for (i = 0; i < nElements; i++) {
137     new_mu[i] = mu[i];
138     }
139    
140     for(i = 0; i < nAdded; i++) {
141     j = i + nElements;
142 gezelter 410 new_mu[j] = Amu[i];
143 gezelter 409 }
144    
145     delete[] pos;
146     delete[] vel;
147     delete[] frc;
148     delete[] trq;
149     delete[] Amat;
150     delete[] mu;
151    
152     pos = new_pos;
153     vel = new_vel;
154     frc = new_frc;
155     trq = new_trq;
156     ul = new_ul;
157     Amat = new_Amat;
158     mu = new_mu;
159    
160     nElements = nNew;
161     }
162    
163     void Atom::deleteAtom(int theIndex) {
164     deleteRange(theIndex, theIndex);
165     }
166    
167     void Atom::deleteRange(int startIndex, int stopIndex) {
168    
169     int nNew = nElements-(stopIndex-startIndex+1);
170    
171     double* new_pos = new double[nNew*3];
172     double* new_vel = new double[nNew*3];
173     double* new_frc = new double[nNew*3];
174     double* new_trq = new double[nNew*3];
175     double* new_Amat = new double[nNew*9];
176     double* new_mu = new double[nNew];
177     double* new_ul = new double[nNew*3];
178     int i, j;
179    
180     for (i = 0; i < 3*startIndex; i++) {
181     new_pos[i] = pos[i];
182     new_vel[i] = vel[i];
183     new_frc[i] = frc[i];
184     new_trq[i] = trq[i];
185     new_ul[i] = ul[i];
186     }
187    
188     for(i = 3*(stopIndex + 1); i < 3*nElements; i++) {
189     j = i - 3*startIndex + 1;
190     new_pos[j] = pos[i];
191     new_vel[j] = vel[i];
192     new_frc[j] = frc[i];
193     new_trq[j] = trq[i];
194     new_ul[j] = ul[i];
195     }
196    
197     for (i = 0; i < 9*startIndex; i++) {
198     new_Amat[i] = Amat[i];
199     }
200    
201     for(i = 9*(stopIndex + 1); i < 9*nElements; i++) {
202     j = i - 9*startIndex + 1;
203     new_Amat[j] = Amat[i];
204     }
205    
206     for (i = 0; i < startIndex; i++) {
207     new_mu[i] = mu[i];
208     }
209    
210     for(i = (stopIndex+1); i < nElements; i++) {
211     j = i - startIndex + 1;
212     new_mu[j] = mu[i];
213     }
214    
215     delete[] pos;
216     delete[] vel;
217     delete[] frc;
218     delete[] trq;
219     delete[] Amat;
220     delete[] mu;
221    
222     pos = new_pos;
223     vel = new_vel;
224     frc = new_frc;
225     trq = new_trq;
226     ul = new_ul;
227     Amat = new_Amat;
228     mu = new_mu;
229    
230     nElements = nNew;
231     }