ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/parallel/ForceMatrixDecomposition.cpp
(Generate patch)

Comparing branches/development/src/parallel/ForceMatrixDecomposition.cpp (file contents):
Revision 1857 by gezelter, Tue Apr 2 21:30:34 2013 UTC vs.
Revision 1858 by gezelter, Wed Apr 3 21:32:13 2013 UTC

# Line 1324 | Line 1324 | namespace OpenMD {
1324  
1325      RealType rList_ = (largestRcut_ + skinThickness_);
1326      Snapshot* snap_ = sman_->getCurrentSnapshot();
1327 <    Mat3x3d invHmat = snap_->getInvHmat();
1327 >    Mat3x3d box;
1328 >    Mat3x3d invBox;
1329 >
1330      Vector3d rs, scaled, dr;
1331      Vector3i whichCell;
1332      int cellIndex;
# Line 1335 | Line 1337 | namespace OpenMD {
1337   #else
1338      cellList_.clear();
1339   #endif
1340 <
1340 >    
1341      if (!usePeriodicBoundaryConditions_) {
1342 <      doAllPairs = true;
1342 >      box = snap_->getBoundingBox();
1343 >      invBox = snap_->getInvBoundingBox();
1344      } else {
1345 <
1346 <      Mat3x3d Hmat = snap_->getHmat();
1344 <      Vector3d Hx = Hmat.getColumn(0);
1345 <      Vector3d Hy = Hmat.getColumn(1);
1346 <      Vector3d Hz = Hmat.getColumn(2);
1347 <
1348 <      nCells_.x() = (int) ( Hx.length() )/ rList_;
1349 <      nCells_.y() = (int) ( Hy.length() )/ rList_;
1350 <      nCells_.z() = (int) ( Hz.length() )/ rList_;
1351 <      
1352 <      // handle small boxes where the cell offsets can end up repeating cells
1353 <      
1354 <      if (nCells_.x() < 3) doAllPairs = true;
1355 <      if (nCells_.y() < 3) doAllPairs = true;
1356 <      if (nCells_.z() < 3) doAllPairs = true;
1357 <      
1358 <      int nCtot = nCells_.x() * nCells_.y() * nCells_.z();
1359 <      
1360 < #ifdef IS_MPI
1361 <      cellListRow_.resize(nCtot);
1362 <      cellListCol_.resize(nCtot);
1363 < #else
1364 <      cellList_.resize(nCtot);
1365 < #endif
1345 >      box = snap_->getHmat();
1346 >      invBox = snap_->getInvHmat();
1347      }
1348 <
1348 >    
1349 >    Vector3d boxX = box.getColumn(0);
1350 >    Vector3d boxY = box.getColumn(1);
1351 >    Vector3d boxZ = box.getColumn(2);
1352 >    
1353 >    nCells_.x() = (int) ( boxX.length() )/ rList_;
1354 >    nCells_.y() = (int) ( boxY.length() )/ rList_;
1355 >    nCells_.z() = (int) ( boxZ.length() )/ rList_;
1356 >    
1357 >    // handle small boxes where the cell offsets can end up repeating cells
1358 >    
1359 >    if (nCells_.x() < 3) doAllPairs = true;
1360 >    if (nCells_.y() < 3) doAllPairs = true;
1361 >    if (nCells_.z() < 3) doAllPairs = true;
1362 >    
1363 >    int nCtot = nCells_.x() * nCells_.y() * nCells_.z();
1364 >    
1365 > #ifdef IS_MPI
1366 >    cellListRow_.resize(nCtot);
1367 >    cellListCol_.resize(nCtot);
1368 > #else
1369 >    cellList_.resize(nCtot);
1370 > #endif
1371 >    
1372      if (!doAllPairs) {
1373   #ifdef IS_MPI
1374 <
1374 >      
1375        for (int i = 0; i < nGroupsInRow_; i++) {
1376          rs = cgRowData.position[i];
1377          
1378          // scaled positions relative to the box vectors
1379 <        scaled = invHmat * rs;
1379 >        scaled = invBox * rs;
1380          
1381          // wrap the vector back into the unit box by subtracting integer box
1382          // numbers
# Line 1400 | Line 1404 | namespace OpenMD {
1404          rs = cgColData.position[i];
1405          
1406          // scaled positions relative to the box vectors
1407 <        scaled = invHmat * rs;
1407 >        scaled = invBox * rs;
1408          
1409          // wrap the vector back into the unit box by subtracting integer box
1410          // numbers
# Line 1424 | Line 1428 | namespace OpenMD {
1428          // add this cutoff group to the list of groups in this cell;
1429          cellListCol_[cellIndex].push_back(i);
1430        }
1431 <    
1431 >      
1432   #else
1433        for (int i = 0; i < nGroups_; i++) {
1434          rs = snap_->cgData.position[i];
1435          
1436          // scaled positions relative to the box vectors
1437 <        scaled = invHmat * rs;
1437 >        scaled = invBox * rs;
1438          
1439          // wrap the vector back into the unit box by subtracting integer box
1440          // numbers
# Line 1523 | Line 1527 | namespace OpenMD {
1527                    // allows atoms within a single cutoff group to
1528                    // interact with each other.
1529  
1526
1527
1530                    if (m2 != m1 || (*j2) >= (*j1) ) {
1531  
1532                      dr = snap_->cgData.position[(*j2)] - snap_->cgData.position[(*j1)];

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines