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

Comparing branches/development/src/selection/HullFinder.cpp (file contents):
Revision 1803 by gezelter, Wed Oct 3 14:20:07 2012 UTC vs.
Revision 1867 by gezelter, Mon Apr 29 17:53:48 2013 UTC

# Line 35 | Line 35
35   *                                                                      
36   * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
37   * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
38 < * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
38 > * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).          
39   * [4]  Kuang & Gezelter,  J. Chem. Phys. 133, 164101 (2010).
40   * [5]  Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41   */
# Line 88 | Line 88 | namespace OpenMD {
88   #endif
89    }
90  
91 +  HullFinder::~HullFinder() {
92 +    delete surfaceMesh_;
93 +  }
94 +
95    OpenMDBitSet HullFinder::findHull() {
96      Snapshot* currSnapshot = info_->getSnapshotManager()->getCurrentSnapshot();
97      OpenMDBitSet bsResult(nStuntDoubles_);
# Line 97 | Line 101 | namespace OpenMD {
101      sprintf( painCave.errMsg,
102               "HullFinder : Hull calculation is not possible without libqhull.\n"
103               "\tPlease rebuild OpenMD with qhull enabled.");
104 +    painCave.severity = OPENMD_ERROR;
105 +    painCave.isFatal = 1;
106 +    simError();
107 + #endif
108 +    
109 +    std::vector<Triangle> sMesh = surfaceMesh_->getMesh();
110 +    int nTriangles = sMesh.size();
111 +    // Loop over the mesh faces
112 +    std::vector<Triangle>::iterator face;
113 +    std::vector<StuntDouble*>::iterator vertex;
114 +
115 +    // This will work in parallel because the triangles returned by the mesh
116 +    // have a NULL stuntDouble if this processor doesn't own the
117 +    
118 +    for (face = sMesh.begin(); face != sMesh.end(); ++face) {
119 +      Triangle thisTriangle = *face;
120 +      std::vector<StuntDouble*> vertexSDs = thisTriangle.getVertices();
121 +      for (vertex = vertexSDs.begin(); vertex != vertexSDs.end(); ++vertex) {
122 +        if ((*vertex) != NULL) {
123 +          bsResult.setBitOn((*vertex)->getGlobalIndex());          
124 +        }
125 +      }
126 +    }
127 +    return bsResult;
128 +  }
129 +
130 +  OpenMDBitSet HullFinder::findHull(int frame) {
131 +    Snapshot* currSnapshot = info_->getSnapshotManager()->getSnapshot(frame);
132 +    OpenMDBitSet bsResult(nStuntDoubles_);
133 + #ifdef HAVE_QHULL
134 +    surfaceMesh_->computeHull(localSites_);
135 + #else
136 +    sprintf( painCave.errMsg,
137 +             "HullFinder : Hull calculation is not possible without libqhull.\n"
138 +             "\tPlease rebuild OpenMD with qhull enabled.");
139        painCave.severity = OPENMD_ERROR;
140        painCave.isFatal = 1;
141        simError();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines