📄 simple.h
字号:
\f[ \bar{u}_{ab} = \frac{\bar{r}_a - \bar{r}_b}{\| \bar{r}_a - \bar{r}_b \|}\f]\f[ \bar{u}_{cb} = \frac{\bar{r}_c - \bar{r}_b}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \bar{u}_{cd} = \frac{\bar{r}_c - \bar{r}_d}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \bar{n}_{abc}= \frac{\bar{u}_{ab} \times \bar{u}_{cb}} {\| \bar{u}_{ab} \times \bar{u}_{cb} \|} \f]\f[ \bar{n}_{bcd}= \frac{\bar{u}_{cd} \times \bar{u}_{bc}} {\| \bar{u}_{cd} \times \bar{u}_{bc} \|} \f]\f[ s = \left\{ \begin{array}{ll} 1 & \mbox{if $(\bar{n}_{abc}\times\bar{n}_{bcd}) \cdot \bar{u}_{cb} > 0;$} \\ -1 & \mbox{otherwise} \end{array} \right. \f]\f[ \tau = s \arccos ( - \bar{n}_{abc} \cdot \bar{n}_{bcd} ) \f]*/class TorsSimpleCo : public SimpleCo { SimpleCo_DECLARE(TorsSimpleCo) public: TorsSimpleCo(); TorsSimpleCo(const TorsSimpleCo&); /** This constructor takes a string containing a label, and four integers a, b, c, and d which give the indices of the atoms involved in the torsion angle abcd. Atom numbering begins at atom 1, not atom 0. */ TorsSimpleCo(const char *refr, int, int, int, int); /** The KeyVal constructor. This calls the SimpleCo keyval constructor with an integer argument of 4. */ TorsSimpleCo(const Ref<KeyVal>&); ~TorsSimpleCo(); /// Always returns the string "TORS". const char * ctype() const; /// Returns the value of the angle abc in radians. double radians() const; /// Returns the value of the angle abc in degrees. double degrees() const; /// Returns the value of the angle abc in degrees. double preferred_value() const; };typedef TorsSimpleCo Tors;// ////////////////////////////////////////////////////////////////////////**The ScaledTorsSimpleCo class describes an scaled torsion internalcoordinate of a molecule. The scaled torsion is more stable that ordinarytorsions (see the TorsSimpleCo class) in describing situationswhere one of the torsions plane's is given by three near linear atoms.Designating the four atoms as \f$a\f$, \f$b\f$, \f$c\f$, and \f$d\f$ andtheir cartesian positions as \f$\bar{r}_a\f$, \f$\bar{r}_b\f$,\f$\bar{r}_c\f$, and \f$\bar{r}_d\f$, the value of the coordinate,\f$\tau_s\f$, is given by\f[ \bar{u}_{ab} = \frac{\bar{r}_a - \bar{r}_b}{\| \bar{r}_a - \bar{r}_b \|}\f]\f[ \bar{u}_{cb} = \frac{\bar{r}_c - \bar{r}_b}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \bar{u}_{cd} = \frac{\bar{r}_c - \bar{r}_d}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \bar{n}_{abc}= \frac{\bar{u}_{ab} \times \bar{u}_{cb}} {\| \bar{u}_{ab} \times \bar{u}_{cb} \|}\f]\f[ \bar{n}_{bcd}= \frac{\bar{u}_{cd} \times \bar{u}_{cb}} {\| \bar{u}_{cd} \times \bar{u}_{cb} \|}\f]\f[ s = \left\{ \begin{array}{ll} -1 & \mbox{if $(\bar{n}_{abc}\times\bar{n}_{bcd}) \cdot \bar{u}_{cb} > 0$} \\ 1 & \mbox{otherwise} \end{array} \right.\f]\f[ \tau_s = s \sqrt{\left(1-(\bar{u}_{ab} \cdot \bar{u}_{cb}\right)^2) \left(1-(\bar{u}_{cb} \cdot \bar{u}_{cd}\right)^2)} \arccos ( - \bar{n}_{abc} \cdot \bar{n}_{bcd} )\f] */class ScaledTorsSimpleCo : public SimpleCo { SimpleCo_DECLARE(ScaledTorsSimpleCo) private: double old_torsion_; public: ScaledTorsSimpleCo(); ScaledTorsSimpleCo(const ScaledTorsSimpleCo&); /** This constructor takes a string containing a label, and four integers a, b, c, and d which give the indices of the atoms involved in the torsion angle abcd. Atom numbering begins at atom 1, not atom 0. */ ScaledTorsSimpleCo(const char *refr, int, int, int, int); /** The KeyVal constructor. This calls the SimpleCo keyval constructor with an integer argument of 4. */ ScaledTorsSimpleCo(const Ref<KeyVal>&); ~ScaledTorsSimpleCo(); /// Always returns the string "TORS". const char * ctype() const; /// Returns the value of the angle abc in radians. double radians() const; /// Returns the value of the angle abc in degrees. double degrees() const; /// Returns the value of the angle abc in degrees. double preferred_value() const; };typedef ScaledTorsSimpleCo ScaledTors;// ////////////////////////////////////////////////////////////////////////*The OutSimpleCo class describes an out-of-plane internal coordinateof a molecule. The input is described in the documentation of its parentclass SimpleCo.Designating the four atoms as \f$a\f$, \f$b\f$, \f$c\f$, and \f$d\f$ andtheir cartesian positions as \f$\bar{r}_a\f$, \f$\bar{r}_b\f$,\f$\bar{r}_c\f$, and \f$\bar{r}_d\f$, the value of the coordinate,\f$\tau\f$, is given by\f[ \bar{u}_{ab} = \frac{\bar{r}_a - \bar{r}_b}{\| \bar{r}_a - \bar{r}_b \|}\f]\f[ \bar{u}_{cb} = \frac{\bar{r}_b - \bar{r}_c}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \bar{u}_{db} = \frac{\bar{r}_c - \bar{r}_d}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \bar{n}_{bcd}= \frac{\bar{u}_{cb} \times \bar{u}_{db}} {\| \bar{u}_{cb} \times \bar{u}_{db} \|}\f]\f[ \phi = \arcsin ( \bar{u}_{ab} \cdot \bar{n}_{bcd} )\f]*/class OutSimpleCo : public SimpleCo { SimpleCo_DECLARE(OutSimpleCo) public: OutSimpleCo(); OutSimpleCo(const OutSimpleCo&); /** This constructor takes a string containing a label, and four integers a, b, c, and d which give the indices of the atoms involved in the out-of-plane angle abcd. Atom numbering begins at atom 1, not atom 0. */ OutSimpleCo(const char *refr, int, int, int, int); /** The KeyVal constructor. This calls the SimpleCo keyval constructor with an integer argument of 4. */ OutSimpleCo(const Ref<KeyVal>&); ~OutSimpleCo(); /// Always returns the string "OUT". const char * ctype() const; /// Returns the value of the angle abc in radians. double radians() const; /// Returns the value of the angle abc in degrees. double degrees() const; /// Returns the value of the angle abc in degrees. double preferred_value() const; };typedef OutSimpleCo Out;// ////////////////////////////////////////////////////////////////////////** The LinIPSimpleCo class describes an in-plane component of a linearbend internal coordinate of a molecule. The input is described in thedocumentation of its parent class SimpleCo. A vector, \f$\bar{u}\f$, givenas the keyword u, that is not colinear with either \f$\bar{r}_a -\bar{r}_b\f$ or \f$\bar{r}_b - \bar{r}_c\f$ must be provided, where\f$\bar{r}_a\f$, \f$\bar{r}_b\f$, and \f$\bar{r}_c\f$ are the positions ofthe first, second, and third atoms, respectively. Usually, LinIPSimpleCo is used with a corresponding LinOPSimpleCo, whichis given exactly the same u.Designating the three atoms as \f$a\f$, \f$b\f$, and \f$c\f$ and theircartesian positions as \f$\bar{r}_a\f$, \f$\bar{r}_b\f$, and\f$\bar{r}_c\f$, the value of the coordinate, \f$\theta_i\f$, is given by\f[ \bar{u}_{ab} = \frac{\bar{r}_a - \bar{r}_b}{\| \bar{r}_a - \bar{r}_b \|}\f]\f[ \bar{u}_{cb} = \frac{\bar{r}_b - \bar{r}_c}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \theta_i = \pi - \arccos ( \bar{u}_{ab} \cdot \bar{u} ) - \arccos ( \bar{u}_{cb} \cdot \bar{u} )\f]*/class LinIPSimpleCo : public SimpleCo { SimpleCo_DECLARE(LinIPSimpleCo) private: SCVector3 u2; public: LinIPSimpleCo(); LinIPSimpleCo(const LinIPSimpleCo&); /** This constructor takes a string containing a label, and three integers a, b, and d which give the indices of the atoms involved in the linear angle abc. The last argument, u, is a unit vector used to defined the direction in which distortion is measured. Atom numbering begins at atom 1, not atom 0. */ LinIPSimpleCo(const char *refr, int, int, int, const SCVector3 &u); /** The KeyVal constructor. This calls the SimpleCo keyval constructor with an integer argument of 3. */ LinIPSimpleCo(const Ref<KeyVal>&); ~LinIPSimpleCo(); /// Always returns the string "LINIP". const char * ctype() const; /// Returns the value of the angle abc in radians. double radians() const; /// Returns the value of the angle abc in degrees. double degrees() const; /// Returns the value of the angle abc in degrees. double preferred_value() const; };typedef LinIPSimpleCo LinIP;// ////////////////////////////////////////////////////////////////////////** The LinOPSimpleCo class describes an out-of-plane component of a linearbend internal coordinate of a molecule. The input is described in thedocumentation of its parent class SimpleCo. A vector, \f$\bar{u}\f$, givenas the keyword u, that is not colinear with either \f$\bar{r}_a -\bar{r}_b\f$ or \f$\bar{r}_b - \bar{r}_c\f$ must be provided, where\f$\bar{r}_a\f$, \f$\bar{r}_b\f$, and \f$\bar{r}_c\f$ are the positions ofthe first, second, and third atoms, respectively. Usually, LinOPSimpleCo is used with a corresponding LinIPSimpleCo, whichis given exactly the same u.Designating the three atoms as \f$a\f$, \f$b\f$, and \f$c\f$ and theircartesian positions as \f$\bar{r}_a\f$, \f$\bar{r}_b\f$, and\f$\bar{r}_c\f$, the value of the coordinate, \f$\theta_o\f$, is given by\f[ \bar{u}_{ab} = \frac{\bar{r}_a - \bar{r}_b}{\| \bar{r}_a - \bar{r}_b \|}\f]\f[ \bar{u}_{cb} = \frac{\bar{r}_b - \bar{r}_c}{\| \bar{r}_c - \bar{r}_b \|}\f]\f[ \bar{n} = \frac{\bar{u} \times \bar{u}_{ab}} {\| \bar{u} \times \bar{u}_{ab} \|}\f]\f[ \theta_o = \pi - \arccos ( \bar{u}_{ab} \cdot \bar{n} ) - \arccos ( \bar{u}_{cb} \cdot \bar{n} )\f]*/class LinOPSimpleCo : public SimpleCo { SimpleCo_DECLARE(LinOPSimpleCo) private: SCVector3 u2; public: LinOPSimpleCo(); LinOPSimpleCo(const LinOPSimpleCo&); /** This constructor takes a string containing a label, and three integers a, b, and c which give the indices of the atoms involved in the linear angle abc. The last argument, u, is a unit vector used to defined the direction perpendicular to the direction in which distortion is measured. Atom numbering begins at atom 1, not atom 0. */ LinOPSimpleCo(const char *refr, int, int, int, const SCVector3 &u); /** The KeyVal constructor. This calls the SimpleCo keyval constructor with an integer argument of 3. */ LinOPSimpleCo(const Ref<KeyVal>&); ~LinOPSimpleCo(); /// Always returns the string "LINIP". const char * ctype() const; /// Returns the value of the angle abc in radians. double radians() const; /// Returns the value of the angle abc in degrees. double degrees() const; /// Returns the value of the angle abc in degrees. double preferred_value() const; };typedef LinOPSimpleCo LinOP;}#endif /* _intco_simple_h */// Local Variables:// mode: c++// c-file-style: "CLJ"// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -