--- trunk/src/UseTheForce/ForceField.cpp 2005/04/15 22:04:00 507 +++ trunk/src/UseTheForce/ForceField.cpp 2007/12/06 20:04:02 1195 @@ -50,6 +50,8 @@ #include "UseTheForce/ForceField.hpp" #include "utils/simError.h" #include "UseTheForce/DarkSide/atype_interface.h" +#include "UseTheForce/DarkSide/fForceOptions_interface.h" +#include "UseTheForce/DarkSide/switcheroo_interface.h" namespace oopse { ForceField::ForceField() { @@ -67,6 +69,7 @@ namespace oopse { ForceField::~ForceField() { deleteAtypes(); + deleteSwitch(); } AtomType* ForceField::getAtomType(const std::string &at) { @@ -75,7 +78,8 @@ namespace oopse { return atomTypeCont_.find(keys); } - BondType* ForceField::getBondType(const std::string &at1, const std::string &at2) { + BondType* ForceField::getBondType(const std::string &at1, + const std::string &at2) { std::vector keys; keys.push_back(at1); keys.push_back(at2); @@ -88,10 +92,10 @@ namespace oopse { //if no exact match found, try wild card match return bondTypeCont_.find(keys, wildCardAtomTypeName_); } - } - BendType* ForceField::getBendType(const std::string &at1, const std::string &at2, + BendType* ForceField::getBendType(const std::string &at1, + const std::string &at2, const std::string &at3) { std::vector keys; keys.push_back(at1); @@ -108,8 +112,10 @@ namespace oopse { } } - TorsionType* ForceField::getTorsionType(const std::string &at1, const std::string &at2, - const std::string &at3, const std::string &at4) { + TorsionType* ForceField::getTorsionType(const std::string &at1, + const std::string &at2, + const std::string &at3, + const std::string &at4) { std::vector keys; keys.push_back(at1); keys.push_back(at2); @@ -125,17 +131,33 @@ namespace oopse { } return torsionTypeCont_.find(keys, wildCardAtomTypeName_); - } - BondType* ForceField::getExactBondType(const std::string &at1, const std::string &at2){ + NonBondedInteractionType* ForceField::getNonBondedInteractionType(const std::string &at1, const std::string &at2) { std::vector keys; keys.push_back(at1); keys.push_back(at2); + + //try exact match first + NonBondedInteractionType* nbiType = nonBondedInteractionTypeCont_.find(keys); + if (nbiType) { + return nbiType; + } else { + //if no exact match found, try wild card match + return nonBondedInteractionTypeCont_.find(keys, wildCardAtomTypeName_); + } + } + + BondType* ForceField::getExactBondType(const std::string &at1, + const std::string &at2){ + std::vector keys; + keys.push_back(at1); + keys.push_back(at2); return bondTypeCont_.find(keys); } - - BendType* ForceField::getExactBendType(const std::string &at1, const std::string &at2, + + BendType* ForceField::getExactBendType(const std::string &at1, + const std::string &at2, const std::string &at3){ std::vector keys; keys.push_back(at1); @@ -143,9 +165,11 @@ namespace oopse { keys.push_back(at3); return bendTypeCont_.find(keys); } - - TorsionType* ForceField::getExactTorsionType(const std::string &at1, const std::string &at2, - const std::string &at3, const std::string &at4){ + + TorsionType* ForceField::getExactTorsionType(const std::string &at1, + const std::string &at2, + const std::string &at3, + const std::string &at4){ std::vector keys; keys.push_back(at1); keys.push_back(at2); @@ -153,20 +177,29 @@ namespace oopse { keys.push_back(at4); return torsionTypeCont_.find(keys); } + + NonBondedInteractionType* ForceField::getExactNonBondedInteractionType(const std::string &at1, const std::string &at2){ + std::vector keys; + keys.push_back(at1); + keys.push_back(at2); + return nonBondedInteractionTypeCont_.find(keys); + } + + bool ForceField::addAtomType(const std::string &at, AtomType* atomType) { std::vector keys; keys.push_back(at); return atomTypeCont_.add(keys, atomType); } - bool ForceField::addBondType(const std::string &at1, const std::string &at2, BondType* bondType) { + bool ForceField::addBondType(const std::string &at1, const std::string &at2, + BondType* bondType) { std::vector keys; keys.push_back(at1); keys.push_back(at2); - return bondTypeCont_.add(keys, bondType); - + return bondTypeCont_.add(keys, bondType); } - + bool ForceField::addBendType(const std::string &at1, const std::string &at2, const std::string &at3, BendType* bendType) { std::vector keys; @@ -175,9 +208,12 @@ namespace oopse { keys.push_back(at3); return bendTypeCont_.add(keys, bendType); } - - bool ForceField::addTorsionType(const std::string &at1, const std::string &at2, - const std::string &at3, const std::string &at4, TorsionType* torsionType) { + + bool ForceField::addTorsionType(const std::string &at1, + const std::string &at2, + const std::string &at3, + const std::string &at4, + TorsionType* torsionType) { std::vector keys; keys.push_back(at1); keys.push_back(at2); @@ -186,22 +222,31 @@ namespace oopse { return torsionTypeCont_.add(keys, torsionType); } - double ForceField::getRcutFromAtomType(AtomType* at) { + bool ForceField::addNonBondedInteractionType(const std::string &at1, + const std::string &at2, + NonBondedInteractionType* nbiType) { + std::vector keys; + keys.push_back(at1); + keys.push_back(at2); + return nonBondedInteractionTypeCont_.add(keys, nbiType); + } + + RealType ForceField::getRcutFromAtomType(AtomType* at) { /**@todo */ GenericData* data; - double rcut = 0.0; - + RealType rcut = 0.0; + if (at->isLennardJones()) { data = at->getPropertyByName("LennardJones"); if (data != NULL) { LJParamGenericData* ljData = dynamic_cast(data); - + if (ljData != NULL) { LJParam ljParam = ljData->getData(); - + //by default use 2.5*sigma as cutoff radius rcut = 2.5 * ljParam.sigma; - + } else { sprintf( painCave.errMsg, "Can not cast GenericData to LJParam\n"); @@ -216,11 +261,10 @@ namespace oopse { simError(); } } - return rcut; } + - ifstrstream* ForceField::openForceFieldFile(const std::string& filename) { std::string forceFieldFilename(filename); ifstrstream* ffStream = new ifstrstream(); @@ -247,9 +291,12 @@ namespace oopse { simError(); } } - return ffStream; - } + void ForceField::setFortranForceOptions(){ + ForceOptions theseFortranOptions; + forceFieldOptions_.makeFortranOptions(theseFortranOptions); + setfForceOptions(&theseFortranOptions); + } } //end namespace oopse