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

Comparing branches/development/src/nonbonded/SHAPES.cpp (file contents):
Revision 1501 by gezelter, Wed Sep 15 19:32:10 2010 UTC vs.
Revision 1502 by gezelter, Sat Oct 2 19:53:32 2010 UTC

# Line 50 | Line 50 | namespace OpenMD {
50   using namespace std;
51   namespace OpenMD {
52    
53  bool SHAPES::initialized_ = false;
54  int SHAPES::lMax_ = 64;
55  int SHAPES::mMax_ = 64;
56  ForceField* SHAPES::forceField_ = NULL;
57  map<int, AtomType*> SHAPES::ShapesMap;
58  map<pair<AtomType*, AtomType*>, SHAPESInteractionData> SHAPES::MixingMap;
59  
60  SHAPES* SHAPES::_instance = NULL;
53  
54 <  SHAPES* SHAPES::Instance() {
55 <    if (!_instance) {
56 <      _instance = new SHAPES();
57 <    }
58 <    return _instance;
54 >  SHAPES::SHAPES() {
55 >    initialized_ = false;
56 >    lMax_ = 64;
57 >    mMax_ = 64;
58 >    forceField_ = NULL;
59    }
60 <
60 >  
61    void SHAPES::initialize() {    
62      
63      ForceFieldOptions& fopts = forceField_->getForceFieldOptions();
# Line 75 | Line 67 | namespace OpenMD {
67  
68      // SHAPES handles all of the SHAPES-SHAPES interactions as well as
69      // SHAPES-LJ cross interactions:
70 <
70 >    
71      for (at = atomTypes->beginType(i); at != NULL;
72           at = atomTypes->nextType(i)) {
73        
74        if (at->isShape() || at->isLennardJones())
75          addType(at);
76      }
77 <  
77 >    
78      initialized_ = true;
79    }
80 <      
80 >  
81    void SHAPES::addType(AtomType* atomType){
82      // add it to the map:
83      AtomTypeProperties atp = atomType->getATP();    
84 <
84 >    
85      pair<map<int,AtomType*>::iterator,bool> ret;    
86      ret = ShapesMap.insert( pair<int, AtomType*>(atp.ident, atomType) );
87      if (ret.second == false) {
# Line 111 | Line 103 | namespace OpenMD {
103          simError();
104        }
105        ShapesMap.insert( pair<int, ShapeAtomType*>(atp.ident, sAtomType) );
106 <
106 >      
107      } else if (atomType->isLennardJones()) {
108 <      d1 = LJ::Instance()->getSigma(atomType) / sqrt(2.0);
109 <      e1 = LJ::Instance()->getEpsilon(atomType);
108 >      d1 = getLJSigma(atomType) / sqrt(2.0);
109 >      e1 = getLJEpsilon(atomType);
110      } else {
111        sprintf( painCave.errMsg,
112                 "SHAPES::addType was passed an atomType (%s) that does not\n"
113 <               "\tappear to be a Gay-Berne or Lennard-Jones atom.\n",
113 >               "\tappear to be a SHAPES or Lennard-Jones atom.\n",
114                 atomType->getName().c_str());
115        painCave.severity = OPENMD_ERROR;
116        painCave.isFatal = 1;
117        simError();
118      }
119 <      
119 >    
120  
121      // Now, iterate over all known types and add to the mixing map:
122      
# Line 143 | Line 135 | namespace OpenMD {
135          er2 = gb2.SHAPES_eps_ratio;
136          dw2 = gb2.SHAPES_dw;
137        } else if (atype2->isLennardJones()) {
138 <        d2 = LJ::Instance()->getSigma(atype2) / sqrt(2.0);
139 <        e2 = LJ::Instance()->getEpsilon(atype2);
138 >        d2 = getLJSigma(atype2) / sqrt(2.0);
139 >        e2 = getLJEpsilon(atype2);
140          l2 = d2;
141          er2 = 1.0;
142          dw2 = 1.0;
# Line 192 | Line 184 | namespace OpenMD {
184    }
185    
186  
187 +  LJParam SHAPES::getLJParam(AtomType* atomType) {
188 +    
189 +    // Do sanity checking on the AtomType we were passed before
190 +    // building any data structures:
191 +    if (!atomType->isLennardJones()) {
192 +      sprintf( painCave.errMsg,
193 +               "SHAPES::getLJParam was passed an atomType (%s) that does not\n"
194 +               "\tappear to be a Lennard-Jones atom.\n",
195 +               atomType->getName().c_str());
196 +      painCave.severity = OPENMD_ERROR;
197 +      painCave.isFatal = 1;
198 +      simError();
199 +    }
200 +    
201 +    GenericData* data = atomType->getPropertyByName("LennardJones");
202 +    if (data == NULL) {
203 +      sprintf( painCave.errMsg, "SHAPES::getLJParam could not find Lennard-Jones\n"
204 +               "\tparameters for atomType %s.\n", atomType->getName().c_str());
205 +      painCave.severity = OPENMD_ERROR;
206 +      painCave.isFatal = 1;
207 +      simError();
208 +    }
209 +    
210 +    LJParamGenericData* ljData = dynamic_cast<LJParamGenericData*>(data);
211 +    if (ljData == NULL) {
212 +      sprintf( painCave.errMsg,
213 +               "SHAPES::getLJParam could not convert GenericData to LJParam for\n"
214 +               "\tatom type %s\n", atomType->getName().c_str());
215 +      painCave.severity = OPENMD_ERROR;
216 +      painCave.isFatal = 1;
217 +      simError();          
218 +    }
219 +    
220 +    return ljData->getData();
221 +  }
222 +  
223 +  RealType SHAPES::getLJEpsilon(AtomType* atomType) {    
224 +    LJParam ljParam = getLJParam(atomType);
225 +    return ljParam.epsilon;
226 +  }
227 +  RealType SHAPES::getLJSigma(AtomType* atomType) {    
228 +    LJParam ljParam = getLJParam(atomType);
229 +    return ljParam.sigma;
230 +  }
231 +
232    RealType SHAPES::getGayBerneCut(int atid) {
233      if (!initialized_) initialize();
234      std::map<int, AtomType*> :: const_iterator it;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines