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

Comparing:
trunk/src/math/AlphaHull.cpp (file contents), Revision 1402 by chuckv, Fri Jan 8 17:15:27 2010 UTC vs.
branches/development/src/math/AlphaHull.cpp (file contents), Revision 1704 by gezelter, Tue Apr 24 20:40:04 2012 UTC

# Line 35 | Line 35
35   * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
36   * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
37   * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
38 < * [4]  Vardeman & Gezelter, in progress (2009).                        
38 > * [4] Kuang & Gezelter,  J. Chem. Phys. 133, 164101 (2010).
39 > * [4] , Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). *
40   *
40 *
41   *  AlphaHull.cpp
42   *
43   *  Purpose: To calculate Alpha hull, hull volume libqhull.
44   *
45   *  Created by Charles F. Vardeman II on 11 Dec 2006.
46   *  @author  Charles F. Vardeman II
47 < *  @version $Id: ConvexHull.cpp,v 1.21 2009-11-25 20:02:01 gezelter Exp $
47 > *  @version $Id$
48   *
49   */
50  
# Line 58 | Line 58
58   #include <utility>
59   #include "math/AlphaHull.hpp"
60   #include "utils/simError.h"
61
61   #ifdef IS_MPI
62   #include <mpi.h>
63   #endif
64 + #include "math/qhull.hpp"
65  
66   using namespace OpenMD;
67  
68   #ifdef HAVE_QHULL
69 extern "C"
70 {
71 #include <qhull/qhull.h>
72 #include <qhull/mem.h>
73 #include <qhull/qset.h>
74 #include <qhull/geom.h>
75 #include <qhull/merge.h>
76 #include <qhull/poly.h>
77 #include <qhull/io.h>
78 #include <qhull/stat.h>
79 }
69   double calculate_circumradius(pointT* p0,pointT* p1,pointT* p2, int dim);
70  
71 < AlphaHull::AlphaHull(double alpha) : Hull(), dim_(3), alpha_(alpha), options_("qhull d QJ Tcv ") {
71 > AlphaHull::AlphaHull(double alpha) : Hull(), dim_(3), alpha_(alpha), options_("qhull d QJ Tcv Pp") {
72   }
73  
74   void AlphaHull::computeHull(std::vector<StuntDouble*> bodydoubles) {
# Line 91 | Line 80 | void AlphaHull::computeHull(std::vector<StuntDouble*>
80    
81    vertexT *vertex, **vertexp;
82    facetT *facet, *neighbor;
83 <  setT *vertices;
83 >  setT *vertices, *verticestop, *verticesbottom;
84    int curlong, totlong;
85 +  pointT *interiorPoint;
86    
87    std::vector<double> ptArray(numpoints*dim_);
88  
# Line 243 | Line 233 | void AlphaHull::computeHull(std::vector<StuntDouble*>
233    qh visit_id++;
234    int numFacets=0;
235    std::vector<std::vector <int> > facetlist;
236 +  interiorPoint = qh interior_point;
237    FORALLfacet_(qh facet_list) {
238      numFacets++;
239      if (!facet->upperdelaunay) {
# Line 307 | Line 298 | void AlphaHull::computeHull(std::vector<StuntDouble*>
298    //assert(numFacets== qh num_facets);
299    
300    //Filter the triangles (only the ones on the boundary of the alpha complex) and build the mesh
301 +
302 +
303    
304    ridgeT *ridge, **ridgep;
305    FOREACHridge_(set) {
# Line 319 | Line 312 | void AlphaHull::computeHull(std::vector<StuntDouble*>
312        // Vector3d V3dNormal(facet->normal[0], facet->normal[1], facet->normal[2]);
313        //face.setNormal(V3dNormal);
314        
322      // RealType faceArea = qh_facetarea(facet);
323      //face.setArea(faceArea);
315        
316 <      //vertices = qh_facet3vertex(facet);
317 <      
327 <      //coordT *center = qh_getcenter(vertices);
316 >      //coordT *center = qh_getcenter(ridge->vertices);
317 >      //std::cout << "Centers are " << center[0] << "  " <<center[1] << "  " << center[2] << std::endl;
318        //Vector3d V3dCentroid(center[0], center[1], center[2]);
319        //face.setCentroid(V3dCentroid);
320 +
321        
322 <      //Vector3d faceVel = V3Zero;
322 >      Vector3d faceVel = V3Zero;
323        Vector3d p[3];
324 <      //RealType faceMass = 0.0;
324 >      RealType faceMass = 0.0;
325        
326        int ver = 0;
327        std::vector<int> virtexlist;
# Line 343 | Line 334 | void AlphaHull::computeHull(std::vector<StuntDouble*>
334          RealType mass;
335          ver++;
336          virtexlist.push_back(id);
337 <      }
347 <      facetlist.push_back(virtexlist);
337 >        // std::cout << "Ridge: " << ridgesCount << " Vertex " << id << std::endl;
338  
339 +        vel = bodydoubles[id]->getVel();
340 +        mass = bodydoubles[id]->getMass();
341 +        face.addVertexSD(bodydoubles[id]);
342 +
343 +
344 +        faceVel = faceVel + vel;
345 +        faceMass = faceMass + mass;
346 +      } //FOREACH Vertex
347 +      facetlist.push_back(virtexlist);
348 +      face.addVertices(p[0],p[1],p[2]);
349 +      face.setFacetMass(faceMass);
350 +      face.setFacetVelocity(faceVel / RealType(3.0));
351 +      
352 +      RealType area = face.getArea();
353 +      area_ += area;
354 +      Vector3d normal = face.getUnitNormal();
355 +      RealType offset =  ((0.0-p[0][0])*normal[0] + (0.0-p[0][1])*normal[1] + (0.0-p[0][2])*normal[2]);
356 +      RealType dist =  normal[0] * interiorPoint[0] + normal[1]*interiorPoint[1] + normal[2]*interiorPoint[2];
357 +      std::cout << "Dist and normal and area are: " << normal << std::endl;
358 +      volume_ += dist *area/qh hull_dim;
359 +      
360 +      Triangles_.push_back(face);
361      }
362    }
351                
363  
364 < //assert(pm.cm.fn == ridgesCount);
364 >  std::cout << "Volume is: " << volume_ << std::endl;
365  
366 + //assert(pm.cm.fn == ridgesCount);
367 + /*
368    std::cout <<"OFF"<<std::endl;
369    std::cout << bodydoubles.size() << "  " << facetlist.size() << "  " << 3*facetlist.size() << std::endl;
370    for (SD =bodydoubles.begin(); SD != bodydoubles.end(); ++SD){
# Line 370 | Line 383 | void AlphaHull::computeHull(std::vector<StuntDouble*>
383      }
384      std::cout << std::endl;
385    }
386 + */
387  
388  
389  
376
390   /*  
391    FORALLfacets {  
392      Triangle face;
# Line 438 | Line 451 | void AlphaHull::computeHull(std::vector<StuntDouble*>
451  
452    } //FORALLfacets
453   */
454 <  qh_getarea(qh facet_list);
455 <  volume_ = qh totvol;
456 <  area_ = qh totarea;
454 >  // qh_getarea(qh facet_list);
455 >  //volume_ = qh totvol;
456 >  // area_ = qh totarea;
457  
458    qh_freeqhull(!qh_ALL);
459    qh_memfreeshort(&curlong, &totlong);

Comparing:
trunk/src/math/AlphaHull.cpp (property svn:keywords), Revision 1402 by chuckv, Fri Jan 8 17:15:27 2010 UTC vs.
branches/development/src/math/AlphaHull.cpp (property svn:keywords), Revision 1704 by gezelter, Tue Apr 24 20:40:04 2012 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines