| 1597 | 
  | 
 | 
| 1598 | 
  | 
    Vector3d ac, acrec, bc, bcrec; | 
| 1599 | 
  | 
    Vector3d ah, ahrec, bh, bhrec; | 
| 1600 | 
– | 
    RealType cNumerator, cDenominator; | 
| 1601 | 
– | 
    RealType hNumerator, hDenominator; | 
| 1602 | 
– | 
 | 
| 1600 | 
  | 
 | 
| 1601 | 
  | 
    bool successfulExchange = false; | 
| 1602 | 
  | 
    if ((Mh > 0.0) && (Mc > 0.0)) {//both slabs are not empty | 
| 1611 | 
  | 
      bc  = -(Ici * angularMomentumTarget_) + omegac; | 
| 1612 | 
  | 
      bcrec = bc - omegac; | 
| 1613 | 
  | 
       | 
| 1614 | 
< | 
      cNumerator = Kc - kineticTarget_; | 
| 1614 | 
> | 
      RealType cNumerator = Kc - kineticTarget_; | 
| 1615 | 
  | 
      if (doLinearPart)  | 
| 1616 | 
  | 
        cNumerator -= 0.5 * Mc * ac.lengthSquare(); | 
| 1617 | 
  | 
       | 
| 1620 | 
  | 
 | 
| 1621 | 
  | 
      if (cNumerator > 0.0) { | 
| 1622 | 
  | 
         | 
| 1623 | 
< | 
        cDenominator = Kc; | 
| 1623 | 
> | 
        RealType cDenominator = Kc; | 
| 1624 | 
  | 
 | 
| 1625 | 
  | 
        if (doLinearPart) | 
| 1626 | 
  | 
          cDenominator -= 0.5 * Mc * vc.lengthSquare(); | 
| 1643 | 
  | 
            bh  = (Ihi * angularMomentumTarget_) + omegah; | 
| 1644 | 
  | 
            bhrec = bh - omegah; | 
| 1645 | 
  | 
             | 
| 1646 | 
< | 
            hNumerator = Kh + kineticTarget_; | 
| 1646 | 
> | 
            RealType hNumerator = Kh + kineticTarget_; | 
| 1647 | 
  | 
            if (doLinearPart)  | 
| 1648 | 
  | 
              hNumerator -= 0.5 * Mh * ah.lengthSquare(); | 
| 1649 | 
  | 
             | 
| 1652 | 
  | 
               | 
| 1653 | 
  | 
            if (hNumerator > 0.0) { | 
| 1654 | 
  | 
               | 
| 1655 | 
< | 
              hDenominator = Kh; | 
| 1655 | 
> | 
              RealType hDenominator = Kh; | 
| 1656 | 
  | 
              if (doLinearPart)  | 
| 1657 | 
  | 
                hDenominator -= 0.5 * Mh * vh.lengthSquare(); | 
| 1658 | 
  | 
              if (doAngularPart) | 
| 1737 | 
  | 
           sd = seleManA_.nextSelected(isd)) { | 
| 1738 | 
  | 
        aSites.push_back(sd); | 
| 1739 | 
  | 
      } | 
| 1740 | 
+ | 
#if defined(HAVE_QHULL) | 
| 1741 | 
  | 
      ConvexHull* surfaceMeshA = new ConvexHull(); | 
| 1742 | 
  | 
      surfaceMeshA->computeHull(aSites); | 
| 1743 | 
  | 
      areaA = surfaceMeshA->getArea(); | 
| 1744 | 
  | 
      delete surfaceMeshA; | 
| 1745 | 
+ | 
#else | 
| 1746 | 
+ | 
      sprintf( painCave.errMsg, | 
| 1747 | 
+ | 
               "RNEMD::getDividingArea : Hull calculation is not possible\n" | 
| 1748 | 
+ | 
               "\twithout libqhull. Please rebuild OpenMD with qhull enabled."); | 
| 1749 | 
+ | 
      painCave.severity = OPENMD_ERROR; | 
| 1750 | 
+ | 
      painCave.isFatal = 1; | 
| 1751 | 
+ | 
      simError(); | 
| 1752 | 
+ | 
#endif | 
| 1753 | 
  | 
 | 
| 1754 | 
  | 
    } else { | 
| 1755 | 
  | 
      if (usePeriodicBoundaryConditions_) { | 
| 1764 | 
  | 
      } | 
| 1765 | 
  | 
    } | 
| 1766 | 
  | 
 | 
| 1761 | 
– | 
 | 
| 1762 | 
– | 
 | 
| 1767 | 
  | 
    if (hasSelectionB_) { | 
| 1768 | 
  | 
      int isd; | 
| 1769 | 
  | 
      StuntDouble* sd; | 
| 1773 | 
  | 
           sd = seleManB_.nextSelected(isd)) { | 
| 1774 | 
  | 
        bSites.push_back(sd); | 
| 1775 | 
  | 
      } | 
| 1776 | 
+ | 
 | 
| 1777 | 
+ | 
#if defined(HAVE_QHULL) | 
| 1778 | 
  | 
      ConvexHull* surfaceMeshB = new ConvexHull();     | 
| 1779 | 
  | 
      surfaceMeshB->computeHull(bSites); | 
| 1780 | 
  | 
      areaB = surfaceMeshB->getArea(); | 
| 1781 | 
  | 
      delete surfaceMeshB; | 
| 1782 | 
+ | 
#else | 
| 1783 | 
+ | 
      sprintf( painCave.errMsg, | 
| 1784 | 
+ | 
               "RNEMD::getDividingArea : Hull calculation is not possible\n" | 
| 1785 | 
+ | 
               "\twithout libqhull. Please rebuild OpenMD with qhull enabled."); | 
| 1786 | 
+ | 
      painCave.severity = OPENMD_ERROR; | 
| 1787 | 
+ | 
      painCave.isFatal = 1; | 
| 1788 | 
+ | 
      simError(); | 
| 1789 | 
+ | 
#endif | 
| 1790 | 
  | 
 | 
| 1791 | 
+ | 
 | 
| 1792 | 
  | 
    } else { | 
| 1793 | 
  | 
      if (usePeriodicBoundaryConditions_) { | 
| 1794 | 
  | 
        // in periodic boundaries, the surface area is twice the x-y |