| 96 |
|
frames_ = 0; |
| 97 |
|
nProcessed_ = nFrames/step_; |
| 98 |
|
|
| 99 |
< |
//positions_ and moBool_ are 2D arrays, need the second dimension filled as well |
| 99 |
> |
// positions_ and moBool_ are 2D arrays, need the second dimension |
| 100 |
> |
// filled as well |
| 101 |
|
for(int i = 0; i < selectionCount_; i++){ |
| 102 |
|
moBool_[i].resize(nFrames); |
| 103 |
|
positions_[i].resize(nFrames); |
| 106 |
|
int iterator; |
| 107 |
|
int index = 0; |
| 108 |
|
/* Loop over all frames storing the positions in a vec< vec<pos> > |
| 109 |
< |
* At the end, positions.length() should equal seleMan1_.size() or w/e |
| 110 |
< |
* And positions[index].length() should equal nFrames (or nFrames/istep) |
| 109 |
> |
* At the end, positions.length() should equal seleMan1_.size() or |
| 110 |
> |
* w/e And positions[index].length() should equal nFrames (or |
| 111 |
> |
* nFrames/istep) |
| 112 |
|
*/ |
| 113 |
|
for(int istep = 0; istep < nFrames; istep += step_){ |
| 114 |
|
frames_++; |
| 115 |
|
reader.readFrame(istep); |
| 116 |
|
currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot(); |
| 117 |
|
|
| 118 |
< |
for(mol = info_->beginMolecule(mi); mol != NULL; mol = info_->nextMolecule(mi)){ |
| 118 |
> |
for(mol = info_->beginMolecule(mi); mol != NULL; |
| 119 |
> |
mol = info_->nextMolecule(mi)){ |
| 120 |
|
//change the positions of atoms which belong to the rigidbodies |
| 121 |
< |
for(rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)){ |
| 121 |
> |
for(rb = mol->beginRigidBody(rbIter); rb != NULL; |
| 122 |
> |
rb = mol->nextRigidBody(rbIter)){ |
| 123 |
|
rb->updateAtoms(); |
| 124 |
|
} |
| 125 |
|
} |
| 126 |
|
|
| 127 |
< |
index = 0; //count over atoms since iterators aren't the most friendly for such plebian things |
| 128 |
< |
for(sd = seleMan1_.beginSelected(iterator); sd != NULL; sd = seleMan1_.nextSelected(iterator)){ |
| 127 |
> |
index = 0; // count over atoms since iterators aren't the most |
| 128 |
> |
// friendly for such plebian things |
| 129 |
> |
for(sd = seleMan1_.beginSelected(iterator); sd != NULL; |
| 130 |
> |
sd = seleMan1_.nextSelected(iterator)){ |
| 131 |
|
Vector3d pos = sd->getPos(); |
| 132 |
|
positions_[index][istep] = pos; |
| 133 |
|
index++; |
| 134 |
|
} |
| 135 |
|
} |
| 136 |
|
|
| 131 |
– |
|
| 137 |
|
cout << "Position Array size: " << positions_.size() << "\n"; |
| 138 |
|
cout << "Frames analyzed: " << positions_[0].size() << "\n"; |
| 139 |
|
|
| 140 |
< |
|
| 136 |
< |
for(int i = 0; i < positions_.size(); i++){ |
| 140 |
> |
for(std::size_t i = 0; i < positions_.size(); i++){ |
| 141 |
|
int frameIndex = positions_[i].size(); |
| 142 |
|
for(int j = 1; j < frameIndex; j++){ |
| 143 |
|
Vector3d posF1 = positions_[i][j-1]; |
| 156 |
|
} |
| 157 |
|
|
| 158 |
|
int mobileAtomCount = 0; |
| 159 |
< |
for(int i = 0; i < moBool_.size(); i++){ |
| 159 |
> |
for(std::size_t i = 0; i < moBool_.size(); i++){ |
| 160 |
|
int frameIndex = moBool_[i].size(); |
| 161 |
|
bool mobileAtom = false; |
| 162 |
|
for(int j = 0; j < frameIndex; j++){ |
| 163 |
|
mobileAtom = mobileAtom || moBool_[i][j]; |
| 164 |
|
} |
| 165 |
< |
moBool_[i][0] = mobileAtom; //is true if any value later in the array is true, false otherwise |
| 165 |
> |
moBool_[i][0] = mobileAtom; // is true if any value later in the |
| 166 |
> |
// array is true, false otherwise |
| 167 |
|
if(mobileAtom){ |
| 168 |
|
mobileAtomCount++; |
| 169 |
|
} |
| 171 |
|
|
| 172 |
|
cout << "Mobile atom count: " << mobileAtomCount << "\n"; |
| 173 |
|
|
| 174 |
< |
//Here I shrink the size of the arrays, why look through 3888, when you only need ~800. |
| 175 |
< |
//Additionally, all of these are mobile at some point in time, the others aren't, dead weight and |
| 176 |
< |
//memory |
| 174 |
> |
// Here I shrink the size of the arrays, why look through 3888, |
| 175 |
> |
// when you only need ~800. Additionally, all of these are mobile |
| 176 |
> |
// at some point in time, the others aren't, dead weight and |
| 177 |
> |
// memory |
| 178 |
|
positions2_.resize(mobileAtomCount); |
| 179 |
|
moBool2_.resize(mobileAtomCount); |
| 180 |
|
int pos2index = 0; |
| 181 |
< |
for(int i = 0; i < positions_.size(); i++){ |
| 181 |
> |
for(std::size_t i = 0; i < positions_.size(); i++){ |
| 182 |
|
int frameCount = positions_[i].size(); |
| 183 |
|
if(moBool_[i][0]){ |
| 184 |
|
for(int j = 0; j < frameCount; j++){ |
| 206 |
|
diffStream.open(outputFilename_.c_str()); |
| 207 |
|
diffStream << "#X&Y diffusion amounts\n"; |
| 208 |
|
diffStream << "#singleMoveDistance_: " << singleMoveDistance_ << "\n"; |
| 203 |
– |
|
| 209 |
|
diffStream << "#Number of mobile atoms: " << positions2_.size() << "\n"; |
| 205 |
– |
|
| 210 |
|
diffStream << "#time, <x(t)-x(0)>, <y(t)-y(0)>, <r(t)-r(0)>\n"; |
| 211 |
< |
for(int i = 0; i < xHist_.size(); i++){ |
| 212 |
< |
diffStream << i << ", " << xHist_[i] << ", " << yHist_[i] << ", " << rHist_[i] << "\n"; |
| 211 |
> |
|
| 212 |
> |
for(std::size_t i = 0; i < xHist_.size(); i++){ |
| 213 |
> |
diffStream << i << ", " << xHist_[i] << ", " << yHist_[i] << ", " |
| 214 |
> |
<< rHist_[i] << "\n"; |
| 215 |
|
} |
| 216 |
|
diffStream.close(); |
| 217 |
|
|
| 237 |
|
//loop over particles |
| 238 |
|
// loop over frames starting at j |
| 239 |
|
// loop over frames starting at k = j (time shift of 0) |
| 240 |
< |
for(int i = 0; i < positions2_.size(); i++){ |
| 241 |
< |
int frames = positions2_[i].size() - 1; //for counting properly, otherwise moBool2_[i][j+1] will |
| 242 |
< |
// go over |
| 240 |
> |
for(std::size_t i = 0; i < positions2_.size(); i++){ |
| 241 |
> |
int frames = positions2_[i].size() - 1; // for counting |
| 242 |
> |
// properly, otherwise |
| 243 |
> |
// moBool2_[i][j+1] will |
| 244 |
> |
// go over |
| 245 |
|
for(int j = 0; j < frames; j++){ |
| 246 |
< |
//if the particle is mobile between j and j + 1, then count it for all timeShifts |
| 246 |
> |
// if the particle is mobile between j and j + 1, then count |
| 247 |
> |
// it for all timeShifts |
| 248 |
|
if(moBool2_[i][j+1]){ |
| 249 |
< |
for(int k = j; k < positions2_[0].size(); k++){ |
| 249 |
> |
for(std::size_t k = j; k < positions2_[0].size(); k++){ |
| 250 |
|
//<x(t)-x(0)> <y(t)-y(0)> <r(t)-r(0)> |
| 251 |
< |
//The positions stored are not wrapped, thus I don't need to worry about pbc |
| 251 |
> |
//The positions stored are not wrapped, thus I don't need |
| 252 |
> |
//to worry about pbc |
| 253 |
|
//Mean square displacement |
| 254 |
|
//So I do want the squared distances |
| 255 |
|
|
| 275 |
|
} |
| 276 |
|
cout << "X, Y, R calculated\n"; |
| 277 |
|
|
| 278 |
< |
for(int i = 0; i < xHist_.size(); i++){ |
| 278 |
> |
for(std::size_t i = 0; i < xHist_.size(); i++){ |
| 279 |
|
xHist_[i] = xHist_[i]/(count_[i]); |
| 280 |
|
yHist_[i] = yHist_[i]/(count_[i]); |
| 281 |
|
rHist_[i] = rHist_[i]/(count_[i]); |