ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/rnemd/RNEMD.cpp
(Generate patch)

Comparing trunk/src/rnemd/RNEMD.cpp (file contents):
Revision 1902 by gezelter, Sun Jun 16 15:15:42 2013 UTC vs.
Revision 1903 by gezelter, Tue Jul 16 18:58:08 2013 UTC

# Line 547 | Line 547 | namespace OpenMD {
547      
548        if (hasSelectionB_) {
549          selectionB_ = rnemdParams->getSelectionB();
550 +
551        } else {
552          if (usePeriodicBoundaryConditions_) {    
553            Mat3x3d hmat = currentSnap_->getHmat();
# Line 573 | Line 574 | namespace OpenMD {
574              selectionB_ = selectionBstream.str();
575            } else {
576              selectionB_ = "select hull";
577 +            BisHull_ = true;
578              hasSelectionB_ = true;
579            }
580          }
# Line 1729 | Line 1731 | namespace OpenMD {
1731      Snapshot* snap = info_->getSnapshotManager()->getCurrentSnapshot();
1732  
1733      if (hasSelectionA_) {
1734 <      int isd;
1735 <      StuntDouble* sd;
1736 <      vector<StuntDouble*> aSites;
1737 <      seleManA_.setSelectionSet(evaluatorA_.evaluate());
1738 <      for (sd = seleManA_.beginSelected(isd); sd != NULL;
1739 <           sd = seleManA_.nextSelected(isd)) {
1740 <        aSites.push_back(sd);
1741 <      }
1742 < #if defined(HAVE_QHULL)
1743 <      ConvexHull* surfaceMeshA = new ConvexHull();
1744 <      surfaceMeshA->computeHull(aSites);
1745 <      areaA = surfaceMeshA->getArea();
1746 <      delete surfaceMeshA;
1747 < #else
1748 <      sprintf( painCave.errMsg,
1749 <               "RNEMD::getDividingArea : Hull calculation is not possible\n"
1750 <               "\twithout libqhull. Please rebuild OpenMD with qhull enabled.");
1751 <      painCave.severity = OPENMD_ERROR;
1752 <      painCave.isFatal = 1;
1753 <      simError();
1734 >
1735 >      if (evaluatorA_.hasSurfaceArea())
1736 >        areaA = evaluatorA_.getSurfaceArea();
1737 >      else {
1738 >        
1739 >        cerr << "selection A did not have surface area, recomputing\n";
1740 >        int isd;
1741 >        StuntDouble* sd;
1742 >        vector<StuntDouble*> aSites;
1743 >        seleManA_.setSelectionSet(evaluatorA_.evaluate());
1744 >        for (sd = seleManA_.beginSelected(isd); sd != NULL;
1745 >             sd = seleManA_.nextSelected(isd)) {
1746 >          aSites.push_back(sd);
1747 >        }
1748 > #if defined(HAVE_QHULL)
1749 >        ConvexHull* surfaceMeshA = new ConvexHull();
1750 >        surfaceMeshA->computeHull(aSites);
1751 >        areaA = surfaceMeshA->getArea();
1752 >        delete surfaceMeshA;
1753 > #else
1754 >        sprintf( painCave.errMsg,
1755 >               "RNEMD::getDividingArea : Hull calculation is not possible\n"
1756 >                 "\twithout libqhull. Please rebuild OpenMD with qhull enabled.");
1757 >        painCave.severity = OPENMD_ERROR;
1758 >        painCave.isFatal = 1;
1759 >        simError();
1760   #endif
1761 +      }
1762  
1763      } else {
1764        if (usePeriodicBoundaryConditions_) {
# Line 1765 | Line 1774 | namespace OpenMD {
1774      }
1775  
1776      if (hasSelectionB_) {
1777 <      int isd;
1778 <      StuntDouble* sd;
1779 <      vector<StuntDouble*> bSites;
1780 <      seleManB_.setSelectionSet(evaluatorB_.evaluate());
1772 <      for (sd = seleManB_.beginSelected(isd); sd != NULL;
1773 <           sd = seleManB_.nextSelected(isd)) {
1774 <        bSites.push_back(sd);
1775 <      }
1777 >      if (evaluatorB_.hasSurfaceArea())
1778 >        areaB = evaluatorB_.getSurfaceArea();
1779 >      else {
1780 >        cerr << "selection B did not have surface area, recomputing\n";
1781  
1782 +        int isd;
1783 +        StuntDouble* sd;
1784 +        vector<StuntDouble*> bSites;
1785 +        seleManB_.setSelectionSet(evaluatorB_.evaluate());
1786 +        for (sd = seleManB_.beginSelected(isd); sd != NULL;
1787 +             sd = seleManB_.nextSelected(isd)) {
1788 +          bSites.push_back(sd);
1789 +        }
1790 +        
1791   #if defined(HAVE_QHULL)
1792 <      ConvexHull* surfaceMeshB = new ConvexHull();    
1793 <      surfaceMeshB->computeHull(bSites);
1794 <      areaB = surfaceMeshB->getArea();
1795 <      delete surfaceMeshB;
1792 >        ConvexHull* surfaceMeshB = new ConvexHull();    
1793 >        surfaceMeshB->computeHull(bSites);
1794 >        areaB = surfaceMeshB->getArea();
1795 >        delete surfaceMeshB;
1796   #else
1797 <      sprintf( painCave.errMsg,
1798 <               "RNEMD::getDividingArea : Hull calculation is not possible\n"
1799 <               "\twithout libqhull. Please rebuild OpenMD with qhull enabled.");
1800 <      painCave.severity = OPENMD_ERROR;
1801 <      painCave.isFatal = 1;
1802 <      simError();
1797 >        sprintf( painCave.errMsg,
1798 >                 "RNEMD::getDividingArea : Hull calculation is not possible\n"
1799 >                 "\twithout libqhull. Please rebuild OpenMD with qhull enabled.");
1800 >        painCave.severity = OPENMD_ERROR;
1801 >        painCave.isFatal = 1;
1802 >        simError();
1803   #endif
1804 <
1805 <
1804 >      }
1805 >      
1806      } else {
1807        if (usePeriodicBoundaryConditions_) {
1808          // in periodic boundaries, the surface area is twice the x-y
# Line 1800 | Line 1814 | namespace OpenMD {
1814          areaB = 4.0 * M_PI * pow(sphereBRadius_, 2);
1815        }
1816      }
1817 <    
1817 >      
1818      dividingArea_ = min(areaA, areaB);
1819      hasDividingArea_ = true;
1820      return dividingArea_;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines