MTK++ Latest version: 0.2.0

parameters.h
Go to the documentation of this file.
00001 
00033 #ifndef PARAMETERS_H
00034 #define PARAMETERS_H
00035 
00036 #include <string>
00037 #include <iostream>
00038 #include <vector>
00039 #include <math.h>
00040 
00041 #include "Utils/constants.h"
00042 
00043 namespace MTKpp
00044 {
00045 
00046 class elements;
00047 
00048 // ============================================================
00049 // Struct : atomType
00050 // ------------------------------------------------------------
00051 // 
00052 // ============================================================
00053 struct atomType
00054 {
00056     std::string name;
00057 
00059     std::string element;
00060 
00062     int atNum;
00063 
00065     double mass;
00066 
00068     std::string hybridization;
00069 
00071     std::string description;
00072 
00074     double rvalue;
00075 
00077     double evalue;
00078 
00080     double atomPolarizability;
00081 
00083     std::string groupName;
00084 
00086     bool optimize;
00087 };
00088 
00089 // ============================================================
00090 // Struct : bondParam
00091 // ------------------------------------------------------------
00092 // 
00093 // ============================================================
00094 struct bondParam
00095 {
00097     std::string atomType1;
00098 
00100     std::string atomType2;
00101 
00103     double keq;
00104 
00106     double req;
00107 
00109     std::string groupName;
00110 
00112     bool optimize;
00113 };
00114 
00115 // ============================================================
00116 // Struct : angleParam
00117 // ------------------------------------------------------------
00118 // 
00119 // ============================================================
00120 struct angleParam
00121 {
00123     std::string atomType1;
00124 
00126     std::string atomType2;
00127 
00129     std::string atomType3;
00130 
00132     double keq;
00133 
00135     double req;
00136 
00138     std::string groupName;
00139 
00141     bool optimize;
00142 };
00143 
00144 // ============================================================
00145 // Struct : torsionParam
00146 // ------------------------------------------------------------
00147 // 
00148 // ============================================================
00149 struct torsionParam
00150 {
00152     std::string atomType1;
00153 
00155     std::string atomType2;
00156 
00158     std::string atomType3;
00159 
00161     std::string atomType4;
00162 
00164     double Nt;
00165 
00167     double Vn;
00168 
00170     double gamma;
00171 
00173     int npth;
00174 
00176     std::string groupName;
00177 }; 
00178 
00179 // ============================================================
00180 // Struct : improperParam
00181 // ------------------------------------------------------------
00182 // 
00183 // ============================================================
00184 struct improperParam
00185 {
00187     std::string atomType1;
00188 
00190     std::string atomType2;
00191 
00193     std::string atomType3;
00194 
00196     std::string atomType4;
00197 
00199     double Nt;
00200 
00202     double Vn;
00203 
00205     double gamma;
00206 
00208     std::string groupName;
00209 };
00210 
00211 // ============================================================
00212 // Struct : hBondParam
00213 // ------------------------------------------------------------
00214 // 
00215 // ============================================================
00216 struct hBondParam
00217 {
00219     std::string atomType1;
00220 
00222     std::string atomType2;
00223 
00225     double p10;
00226 
00228     double p12;
00229 
00231     std::string groupName;
00232 };
00233 
00234 // ============================================================
00235 // Struct : equivalentAtoms
00236 // ------------------------------------------------------------
00237 // 
00238 // ============================================================
00239 struct equivalentAtomsParam
00240 {
00242     std::string original;
00243 
00245     std::vector<std::string> itsEquivalentList;
00246 
00248     std::string groupName;
00249 };
00250 
00251 // ============================================================
00252 // Struct : LJ612SE
00253 // ------------------------------------------------------------
00254 // 
00255 // ============================================================
00256 struct LJ612SE
00257 {
00259     std::string atomType1;
00260 
00262     std::string atomType2;
00263 
00265     double sigma;
00266 
00268     double epsilon;
00269 };
00270 
00271 // ============================================================
00272 // Class : parameters
00273 // ------------------------------------------------------------
00274 // Class parameters
00275 // ============================================================
00276 class parameters
00277 {
00278 protected:
00279 
00284     parameters(elements* p);
00285 
00289     virtual ~parameters();
00290 
00291 public:
00296     static parameters* getInstance(elements* p);
00297 
00301     void printAtomTypes();
00302 
00306     atomType*                addAtomType();
00307 
00315     atomType*                addAtomType(atomType* a, std::string n,
00316                                                       std::string g);
00317 
00322     bondParam*               addBondParam();
00323 
00328     angleParam*              addAngleParam();
00329 
00334     torsionParam*            addTorsionParam();
00335 
00340     improperParam*           addImproperParam();
00341 
00346     hBondParam*              addHBondParam();
00347 
00352     equivalentAtomsParam*    addEquivalentAtomsParam();
00353 
00357     void                     calculateSigmaEpsilon();
00358 
00363     void                     setAtomNumber(atomType* a);
00364 
00370     int                      getAtomicNum(const std::string& at);
00371 
00378     bool                     hasAtomType(const std::string& a, const std::string& g);
00379 
00385     atomType*                getAtomType(const std::string& a);
00386 
00391     std::vector<atomType*>   getAtomTypes();
00392 
00397     std::vector<bondParam*>  getBondParams();
00398 
00403     std::vector<angleParam*> getAngleParams();
00404 
00409     std::vector<torsionParam*>    getTorsionParams();
00410 
00415     std::vector<improperParam*>   getImproperParams();
00416 
00422     std::string              getAtomTypeSymbol(const std::string& a);
00423 
00429     std::string              getAtomTypeHybridization(const std::string& a);
00430 
00436     bondParam*               getBondParam(const std::string& at1,
00437                                           const std::string& at2);
00438 
00445     bool                     hasBondParam(const std::string& at1,
00446                                           const std::string& at2,
00447                                           const std::string& g);
00448 
00455     angleParam*              getAngleParam(const std::string& at1,
00456                              const std::string& at2, const std::string& at3);
00457 
00465     bool                     hasAngleParam(const std::string& at1,
00466                              const std::string& at2, const std::string& at3,
00467                              const std::string& g);
00468 
00476     std::vector<torsionParam*> getTorsionParamList(
00477                                const std::string& at1, const std::string& at2,
00478                                const std::string& at3, const std::string& at4);
00479 
00484     void removeProlineTorsion(std::vector<torsionParam*>& t);
00485 
00494     std::vector<improperParam*> getImproperParamList(
00495                                 const std::string& at1, const std::string& at2,
00496                                 const std::string& at3, const std::string& at4,
00497                                 std::vector<std::vector<int> >& l);
00498 
00502     std::vector<equivalentAtomsParam*> getEquivalentAtomList();
00503 
00507     LJ612SE* getLJ612SE(const std::string&, const std::string&);
00508 
00509 protected:
00510 
00512     elements*                          pElements;
00514     std::vector<atomType*>             itsTypeList;
00515 
00517     std::vector<bondParam*>            itsBondList;
00518 
00520     std::vector<angleParam*>           itsAngleList;
00521 
00523     std::vector<torsionParam*>         itsTorsionList;
00524 
00526     std::vector<improperParam*>        itsImproperList;
00527 
00529     std::vector<hBondParam*>           itsHBondList;
00530 
00532     std::vector<equivalentAtomsParam*> itsEquivalentAtomsList;
00533 
00535     std::vector<LJ612SE*>              itsLJ612SEList;
00536 
00538     typedef std::vector<atomType*>::iterator atomTypeIterator;
00539 
00541     typedef std::vector<bondParam*>::iterator bondParamIterator;
00542 
00544     typedef std::vector<angleParam*>::iterator angleParamIterator;
00545 
00547     typedef std::vector<torsionParam*>::iterator torsionParamIterator;
00548 
00550     typedef std::vector<improperParam*>::iterator improperParamIterator;
00551 
00553     typedef std::vector<hBondParam*>::iterator hBondParamIterator;
00554 
00556     typedef std::vector<LJ612SE*>::iterator LJ612SEIterator;
00557 
00559     atomType*                pAtomType;
00560 
00562     bondParam*               pBondParam;
00563 
00565     angleParam*              pAngleParam;
00566 
00568     torsionParam*            pTorsionParam;
00569 
00571     improperParam*           pImproperParam;
00572 
00574     hBondParam*              pHBondParam;
00575 
00577     equivalentAtomsParam*    pEquivalentAtomsParam;
00578 
00580     LJ612SE*                 pLJ612SE;
00581 
00583     bool                     bLJ612SE;
00584 };
00585 
00586 } // MTKpp namespace
00587 
00588 #endif // PARAMETERS_H

Generated on Fri Dec 23 2011 09:28:51 for MTK++ by Doxygen 1.7.5.1