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

Comparing:
trunk/src/selection/HullFinder.cpp (file contents), Revision 1438 by chuckv, Wed Apr 21 19:05:04 2010 UTC vs.
branches/development/src/selection/HullFinder.cpp (file contents), Revision 1831 by gezelter, Thu Jan 10 14:06:34 2013 UTC

# Line 36 | Line 36
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).          
39 < * [4]  Vardeman & Gezelter, in progress (2009).                        
39 > * [4]  Kuang & Gezelter,  J. Chem. Phys. 133, 164101 (2010).
40 > * [5]  Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41   */
42  
43   #include "selection/HullFinder.hpp"
# Line 52 | Line 53 | namespace OpenMD {
53      
54      SimInfo::MoleculeIterator mi;
55      Molecule* mol;
56 <    StuntDouble* integrableObject;
56 >    StuntDouble* sd;
57      Molecule::IntegrableObjectIterator  ioi;
58      Molecule::AtomIterator ai;
59      Atom* atom;
# Line 63 | Line 64 | namespace OpenMD {
64           mol = info_->nextMolecule(mi)) {
65          
66        // Hull is constructed from all known integrable objects.
67 <      for (integrableObject = mol->beginIntegrableObject(ioi);
68 <           integrableObject != NULL;
69 <           integrableObject = mol->nextIntegrableObject(ioi)) {
70 <        localSites_.push_back(integrableObject);
67 >      for (sd = mol->beginIntegrableObject(ioi);
68 >           sd != NULL;
69 >           sd = mol->nextIntegrableObject(ioi)) {
70 >        localSites_.push_back(sd);
71        }
72        
73        // selection can include atoms (which may be a subset of the IOs)
# Line 84 | Line 85 | namespace OpenMD {
85      }
86   #ifdef HAVE_QHULL
87      surfaceMesh_ = new ConvexHull();
88 + #endif
89 +  }
90 +
91 +  OpenMDBitSet HullFinder::findHull() {
92 +    Snapshot* currSnapshot = info_->getSnapshotManager()->getCurrentSnapshot();
93 +    OpenMDBitSet bsResult(nStuntDoubles_);
94 + #ifdef HAVE_QHULL
95 +    surfaceMesh_->computeHull(localSites_);
96   #else
97      sprintf( painCave.errMsg,
98 <             "Hullfinder error: Hull calculation not possible without libqhull.\n",
99 <              "Please rebuild with Qhull");
98 >             "HullFinder : Hull calculation is not possible without libqhull.\n"
99 >             "\tPlease rebuild OpenMD with qhull enabled.");
100        painCave.severity = OPENMD_ERROR;
101        painCave.isFatal = 1;
102        simError();
94
103   #endif
104 +    
105 +    std::vector<Triangle> sMesh = surfaceMesh_->getMesh();
106 +    int nTriangles = sMesh.size();
107 +    // Loop over the mesh faces
108 +    std::vector<Triangle>::iterator face;
109 +    std::vector<StuntDouble*>::iterator vertex;
110 +
111 +    // This will work in parallel because the triangles returned by the mesh
112 +    // have a NULL stuntDouble if this processor doesn't own the
113 +    
114 +    for (face = sMesh.begin(); face != sMesh.end(); ++face) {
115 +      Triangle thisTriangle = *face;
116 +      std::vector<StuntDouble*> vertexSDs = thisTriangle.getVertices();
117 +      for (vertex = vertexSDs.begin(); vertex != vertexSDs.end(); ++vertex) {
118 +        if ((*vertex) != NULL) {
119 +          bsResult.setBitOn((*vertex)->getGlobalIndex());          
120 +        }
121 +      }
122 +    }
123 +    return bsResult;
124    }
125  
126 <  OpenMDBitSet HullFinder::findHull() {
127 <    StuntDouble* sd;
100 <    Snapshot* currSnapshot = info_->getSnapshotManager()->getCurrentSnapshot();
126 >  OpenMDBitSet HullFinder::findHull(int frame) {
127 >    Snapshot* currSnapshot = info_->getSnapshotManager()->getSnapshot(frame);
128      OpenMDBitSet bsResult(nStuntDoubles_);
129 <
129 > #ifdef HAVE_QHULL
130      surfaceMesh_->computeHull(localSites_);
131 + #else
132 +    sprintf( painCave.errMsg,
133 +             "HullFinder : Hull calculation is not possible without libqhull.\n"
134 +             "\tPlease rebuild OpenMD with qhull enabled.");
135 +      painCave.severity = OPENMD_ERROR;
136 +      painCave.isFatal = 1;
137 +      simError();
138 + #endif
139 +    
140      std::vector<Triangle> sMesh = surfaceMesh_->getMesh();
141      int nTriangles = sMesh.size();
142      // Loop over the mesh faces
143      std::vector<Triangle>::iterator face;
144      std::vector<StuntDouble*>::iterator vertex;
145  
146 +    // This will work in parallel because the triangles returned by the mesh
147 +    // have a NULL stuntDouble if this processor doesn't own the
148 +    
149      for (face = sMesh.begin(); face != sMesh.end(); ++face) {
150        Triangle thisTriangle = *face;
151        std::vector<StuntDouble*> vertexSDs = thisTriangle.getVertices();

Comparing:
trunk/src/selection/HullFinder.cpp (property svn:keywords), Revision 1438 by chuckv, Wed Apr 21 19:05:04 2010 UTC vs.
branches/development/src/selection/HullFinder.cpp (property svn:keywords), Revision 1831 by gezelter, Thu Jan 10 14:06:34 2013 UTC

# Line 0 | Line 1
1 + Author Id Revision Date

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines