Changes in src/molecule_geometry.cpp [4bb63c:1883f9]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/molecule_geometry.cpp
r4bb63c r1883f9 48 48 49 49 // go through all atoms 50 ActOnAllVectors( &Vector::SubtractVector, *Center); 51 ActOnAllVectors( &Vector::SubtractVector, *CenterBox); 50 BOOST_FOREACH(atom* iter, atoms){ 51 *iter -= *Center; 52 *iter -= *CenterBox; 53 } 52 54 atoms.transformNodes(boost::bind(&Box::WrapPeriodically,domain,_1)); 53 55 … … 66 68 Box &domain = World::getInstance().getDomain(); 67 69 70 // go through all atoms 68 71 atoms.transformNodes(boost::bind(&Box::WrapPeriodically,domain,_1)); 69 72 … … 83 86 if (iter != end()) { //list not empty? 84 87 for (int i=NDIM;i--;) { 85 max->at(i) = (*iter)-> x[i];86 min->at(i) = (*iter)-> x[i];88 max->at(i) = (*iter)->at(i); 89 min->at(i) = (*iter)->at(i); 87 90 } 88 91 for (; iter != end(); ++iter) {// continue with second if present 89 92 //(*iter)->Output(1,1,out); 90 93 for (int i=NDIM;i--;) { 91 max->at(i) = (max->at(i) < (*iter)-> x[i]) ? (*iter)->x[i]: max->at(i);92 min->at(i) = (min->at(i) > (*iter)-> x[i]) ? (*iter)->x[i]: min->at(i);94 max->at(i) = (max->at(i) < (*iter)->at(i)) ? (*iter)->at(i) : max->at(i); 95 min->at(i) = (min->at(i) > (*iter)->at(i)) ? (*iter)->at(i) : min->at(i); 93 96 } 94 97 } … … 101 104 (*max) += (*min); 102 105 Translate(min); 103 Center.Zero();104 106 } 105 107 delete(min); … … 115 117 int Num = 0; 116 118 molecule::const_iterator iter = begin(); // start at first in list 119 Vector Center; 117 120 118 121 Center.Zero(); 119 120 122 if (iter != end()) { //list not empty? 121 123 for (; iter != end(); ++iter) { // continue with second if present 122 124 Num++; 123 Center += (*iter)-> x;125 Center += (*iter)->getPosition(); 124 126 } 125 127 Center.Scale(-1./(double)Num); // divide through total number (and sign for direction) 126 128 Translate(&Center); 127 Center.Zero();128 129 } 129 130 }; … … 143 144 for (; iter != end(); ++iter) { // continue with second if present 144 145 Num++; 145 (*a) += (*iter)-> x;146 (*a) += (*iter)->getPosition(); 146 147 } 147 148 a->Scale(1./(double)Num); // divide through total mass (and sign for direction) … … 176 177 if (iter != end()) { //list not empty? 177 178 for (; iter != end(); ++iter) { // continue with second if present 178 Num += (*iter)-> type->mass;179 tmp = (*iter)-> type->mass * (*iter)->x;179 Num += (*iter)->getType()->mass; 180 tmp = (*iter)->getType()->mass * (*iter)->getPosition(); 180 181 (*a) += tmp; 181 182 } … … 194 195 void molecule::CenterPeriodic() 195 196 { 196 DeterminePeriodicCenter(Center); 197 Vector NewCenter; 198 DeterminePeriodicCenter(NewCenter); 199 // go through all atoms 200 BOOST_FOREACH(atom* iter, atoms){ 201 *iter -= NewCenter; 202 } 197 203 }; 198 204 … … 204 210 void molecule::CenterAtVector(Vector *newcenter) 205 211 { 206 Center = *newcenter; 212 // go through all atoms 213 BOOST_FOREACH(atom* iter, atoms){ 214 *iter -= *newcenter; 215 } 207 216 }; 208 217 … … 221 230 for (int j=0;j<MDSteps;j++) 222 231 (*iter)->Trajectory.R.at(j).ScaleAll(*factor); 223 (*iter)-> x.ScaleAll(*factor);232 (*iter)->ScaleAll(*factor); 224 233 } 225 234 }; … … 233 242 for (int j=0;j<MDSteps;j++) 234 243 (*iter)->Trajectory.R.at(j) += (*trans); 235 (*iter)->x+= (*trans);244 *(*iter) += (*trans); 236 245 } 237 246 }; … … 246 255 247 256 // go through all atoms 248 ActOnAllVectors( &Vector::AddVector, *trans); 257 BOOST_FOREACH(atom* iter, atoms){ 258 *iter += *trans; 259 } 249 260 atoms.transformNodes(boost::bind(&Box::WrapPeriodically,domain,_1)); 250 261 … … 272 283 bool flag; 273 284 Vector Testvector, Translationvector; 285 Vector Center; 274 286 275 287 do { … … 278 290 for (molecule::const_iterator iter = begin(); iter != end(); ++iter) { 279 291 #ifdef ADDHYDROGEN 280 if ((*iter)-> type->Z != 1) {292 if ((*iter)->getType()->Z != 1) { 281 293 #endif 282 Testvector = inversematrix * (*iter)-> x;294 Testvector = inversematrix * (*iter)->getPosition(); 283 295 Translationvector.Zero(); 284 296 for (BondList::const_iterator Runner = (*iter)->ListOfBonds.begin(); Runner != (*iter)->ListOfBonds.end(); (++Runner)) { 285 297 if ((*iter)->nr < (*Runner)->GetOtherAtom((*iter))->nr) // otherwise we shift one to, the other fro and gain nothing 286 298 for (int j=0;j<NDIM;j++) { 287 tmp = (*iter)-> x[j] - (*Runner)->GetOtherAtom(*iter)->x[j];299 tmp = (*iter)->at(j) - (*Runner)->GetOtherAtom(*iter)->at(j); 288 300 if ((fabs(tmp)) > BondDistance) { 289 301 flag = false; … … 303 315 // now also change all hydrogens 304 316 for (BondList::const_iterator Runner = (*iter)->ListOfBonds.begin(); Runner != (*iter)->ListOfBonds.end(); (++Runner)) { 305 if ((*Runner)->GetOtherAtom((*iter))-> type->Z == 1) {306 Testvector = inversematrix * (*Runner)->GetOtherAtom((*iter))-> x;317 if ((*Runner)->GetOtherAtom((*iter))->getType()->Z == 1) { 318 Testvector = inversematrix * (*Runner)->GetOtherAtom((*iter))->getPosition(); 307 319 Testvector += Translationvector; 308 320 Testvector *= matrix; … … 317 329 318 330 Center.Scale(1./static_cast<double>(getAtomCount())); 331 CenterAtVector(&Center); 319 332 }; 320 333 … … 335 348 DoLog(1) && (Log() << Verbose(1) << "Z-X-angle: " << alpha << " ... "); 336 349 for (molecule::const_iterator iter = begin(); iter != end(); ++iter) { 337 tmp = (*iter)-> x[0];338 (*iter)-> x[0] = cos(alpha) * tmp + sin(alpha) * (*iter)->x[2];339 (*iter)-> x[2] = -sin(alpha) * tmp + cos(alpha) * (*iter)->x[2];350 tmp = (*iter)->at(0); 351 (*iter)->set(0, cos(alpha) * tmp + sin(alpha) * (*iter)->at(2)); 352 (*iter)->set(2, -sin(alpha) * tmp + cos(alpha) * (*iter)->at(2)); 340 353 for (int j=0;j<MDSteps;j++) { 341 354 tmp = (*iter)->Trajectory.R.at(j)[0]; … … 354 367 DoLog(1) && (Log() << Verbose(1) << "Z-Y-angle: " << alpha << " ... "); 355 368 for (molecule::const_iterator iter = begin(); iter != end(); ++iter) { 356 tmp = (*iter)-> x[1];357 (*iter)-> x[1] = cos(alpha) * tmp + sin(alpha) * (*iter)->x[2];358 (*iter)-> x[2] = -sin(alpha) * tmp + cos(alpha) * (*iter)->x[2];369 tmp = (*iter)->at(1); 370 (*iter)->set(1, cos(alpha) * tmp + sin(alpha) * (*iter)->at(2)); 371 (*iter)->set(2, -sin(alpha) * tmp + cos(alpha) * (*iter)->at(2)); 359 372 for (int j=0;j<MDSteps;j++) { 360 373 tmp = (*iter)->Trajectory.R.at(j)[1]; … … 394 407 // go through all atoms 395 408 for (molecule::const_iterator iter = par->mol->begin(); iter != par->mol->end(); ++iter) { 396 if ((*iter)-> type== ((struct lsq_params *)params)->type) { // for specific type397 c = (*iter)-> x- a;409 if ((*iter)->getType() == ((struct lsq_params *)params)->type) { // for specific type 410 c = (*iter)->getPosition() - a; 398 411 t = c.ScalarProduct(b); // get direction parameter 399 412 d = t*b; // and create vector
Note:
See TracChangeset
for help on using the changeset viewer.