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

Comparing:
trunk/src/applications/hydrodynamics/RoughShell.cpp (file contents), Revision 906 by tim, Fri Mar 17 23:20:35 2006 UTC vs.
branches/development/src/applications/hydrodynamics/RoughShell.cpp (file contents), Revision 1562 by gezelter, Thu May 12 17:00:14 2011 UTC

# Line 6 | Line 6
6   * redistribute this software in source and binary code form, provided
7   * that the following conditions are met:
8   *
9 < * 1. Acknowledgement of the program authors must be made in any
10 < *    publication of scientific results based in part on use of the
11 < *    program.  An acceptable form of acknowledgement is citation of
12 < *    the article in which the program was described (Matthew
13 < *    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 < *    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 < *    Parallel Simulation Engine for Molecular Dynamics,"
16 < *    J. Comput. Chem. 26, pp. 252-271 (2005))
17 < *
18 < * 2. Redistributions of source code must retain the above copyright
9 > * 1. Redistributions of source code must retain the above copyright
10   *    notice, this list of conditions and the following disclaimer.
11   *
12 < * 3. Redistributions in binary form must reproduce the above copyright
12 > * 2. Redistributions in binary form must reproduce the above copyright
13   *    notice, this list of conditions and the following disclaimer in the
14   *    documentation and/or other materials provided with the
15   *    distribution.
# Line 37 | Line 28
28   * arising out of the use of or inability to use software, even if the
29   * University of Notre Dame has been advised of the possibility of
30   * such damages.
31 + *
32 + * SUPPORT OPEN SCIENCE!  If you use OpenMD or its source code in your
33 + * research, please cite the appropriate papers when you publish your
34 + * work.  Good starting points are:
35 + *                                                                      
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).                        
40   */
41  
42   #include "applications/hydrodynamics/RoughShell.hpp"
43   #include "applications/hydrodynamics/ShapeBuilder.hpp"
44   #include "brains/SimInfo.hpp"
45 namespace oopse {
45  
46 < RoughShell::RoughShell(StuntDouble* sd, SimInfo* info) : ApproximationModel(sd, info){
46 > namespace OpenMD {
47 >  
48 >  RoughShell::RoughShell(StuntDouble* sd, SimInfo* info) : ApproximationModel(sd, info){
49      shape_=ShapeBuilder::createShape(sd);
50      Globals* simParams = info->getSimParams();
51      if (simParams->haveBeadSize()) {
52 <        sigma_ = simParams->getBeadSize();
52 >      sigma_ = simParams->getBeadSize();
53      }else {
54 <
54 >      
55      }
56 < }
57 <
58 < struct BeadLattice {
56 >  }
57 >  
58 >  struct BeadLattice {
59      Vector3d origin;
60 <    double radius;
60 >    RealType radius;
61      bool interior;
62 < };
63 <
64 < struct ExteriorFunctor : public std::unary_function<BeadLattice, bool>{
65 <
62 >  };
63 >  
64 >  struct ExteriorFunctor : public std::unary_function<BeadLattice, bool>{
65 >    
66      bool operator() (const BeadLattice& bead) {
67 <        return !bead.interior;
67 >      return !bead.interior;
68      }
69 <
70 < };
71 <
72 < struct InteriorFunctor  : public std::unary_function<BeadLattice, bool>{
73 <
69 >    
70 >  };
71 >  
72 >  struct InteriorFunctor  : public std::unary_function<BeadLattice, bool>{
73 >    
74      bool operator() (const BeadLattice& bead) {
75 <        return bead.interior;
75 >      return bead.interior;
76      }
77 <
78 < };
79 < bool RoughShell::createBeads(std::vector<BeadParam>& beads) {
80 <    std::pair<Vector3d, Vector3d> boxBoundary = shape_->getBox();
81 <    double len = boxBoundary.second[0] - boxBoundary.first[0];
82 <    int numLattices = static_cast<int>(len/sigma_) + 1;
77 >    
78 >  };
79 >  bool RoughShell::createBeads(std::vector<BeadParam>& beads) {
80 >    std::pair<Vector3d, Vector3d> boxBoundary = shape_->getBoundingBox();
81 >    RealType firstMin = std::min(std::min(boxBoundary.first[0], boxBoundary.first[1]), boxBoundary.first[2]);
82 >    RealType secondMax = std::max(std::max(boxBoundary.second[0], boxBoundary.second[1]), boxBoundary.second[2]);
83 >    RealType len = secondMax - firstMin;
84 >    int numLattices = static_cast<int>(len/sigma_) + 2;
85      Grid3D<BeadLattice>  grid(numLattices, numLattices, numLattices);
86 <
86 >    
87      //fill beads
88      for (int i = 0; i < numLattices; ++i) {
89 <        for (int j = 0; j < numLattices; ++j) {
90 <            for (int k = 0; k < numLattices; ++k) {
91 <                BeadLattice& currentBead = grid(i, j, k);
92 <                currentBead.origin = Vector3d(i*sigma_ + boxBoundary.first[0], j *sigma_ + boxBoundary.first[1], k*sigma_+ boxBoundary.first[2]);
93 <                currentBead.radius = sigma_;
94 <                currentBead.interior = shape_->isInterior(grid(i, j, k).origin);                
92 <            }
89 >      for (int j = 0; j < numLattices; ++j) {
90 >        for (int k = 0; k < numLattices; ++k) {
91 >          BeadLattice& currentBead = grid(i, j, k);
92 >          currentBead.origin = Vector3d((i-1)*sigma_ + boxBoundary.first[0], (j-1) *sigma_ + boxBoundary.first[1], (k-1)*sigma_+ boxBoundary.first[2]);
93 >          currentBead.radius = sigma_ / 2.0;
94 >          currentBead.interior = shape_->isInterior(grid(i, j, k).origin);                
95          }
96 +      }
97      }
98 <
98 >    
99      //remove embedded beads
100      for (int i = 0; i < numLattices; ++i) {
101 <        for (int j = 0; j < numLattices; ++j) {
102 <            for (int k = 0; k < numLattices; ++k) {
103 <                 std::vector<BeadLattice> neighborCells = grid.getAllNeighbors(i, j, k);
104 <                 //if one of its neighbor cells is exterior, current cell is on the surface
105 <
106 <                 std::vector<BeadLattice>::iterator ei = std::find_if(neighborCells.begin(), neighborCells.end(), ExteriorFunctor());                
107 <                 std::vector<BeadLattice>::iterator ii = std::find_if(neighborCells.begin(), neighborCells.end(), InteriorFunctor());                
108 <                
109 <                  if (ei != neighborCells.end() && ii != neighborCells.end()) {
110 <                      BeadParam surfaceBead;
111 <                      surfaceBead.atomName = "Bead";
112 <                      surfaceBead.pos = grid(i, j, k).origin;
113 <                      surfaceBead.radius = grid(i, j, k).radius;
111 <                      beads.push_back(surfaceBead);
112 <                  }
113 <
101 >      for (int j = 0; j < numLattices; ++j) {
102 >        for (int k = 0; k < numLattices; ++k) {
103 >          std::vector<BeadLattice> neighborCells = grid.getAllNeighbors(i, j, k);
104 >          //if one of its neighbor cells is exterior, current cell is on the surface
105 >          
106 >          if (grid(i, j, k).interior){
107 >            
108 >            bool allNeighBorIsInterior = true;
109 >            for (std::vector<BeadLattice>::iterator l = neighborCells.begin(); l != neighborCells.end(); ++l) {
110 >              if (!l->interior) {
111 >                allNeighBorIsInterior = false;
112 >                break;
113 >              }
114              }
115 +            
116 +            if (allNeighBorIsInterior)
117 +              continue;
118 +            
119 +            BeadParam surfaceBead;
120 +            surfaceBead.atomName = "H";
121 +            surfaceBead.pos = grid(i, j, k).origin;
122 +            surfaceBead.radius = grid(i, j, k).radius;
123 +            beads.push_back(surfaceBead);                    
124 +            
125 +          }
126          }
127 +      }
128      }
129 <    
129 >    
130      return true;
131 +  }
132 +  
133   }
120
121 }

Comparing:
trunk/src/applications/hydrodynamics/RoughShell.cpp (property svn:keywords), Revision 906 by tim, Fri Mar 17 23:20:35 2006 UTC vs.
branches/development/src/applications/hydrodynamics/RoughShell.cpp (property svn:keywords), Revision 1562 by gezelter, Thu May 12 17:00:14 2011 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines