Changes in src/molecule_geometry.cpp [52d777:f429d7]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/molecule_geometry.cpp
r52d777 rf429d7 19 19 #include "World.hpp" 20 20 #include "Plane.hpp" 21 #include "Matrix.hpp" 22 #include "Box.hpp" 21 23 #include <boost/foreach.hpp> 22 24 … … 33 35 const Vector *Center = DetermineCenterOfAll(); 34 36 const Vector *CenterBox = DetermineCenterOfBox(); 35 double * const cell_size = World::getInstance().getDomain(); 36 double *M = ReturnFullMatrixforSymmetric(cell_size); 37 double *Minv = InverseMatrix(M); 37 Box &domain = World::getInstance().getDomain(); 38 38 39 39 // go through all atoms 40 40 ActOnAllVectors( &Vector::SubtractVector, *Center); 41 41 ActOnAllVectors( &Vector::SubtractVector, *CenterBox); 42 ActOnAllVectors( &Vector::WrapPeriodically, (const double *)M, (const double *)Minv);43 44 delete[](M);45 delete[](Minv); 42 BOOST_FOREACH(atom* iter, atoms){ 43 *iter->node = domain.WrapPeriodically(*iter->node); 44 } 45 46 46 delete(Center); 47 delete(CenterBox);48 47 return status; 49 48 }; … … 56 55 { 57 56 bool status = true; 58 double * const cell_size = World::getInstance().getDomain(); 59 double *M = ReturnFullMatrixforSymmetric(cell_size); 60 double *Minv = InverseMatrix(M); 57 Box &domain = World::getInstance().getDomain(); 61 58 62 59 // go through all atoms 63 ActOnAllVectors( &Vector::WrapPeriodically, (const double *)M, (const double *)Minv);64 65 delete[](M);66 delete[](Minv); 60 BOOST_FOREACH(atom* iter, atoms){ 61 *iter->node = domain.WrapPeriodically(*iter->node); 62 } 63 67 64 return status; 68 65 }; … … 153 150 { 154 151 Vector *a = new Vector(0.5,0.5,0.5); 155 156 const double *cell_size = World::getInstance().getDomain(); 157 double *M = ReturnFullMatrixforSymmetric(cell_size); 158 a->MatrixMultiplication(M); 159 delete[](M); 160 152 const Matrix &M = World::getInstance().getDomain().getM(); 153 (*a) *= M; 161 154 return a; 162 155 }; … … 244 237 void molecule::TranslatePeriodically(const Vector *trans) 245 238 { 246 double * const cell_size = World::getInstance().getDomain(); 247 double *M = ReturnFullMatrixforSymmetric(cell_size); 248 double *Minv = InverseMatrix(M); 239 Box &domain = World::getInstance().getDomain(); 249 240 250 241 // go through all atoms 251 242 ActOnAllVectors( &Vector::AddVector, *trans); 252 ActOnAllVectors( &Vector::WrapPeriodically, (const double *)M, (const double *)Minv);253 254 delete[](M);255 delete[](Minv); 243 BOOST_FOREACH(atom* iter, atoms){ 244 *iter->node = domain.WrapPeriodically(*iter->node); 245 } 246 256 247 }; 257 248 … … 264 255 OBSERVE; 265 256 Plane p(*n,0); 266 BOOST_FOREACH( 257 BOOST_FOREACH(atom* iter, atoms ){ 267 258 (*iter->node) = p.mirrorVector(*iter->node); 268 259 } … … 274 265 void molecule::DeterminePeriodicCenter(Vector ¢er) 275 266 { 276 double * const cell_size = World::getInstance().getDomain(); 277 double *matrix = ReturnFullMatrixforSymmetric(cell_size); 278 double *inversematrix = InverseMatrix(matrix); 267 const Matrix &matrix = World::getInstance().getDomain().getM(); 268 const Matrix &inversematrix = World::getInstance().getDomain().getM(); 279 269 double tmp; 280 270 bool flag; … … 288 278 if ((*iter)->type->Z != 1) { 289 279 #endif 290 Testvector = (*iter)->x; 291 Testvector.MatrixMultiplication(inversematrix); 280 Testvector = inversematrix * (*iter)->x; 292 281 Translationvector.Zero(); 293 282 for (BondList::const_iterator Runner = (*iter)->ListOfBonds.begin(); Runner != (*iter)->ListOfBonds.end(); (++Runner)) { … … 306 295 } 307 296 Testvector += Translationvector; 308 Testvector .MatrixMultiplication(matrix);297 Testvector *= matrix; 309 298 Center += Testvector; 310 299 Log() << Verbose(1) << "vector is: " << Testvector << endl; … … 313 302 for (BondList::const_iterator Runner = (*iter)->ListOfBonds.begin(); Runner != (*iter)->ListOfBonds.end(); (++Runner)) { 314 303 if ((*Runner)->GetOtherAtom((*iter))->type->Z == 1) { 315 Testvector = (*Runner)->GetOtherAtom((*iter))->x; 316 Testvector.MatrixMultiplication(inversematrix); 304 Testvector = inversematrix * (*Runner)->GetOtherAtom((*iter))->x; 317 305 Testvector += Translationvector; 318 Testvector .MatrixMultiplication(matrix);306 Testvector *= matrix; 319 307 Center += Testvector; 320 308 Log() << Verbose(1) << "Hydrogen vector is: " << Testvector << endl; … … 325 313 } 326 314 } while (!flag); 327 delete[](matrix);328 delete[](inversematrix);329 315 330 316 Center.Scale(1./static_cast<double>(getAtomCount())); … … 388 374 DoLog(1) && (Log() << Verbose(1) << "Transforming molecule into PAS ... "); 389 375 // the eigenvectors specify the transformation matrix 390 ActOnAllVectors( &Vector::MatrixMultiplication, (const double *) evec->data ); 376 Matrix M = Matrix(evec->data); 377 BOOST_FOREACH(atom* iter, atoms){ 378 (*iter->node) *= M; 379 } 391 380 DoLog(0) && (Log() << Verbose(0) << "done." << endl); 392 381
Note:
See TracChangeset
for help on using the changeset viewer.