ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/hydrodynamics/RoughShell.cpp
(Generate patch)

Comparing trunk/src/applications/hydrodynamics/RoughShell.cpp (file contents):
Revision 898 by tim, Wed Mar 15 15:51:44 2006 UTC vs.
Revision 921 by tim, Wed Mar 29 18:09:26 2006 UTC

# Line 40 | Line 40
40   */
41  
42   #include "applications/hydrodynamics/RoughShell.hpp"
43 <
43 > #include "applications/hydrodynamics/ShapeBuilder.hpp"
44 > #include "brains/SimInfo.hpp"
45   namespace oopse {
46  
47 < RoughShell::RoughShell(StuntDouble* sd, const DynamicProperty& extraParams) : HydrodynamicsModel(sd, extraParams), sdShape_(sd){
48 <    DynamicProperty::const_iterator iter = extraParams.find("Sigma");
49 <    if (iter != extraParams.end()) {
50 <        boost::any param = iter->second;
51 <        sigma_ = boost::any_cast<double>(param);
47 > RoughShell::RoughShell(StuntDouble* sd, SimInfo* info) : ApproximationModel(sd, info){
48 >    shape_=ShapeBuilder::createShape(sd);
49 >    Globals* simParams = info->getSimParams();
50 >    if (simParams->haveBeadSize()) {
51 >        sigma_ = simParams->getBeadSize();
52      }else {
53 <        std::cout << "RoughShell Model Error\n" ;
53 >
54      }
55   }
56  
# Line 75 | Line 76 | bool RoughShell::createBeads(std::vector<BeadParam>& b
76  
77   };
78   bool RoughShell::createBeads(std::vector<BeadParam>& beads) {
79 <    std::pair<Vector3d, Vector3d> boxBoundary = sdShape_.getBox();
80 <    double len = boxBoundary.second[0] - boxBoundary.first[0];
81 <    int numLattices = static_cast<int>(len/sigma_) + 1;
79 >    std::pair<Vector3d, Vector3d> boxBoundary = shape_->getBox();
80 >    double firstMin = std::min(std::min(boxBoundary.first[0], boxBoundary.first[1]), boxBoundary.first[2]);
81 >    double secondMax = std::max(std::max(boxBoundary.second[0], boxBoundary.second[1]), boxBoundary.second[2]);
82 >    double len = secondMax - firstMin;
83 >    int numLattices = static_cast<int>(len/sigma_) + 2;
84      Grid3D<BeadLattice>  grid(numLattices, numLattices, numLattices);
85  
86      //fill beads
# Line 85 | Line 88 | bool RoughShell::createBeads(std::vector<BeadParam>& b
88          for (int j = 0; j < numLattices; ++j) {
89              for (int k = 0; k < numLattices; ++k) {
90                  BeadLattice& currentBead = grid(i, j, k);
91 <                currentBead.origin = Vector3d(i*sigma_ + boxBoundary.first[0], j *sigma_ + boxBoundary.first[1], k*sigma_+ boxBoundary.first[2]);
91 >                currentBead.origin = Vector3d((i-1)*sigma_ + boxBoundary.first[0], (j-1) *sigma_ + boxBoundary.first[1], (k-1)*sigma_+ boxBoundary.first[2]);
92                  currentBead.radius = sigma_;
93 <                currentBead.interior = sdShape_.isInterior(grid(i, j, k).origin);                
93 >                currentBead.interior = shape_->isInterior(grid(i, j, k).origin);                
94              }
95          }
96      }
# Line 99 | Line 102 | bool RoughShell::createBeads(std::vector<BeadParam>& b
102                   std::vector<BeadLattice> neighborCells = grid.getAllNeighbors(i, j, k);
103                   //if one of its neighbor cells is exterior, current cell is on the surface
104  
105 <                 std::vector<BeadLattice>::iterator ei = std::find_if(neighborCells.begin(), neighborCells.end(), ExteriorFunctor());                
106 <                 std::vector<BeadLattice>::iterator ii = std::find_if(neighborCells.begin(), neighborCells.end(), InteriorFunctor());                
107 <                
108 <                  if (ei != neighborCells.end() && ii != neighborCells.end()) {
105 >                 if (grid(i, j, k).interior){
106 >
107 >                    bool allNeighBorIsInterior = true;
108 >                    for (std::vector<BeadLattice>::iterator l = neighborCells.begin(); l != neighborCells.end(); ++l) {
109 >                        if (!l->interior) {
110 >                            allNeighBorIsInterior = false;
111 >                            break;
112 >                        }
113 >                    }
114 >
115 >                    if (allNeighBorIsInterior)
116 >                        continue;
117 >
118                        BeadParam surfaceBead;
119 <                      surfaceBead.atomName = "Bead";
119 >                      surfaceBead.atomName = "H";
120                        surfaceBead.pos = grid(i, j, k).origin;
121                        surfaceBead.radius = grid(i, j, k).radius;
122 <                      beads.push_back(surfaceBead);
111 <                  }
122 >                      beads.push_back(surfaceBead);                    
123  
124 +                 }
125              }
126          }
127      }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines