ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/math/ConvexHull.cpp
(Generate patch)

Comparing trunk/OOPSE-4/src/math/ConvexHull.cpp (file contents):
Revision 3473 by chuckv, Fri Nov 14 15:44:34 2008 UTC vs.
Revision 3544 by chuckv, Mon Oct 19 17:44:18 2009 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 2008 The University of Notre Dame. All Rights Reserved.
1 > /* Copyright (c) 2008, 2009 The University of Notre Dame. All Rights Reserved.
2   *
3   * The University of Notre Dame grants you ("Licensee") a
4   * non-exclusive, royalty free, license to use, modify and
# Line 44 | Line 44
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.13 2008-11-14 15:44:34 chuckv Exp $
47 > *  @version $Id: ConvexHull.cpp,v 1.15 2009-10-19 17:44:18 chuckv Exp $
48   *
49   */
50  
# Line 297 | Line 297 | void ConvexHull::computeHull(std::vector<StuntDouble*>
297  
298    }
299    
300  std::cout << "Number of surface atoms is: " << Ns_ << std::endl;
300    
301  
302  
# Line 503 | Line 502 | void ConvexHull::computeHull(std::vector<StuntDouble*>
502      localVel.push_back(vel.y());
503      localVel.push_back(vel.z());
504  
505 +
506      RealType bdmass = bodydoubles[idx]->getMass();
507      localMass.push_back(bdmass);
508  
509      localPtsMap.push_back(idx);
510  
511
511    }
512  
513  
515
514    localPtArraySize = int(localPts.size()/3.0);
517
515  
516    MPI::COMM_WORLD.Allgather(&localPtArraySize,1,MPI::INT,&NstoProc_[0],1,MPI::INT);
517    
# Line 532 | Line 529 | void ConvexHull::computeHull(std::vector<StuntDouble*>
529    std::vector<double> globalVel(nglobalPts);
530    std::vector<double> globalMass(Nsglobal_);
531  
532 +
533 +  
534    isSurfaceID.resize(nglobalPts);
535  
536  
# Line 548 | Line 547 | void ConvexHull::computeHull(std::vector<StuntDouble*>
547      displs_[i] = displs_[i-1] + NstoProc_[i-1];
548    }
549    
550 <  int noffset = vecdispls_[myrank_];
550 >  int noffset = displs_[myrank_];
551    /* gather the potential hull */
552    
553 <  MPI::COMM_WORLD.Allgatherv(&localPts[0],localPtArraySize,MPI::DOUBLE,&globalPts[0],&vecNstoProc_[0],&vecdispls_[0],MPI::DOUBLE);
554 <  MPI::COMM_WORLD.Allgatherv(&localVel[0],localPtArraySize,MPI::DOUBLE,&globalVel[0],&vecNstoProc_[0],&vecdispls_[0],MPI::DOUBLE);
553 >  MPI::COMM_WORLD.Allgatherv(&localPts[0],localPtArraySize*3,MPI::DOUBLE,&globalPts[0],&vecNstoProc_[0],&vecdispls_[0],MPI::DOUBLE);
554 >  MPI::COMM_WORLD.Allgatherv(&localVel[0],localPtArraySize*3,MPI::DOUBLE,&globalVel[0],&vecNstoProc_[0],&vecdispls_[0],MPI::DOUBLE);
555    MPI::COMM_WORLD.Allgatherv(&localMass[0],localPtArraySize,MPI::DOUBLE,&globalMass[0],&NstoProc_[0],&displs_[0],MPI::DOUBLE);
556 +
557    /*
558 +  int tmpidx = 0;
559 +  
560    if (myrank_ == 0){
561 <    for (i = 0; i < globalPts.size(); i++){
562 <      std::cout << globalPts[i] << std::endl;
561 >    for (i = 0; i < nglobalPts-3; i++){      
562 >      std::cout << "Au   " << globalPts[tmpidx] << "  " << globalPts[tmpidx+1] << "  " << globalPts[tmpidx +2] << std::endl;
563 >      tmpidx = tmpidx + 3;
564      }
565    }
566    */
567 +  
568    // Free previous hull
569    qh_freeqhull(!qh_ALL);
570    qh_memfreeshort(&curlong, &totlong);
# Line 568 | Line 572 | void ConvexHull::computeHull(std::vector<StuntDouble*>
572      std::cerr << "qhull internal warning (main): did not free %d bytes of long memory (%d pieces) "
573                << totlong << curlong << std::endl;
574  
575 <  if (qh_new_qhull(dim_, nglobalPts, &globalPts[0], ismalloc,
575 >  if (qh_new_qhull(dim_, Nsglobal_, &globalPts[0], ismalloc,
576                      const_cast<char *>(options_.c_str()), NULL, stderr)){
577  
578        sprintf(painCave.errMsg, "ConvexHull: Qhull failed to compute global convex hull");
# Line 585 | Line 589 | void ConvexHull::computeHull(std::vector<StuntDouble*>
589  
590  
591      unsigned int nf = qh num_facets;
592 <    
592 >    
593      /* Build Surface SD list first */
594  
595      std::fill(isSurfaceID.begin(),isSurfaceID.end(),false);
596 <
596 >    int numvers = 0;
597      FORALLfacets {
598        
599        if (!facet->simplicial){
# Line 626 | Line 630 | void ConvexHull::computeHull(std::vector<StuntDouble*>
630          p[ver][2] = vertex->point[2];
631          int localindex = id;
632   #ifdef IS_MPI
633 <        Vector3d velVector(globalVel[dim_ * id],globalVel[dim_ * id + 1], globalVel[dim_ * id + 1]);
633 >        Vector3d velVector(globalVel[dim_ * id],globalVel[dim_ * id + 1], globalVel[dim_ * id + 2]);
634          
635          faceVel = faceVel + velVector;
636          faceMass = faceMass + globalMass[id];
637 <        if (id >= noffset/3 && id < (noffset + localPtArraySize)/3 ){
638 <          localindex = localPtsMap[id-noffset/3];
637 >        if (id >= noffset && id < (noffset + localPtArraySize) ){
638 >          
639 >          localindex = localPtsMap[id-noffset];
640   #else
641            faceVel = faceVel + bodydoubles[localindex]->getVel();
642            faceMass = faceMass + bodydoubles[localindex]->getMass();
# Line 644 | Line 649 | void ConvexHull::computeHull(std::vector<StuntDouble*>
649   #endif
650              
651              surfaceSDs_.push_back(bodydoubles[localindex]);
652 +            //   std::cout <<"This ID is: " << bodydoubles[localindex]->getGlobalIndex() << std::endl;
653              
654            } //IF isSurfaceID
655  
# Line 653 | Line 659 | void ConvexHull::computeHull(std::vector<StuntDouble*>
659            face.addVertexSD(NULL);
660            }
661   #endif
662 +        numvers++;
663          ver++;
664        } //Foreachvertex
665        /*
# Line 671 | Line 678 | void ConvexHull::computeHull(std::vector<StuntDouble*>
678  
679      } //FORALLfacets
680  
681 <    /*
681 >    /*    
682      std::cout << surfaceSDs_.size() << std::endl;
683      for (SD = surfaceSDs_.begin(); SD != surfaceSDs_.end(); ++SD){
684        Vector3d thisatom = (*SD)->getPos();
# Line 680 | Line 687 | void ConvexHull::computeHull(std::vector<StuntDouble*>
687      */
688  
689  
683
690      Ns_ = surfaceSDs_.size();
691      nTriangles_ = Triangles_.size();
692      

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines