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

Comparing branches/development/src/nonbonded/MAW.cpp (file contents):
Revision 1554 by gezelter, Sat Apr 30 02:54:02 2011 UTC vs.
Revision 1664 by gezelter, Tue Nov 22 14:37:41 2011 UTC

# Line 50 | Line 50 | namespace OpenMD {
50  
51   namespace OpenMD {
52  
53 <  MAW::MAW() : name_("MAW"), initialized_(false), forceField_(NULL),
54 <                   shiftedPot_(false), shiftedFrc_(false) {}
53 >  MAW::MAW() : name_("MAW"), initialized_(false), forceField_(NULL) {}
54    
55    void MAW::initialize() {    
56  
57      ForceField::NonBondedInteractionTypeContainer* nbiTypes = forceField_->getNonBondedInteractionTypes();
58      ForceField::NonBondedInteractionTypeContainer::MapTypeIterator j;
59      NonBondedInteractionType* nbt;
60 +    ForceField::NonBondedInteractionTypeContainer::KeyType keys;
61  
62      for (nbt = nbiTypes->beginType(j); nbt != NULL;
63           nbt = nbiTypes->nextType(j)) {
64        
65        if (nbt->isMAW()) {
66 <        pair<AtomType*, AtomType*> atypes = nbt->getAtomTypes();
67 <        
68 <        GenericData* data = nbt->getPropertyByName("MAW");
69 <        if (data == NULL) {
70 <          sprintf( painCave.errMsg, "MAW::initialize could not find\n"
71 <                   "\tMAW parameters for %s - %s interaction.\n",
72 <                   atypes.first->getName().c_str(),
73 <                   atypes.second->getName().c_str());
74 <          painCave.severity = OPENMD_ERROR;
75 <          painCave.isFatal = 1;
76 <          simError();
77 <        }
78 <        
79 <        MAWData* mawData = dynamic_cast<MAWData*>(data);
80 <        if (mawData == NULL) {
66 >        keys = nbiTypes->getKeys(j);
67 >        AtomType* at1 = forceField_->getAtomType(keys[0]);
68 >        AtomType* at2 = forceField_->getAtomType(keys[1]);
69 >
70 >        MAWInteractionType* mit = dynamic_cast<MAWInteractionType*>(nbt);
71 >
72 >        if (mit == NULL) {
73            sprintf( painCave.errMsg,
74 <                   "MAW::initialize could not convert GenericData to\n"
75 <                   "\tMAWData for %s - %s interaction.\n",
76 <                   atypes.first->getName().c_str(),
77 <                   atypes.second->getName().c_str());
74 >                   "MAW::initialize could not convert NonBondedInteractionType\n"
75 >                   "\tto MAWInteractionType for %s - %s interaction.\n",
76 >                   at1->getName().c_str(),
77 >                   at2->getName().c_str());
78            painCave.severity = OPENMD_ERROR;
79            painCave.isFatal = 1;
80            simError();          
81          }
82          
83 <        MAWParam mawParam = mawData->getData();
84 <
85 <        RealType De = mawParam.De;
86 <        RealType beta = mawParam.beta;
87 <        RealType Re = mawParam.Re;
96 <        RealType ca1 = mawParam.ca1;
97 <        RealType cb1 = mawParam.cb1;
83 >        RealType De = mit->getD();
84 >        RealType beta = mit->getBeta();
85 >        RealType Re = mit->getR();
86 >        RealType ca1 = mit->getCA1();
87 >        RealType cb1 = mit->getCB1();
88          
89 <        addExplicitInteraction(atypes.first, atypes.second,
89 >        addExplicitInteraction(at1, at2,
90                                 De, beta, Re, ca1, cb1);
91        }
92      }  
# Line 129 | Line 119 | namespace OpenMD {
119      if (!initialized_) initialize();
120      
121      map<pair<AtomType*, AtomType*>, MAWInteractionData>::iterator it;
122 <    it = MixingMap.find( *(idat.atypes) );
122 >    it = MixingMap.find( idat.atypes );
123      if (it != MixingMap.end()) {
124        MAWInteractionData mixer = (*it).second;
125        
# Line 144 | Line 134 | namespace OpenMD {
134        RealType ca1 = mixer.ca1;
135        RealType cb1 = mixer.cb1;
136  
137 <      bool j_is_Metal = idat.atypes->second->isMetal();
137 >      bool j_is_Metal = idat.atypes.second->isMetal();
138  
139        Vector3d r;
140        RotMat3x3d Atrans;
# Line 172 | Line 162 | namespace OpenMD {
162        myPot  = D_e * (expfnc2  - 2.0 * expfnc);
163        myDeriv   = 2.0 * D_e * beta * (expfnc - expfnc2);
164        
165 <      if (MAW::shiftedPot_ || MAW::shiftedFrc_) {
165 >      if (idat.shiftedPot || idat.shiftedForce) {
166          exptC     = -beta*( *(idat.rcut)  - R_e);
167          expfncC   = exp(exptC);
168          expfnc2C  = expfncC*expfncC;
169        }
170        
171 <      if (MAW::shiftedPot_) {
171 >      if (idat.shiftedPot) {
172          myPotC = D_e * (expfnc2C - 2.0 * expfncC);
173          myDerivC = 0.0;
174 <      } else if (MAW::shiftedFrc_) {
174 >      } else if (idat.shiftedForce) {
175          myPotC = D_e * (expfnc2C - 2.0 * expfncC);
176          myDerivC  = 2.0 * D_e * beta * (expfnc2C - expfnc2C);
177          myPotC += myDerivC * ( *(idat.rij)  -  *(idat.rcut) );
# Line 221 | Line 211 | namespace OpenMD {
211        
212        RealType pot_temp = *(idat.vdwMult) * Vmorse * Vang;
213        *(idat.vpair) += pot_temp;
214 <      idat.pot[VANDERWAALS_FAMILY] += *(idat.sw) * pot_temp;
214 >      (*(idat.pot))[VANDERWAALS_FAMILY] += *(idat.sw) * pot_temp;
215            
216        Vector3d dVmorsedr = (myDeriv - myDerivC) * Vector3d(x, y, z) /  *(idat.rij) ;
217        

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines