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

Comparing trunk/src/lattice/shapedLattice.cpp (file contents):
Revision 923 by chuckv, Wed Mar 29 19:17:20 2006 UTC vs.
Revision 1390 by gezelter, Wed Nov 25 20:02:06 2009 UTC

# Line 5 | Line 5
5   * redistribute this software in source and binary code form, provided
6   * that the following conditions are met:
7   *
8 < * 1. Acknowledgement of the program authors must be made in any
9 < *    publication of scientific results based in part on use of the
10 < *    program.  An acceptable form of acknowledgement is citation of
11 < *    the article in which the program was described (Matthew
12 < *    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
13 < *    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
14 < *    Parallel Simulation Engine for Molecular Dynamics,"
15 < *    J. Comput. Chem. 26, pp. 252-271 (2005))
16 < *
17 < * 2. Redistributions of source code must retain the above copyright
8 > * 1. Redistributions of source code must retain the above copyright
9   *    notice, this list of conditions and the following disclaimer.
10   *
11 < * 3. Redistributions in binary form must reproduce the above copyright
11 > * 2. Redistributions in binary form must reproduce the above copyright
12   *    notice, this list of conditions and the following disclaimer in the
13   *    documentation and/or other materials provided with the
14   *    distribution.
# Line 37 | Line 28
28   * University of Notre Dame has been advised of the possibility of
29   * such damages.
30   *
31 + * SUPPORT OPEN SCIENCE!  If you use OpenMD or its source code in your
32 + * research, please cite the appropriate papers when you publish your
33 + * work.  Good starting points are:
34 + *                                                                      
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).                        
39   *
40 + *
41   *  sphericalLattice.cpp
42   *
43   *  Created by Charles F. Vardeman II on 17 Feb 2006.
44   *  @author  Charles F. Vardeman II
45 < *  @version $Id: shapedLattice.cpp,v 1.3 2006-03-29 19:17:20 chuckv Exp $
45 > *  @version $Id: shapedLattice.cpp,v 1.8 2009-11-25 20:02:01 gezelter Exp $
46   *
47   */
48  
49 <
49 > #include <cstdlib>
50   #include "lattice/shapedLattice.hpp"
51   #include "math/Vector3.hpp"
52   #include "brains/Register.hpp"
53   #include "lattice/LatticeFactory.hpp"
54  
55 < namespace oopse{
56 <        shapedLattice::shapedLattice(double latticeConstant,
55 > namespace OpenMD{
56 >  shapedLattice::shapedLattice(RealType latticeConstant,
57                                 std::string latticeType) {
58 <                latticeConstant_ = latticeConstant;
59 <                latticeType_ = latticeType;
60 <                registerLattice();
61 <                simpleLattice_ = LatticeFactory::getInstance()->createLattice(latticeType);
62 <                if (simpleLattice_ == NULL){
63 <                        std::cerr << "shapedLattice:: Error creating lattice" << std::endl;
64 <                        exit(1);
65 <                }
58 >    latticeConstant_ = latticeConstant;
59 >    latticeType_ = latticeType;
60 >    registerLattice();
61 >    simpleLattice_ = LatticeFactory::getInstance()->createLattice(latticeType);
62 >    if (simpleLattice_ == NULL){
63 >      std::cerr << "shapedLattice:: Error creating lattice" << std::endl;
64 >      exit(1);
65 >    }
66                  
67 <                //Set the lattice constant
68 <    std::vector<double> lc;
67 >    //Set the lattice constant
68 >    std::vector<RealType> lc;
69      lc.push_back(latticeConstant_);
70 <                simpleLattice_->setLatticeConstant(lc);
71 <        }
72 <        
73 <  
74 <  
70 >    simpleLattice_->setLatticeConstant(lc);
71 >    sitesComputed_ = false;
72 >  }
73 >    
74    void shapedLattice::setGridDimension(Vector3d dimension){
75      dimension_ = dimension;
76 <                // Find number of unit cells in each direction
77 <                beginNx_ = -(int) ceil(0.5*dimension_[0]/latticeConstant_) ;
78 <                beginNy_ = -(int) ceil(0.5*dimension_[1]/latticeConstant_) ;
79 <                beginNz_ = -(int) ceil(0.5*dimension_[2]/latticeConstant_) ;    
76 >    // Find     number of unit cells in each direction
77 >    beginNx_ = -(int) ceil(0.5*dimension_[0]/latticeConstant_) ;
78 >    beginNy_ = -(int) ceil(0.5*dimension_[1]/latticeConstant_) ;
79 >    beginNz_ = -(int) ceil(0.5*dimension_[2]/latticeConstant_) ;    
80      endNx_ = (int) ceil(0.5*dimension_[0]/latticeConstant_);
81 <                endNy_ = (int) ceil(0.5*dimension_[1]/latticeConstant_);
82 <                endNz_ = (int) ceil(0.5*dimension_[2]/latticeConstant_);    
81 >    endNy_ = (int) ceil(0.5*dimension_[1]/latticeConstant_);
82 >    endNz_ = (int) ceil(0.5*dimension_[2]/latticeConstant_);  
83 >    sitesComputed_ = false;  
84    }
85 +
86 +  void shapedLattice::setOrigin(Vector3d origin){
87 +    origin_ = origin;
88 +    simpleLattice_->setOrigin(origin_);
89 +    sitesComputed_ = false;  
90 +  }
91    
92 <  
93 <  
94 <    std::vector<Vector3d> shapedLattice::getPoints(){
95 <                        std::vector<Vector3d> latticePos;
96 <                        
97 <      
98 <      std::vector<Vector3d> pointsOrt =  simpleLattice_->getLatticePointsOrt();
99 <      int numMolPerCell = simpleLattice_->getNumSitesPerCell();
100 <      for(int i = beginNx_; i < endNx_; i++) {    
101 <        for(int j = beginNy_; j < endNy_; j++) {      
102 <          for(int k = beginNz_; k < endNz_; k++) {
103 <            //get the position of the cell sites
104 <            simpleLattice_->getLatticePointsPos(latticePos, i, j, k);
105 <            
106 <            for(int l = 0; l < numMolPerCell; l++) {
107 <              
108 <              
109 <              if (isInterior(latticePos[l])){
110 <                Vector3d myPoint = latticePos[l];
111 <                Vector3d myOrt = pointsOrt[l];
106 <                coords_.push_back(myPoint);
107 <                coordsOrt_.push_back(myOrt);
108 <              }
92 >  void shapedLattice::findSites(){
93 >
94 >    sites_.clear();
95 >    orientations_.clear();
96 >
97 >    std::vector<Vector3d> latticePos;                        
98 >    std::vector<Vector3d> pointsOrt =  simpleLattice_->getLatticePointsOrt();
99 >    int numMolPerCell = simpleLattice_->getNumSitesPerCell();  
100 >
101 >    for(int i = beginNx_; i < endNx_; i++) {    
102 >      for(int j = beginNy_; j < endNy_; j++) {      
103 >        for(int k = beginNz_; k < endNz_; k++) {
104 >          //get the position of the cell sites
105 >          simpleLattice_->getLatticePointsPos(latticePos, i, j, k);            
106 >          for(int l = 0; l < numMolPerCell; l++) {              
107 >            if (isInterior(latticePos[l])){
108 >              Vector3d myPoint = latticePos[l];
109 >              Vector3d myOrt = pointsOrt[l];
110 >              sites_.push_back(myPoint);
111 >              orientations_.push_back(myOrt);
112              }
113            }
114          }
115        }
116 <      
117 <      return coords_;
118 <      
119 <                }      
116 >    }
117 >    sitesComputed_ = true;
118 >  }
119 >
120 >  std::vector<Vector3d> shapedLattice::getSites() {
121 >    if (!sitesComputed_) {
122 >      findSites();
123 >    }
124 >    return sites_;
125 >  }
126 >
127 >  std::vector<Vector3d> shapedLattice::getOrientations() {
128 >    if (!sitesComputed_) {
129 >      findSites();
130 >    }
131 >    return orientations_;
132 >  }
133   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines