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 1825 by gezelter, Wed Jan 9 19:27:52 2013 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) {
75  
76    int numpoints = bodydoubles.size();
77 <  bool alphashape=true;
77 >  // bool alphashape=true;
78    
79    Triangles_.clear();
80    
81 <  vertexT *vertex, **vertexp;
81 >  vertexT *vertex;
82 >  // vertexT **vertexp;
83    facetT *facet, *neighbor;
84 <  setT *vertices;
84 >  // setT *vertices, *verticestop, *verticesbottom;
85    int curlong, totlong;
86 +  pointT *interiorPoint;
87    
88    std::vector<double> ptArray(numpoints*dim_);
89  
# Line 243 | Line 234 | void AlphaHull::computeHull(std::vector<StuntDouble*>
234    qh visit_id++;
235    int numFacets=0;
236    std::vector<std::vector <int> > facetlist;
237 +  interiorPoint = qh interior_point;
238    FORALLfacet_(qh facet_list) {
239      numFacets++;
240      if (!facet->upperdelaunay) {
# Line 307 | Line 299 | void AlphaHull::computeHull(std::vector<StuntDouble*>
299    //assert(numFacets== qh num_facets);
300    
301    //Filter the triangles (only the ones on the boundary of the alpha complex) and build the mesh
302 +
303 +
304    
305    ridgeT *ridge, **ridgep;
306    FOREACHridge_(set) {
# Line 319 | Line 313 | void AlphaHull::computeHull(std::vector<StuntDouble*>
313        // Vector3d V3dNormal(facet->normal[0], facet->normal[1], facet->normal[2]);
314        //face.setNormal(V3dNormal);
315        
322      // RealType faceArea = qh_facetarea(facet);
323      //face.setArea(faceArea);
316        
317 <      //vertices = qh_facet3vertex(facet);
318 <      
327 <      //coordT *center = qh_getcenter(vertices);
317 >      //coordT *center = qh_getcenter(ridge->vertices);
318 >      //std::cout << "Centers are " << center[0] << "  " <<center[1] << "  " << center[2] << std::endl;
319        //Vector3d V3dCentroid(center[0], center[1], center[2]);
320        //face.setCentroid(V3dCentroid);
321 +
322        
323 <      //Vector3d faceVel = V3Zero;
323 >      Vector3d faceVel = V3Zero;
324        Vector3d p[3];
325 <      //RealType faceMass = 0.0;
325 >      RealType faceMass = 0.0;
326        
327        int ver = 0;
328        std::vector<int> virtexlist;
# Line 343 | Line 335 | void AlphaHull::computeHull(std::vector<StuntDouble*>
335          RealType mass;
336          ver++;
337          virtexlist.push_back(id);
338 <      }
347 <      facetlist.push_back(virtexlist);
338 >        // std::cout << "Ridge: " << ridgesCount << " Vertex " << id << std::endl;
339  
340 +        vel = bodydoubles[id]->getVel();
341 +        mass = bodydoubles[id]->getMass();
342 +        face.addVertexSD(bodydoubles[id]);
343 +
344 +
345 +        faceVel = faceVel + vel;
346 +        faceMass = faceMass + mass;
347 +      } //FOREACH Vertex
348 +      facetlist.push_back(virtexlist);
349 +      face.addVertices(p[0],p[1],p[2]);
350 +      face.setFacetMass(faceMass);
351 +      face.setFacetVelocity(faceVel / RealType(3.0));
352 +      
353 +      RealType area = face.getArea();
354 +      area_ += area;
355 +      Vector3d normal = face.getUnitNormal();
356 +      RealType offset =  ((0.0-p[0][0])*normal[0] + (0.0-p[0][1])*normal[1] + (0.0-p[0][2])*normal[2]);
357 +      RealType dist =  normal[0] * interiorPoint[0] + normal[1]*interiorPoint[1] + normal[2]*interiorPoint[2];
358 +      std::cout << "Dist and normal and area are: " << normal << std::endl;
359 +      volume_ += dist *area/qh hull_dim;
360 +      
361 +      Triangles_.push_back(face);
362      }
363    }
351                
364  
365 < //assert(pm.cm.fn == ridgesCount);
365 >  std::cout << "Volume is: " << volume_ << std::endl;
366  
367 + //assert(pm.cm.fn == ridgesCount);
368 + /*
369    std::cout <<"OFF"<<std::endl;
370    std::cout << bodydoubles.size() << "  " << facetlist.size() << "  " << 3*facetlist.size() << std::endl;
371    for (SD =bodydoubles.begin(); SD != bodydoubles.end(); ++SD){
# Line 370 | Line 384 | void AlphaHull::computeHull(std::vector<StuntDouble*>
384      }
385      std::cout << std::endl;
386    }
387 + */
388  
389  
390  
376
391   /*  
392    FORALLfacets {  
393      Triangle face;
# Line 438 | Line 452 | void AlphaHull::computeHull(std::vector<StuntDouble*>
452  
453    } //FORALLfacets
454   */
455 <  qh_getarea(qh facet_list);
456 <  volume_ = qh totvol;
457 <  area_ = qh totarea;
455 >  // qh_getarea(qh facet_list);
456 >  //volume_ = qh totvol;
457 >  // area_ = qh totarea;
458  
459    qh_freeqhull(!qh_ALL);
460    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 1825 by gezelter, Wed Jan 9 19:27:52 2013 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines