ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Atom.cpp
Revision: 561
Committed: Fri Jun 20 20:29:36 2003 UTC (21 years ago) by mmeineke
File size: 4777 byte(s)
Log Message:
Most of the integrator and NVT seem to be working now.

File Contents

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