ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Atom.cpp
Revision: 409
Committed: Wed Mar 26 21:04:38 2003 UTC (21 years, 3 months ago) by gezelter
File size: 4340 byte(s)
Log Message:
Make Atom.cpp able to add and delete ranges of atoms

File Contents

# Content
1 #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 new_pos[j] = pos[i];
121 new_vel[j] = vel[i];
122 new_frc[j] = frc[i];
123 new_trq[j] = trq[i];
124 new_ul[j] = ul[i];
125 }
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 new_Amat[j] = Amat[i];
134 }
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 new_mu[j] = mu[i];
143 }
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 }