OBForceFieldMMFF94

From Open Babel
Revision as of 11:09, 15 February 2007 by Ghutchis (Talk | contribs)

Jump to: navigation, search

This class is a partial implementation of the all-atom MMFF94 force field.

References:

  1. Thomas A. Halgren, J. Comput. Chem., 17, 490-519 (1996).
  2. Thomas A. Halgren, J. Comput. Chem., 17, 520-552 (1996).
  3. Thomas A. Halgren, J. Comput. Chem., 17, 553-586 (1996).
  4. Thomas A. Halgren and Robert B. Nachbar, J. Comput. Chem., 17, 587-615 (1996).
  5. Thomas A. Halgren, J. Comput. Chem., 17, 616-641 (1996).
  6. Thomas A. Halgren, J. Comput. Chem., 20, 720-729 (1999).
  7. Thomas A. Halgren, J. Comput. Chem., 20, 730-748 (1999).

The intent in the future is to produce a full, validated MMFF94 implementation.

Bond Stretching

Energy

BondStretchingEnergy.png

E_{bond}=\frac{1}{2}143.9325k_{b}(r_{ab}-r_{ab}^0)^2(1+cs(r_{ab}-r_{ab}^0)+\frac{7}{12}cs^2(r_{ab}-r_{ab}^0)^2)

k_b: bond stretching force constant (mmffbnond.prm)

r_{ab}^0: ideal bond length (mmffbnond.prm)

r_{ab}: bond length between atoms a and b

cs: cubic stretching constant (-2.0)

The bond length can be calculated from the coordinates of the atoms a(x_a,y_a,z_a) and b(x_b,y_b,z_b).

r_{ab} = \sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}

Parameters

Forces

We can also calculate the forces on each atom by calculating the negative gradient.

\bf{F_a}=-\nabla_a E_{bond}=-\left(\frac{\partial E_{bond}}{\partial x_a},\frac{\partial E_{bond}}{\partial y_a},\frac{\partial E_{bond}}{\partial z_a}\right)

note: the force \bf{F_a} is a vector, the energy E_{bond} is a scalar.

\frac{\partial E_{bond}}{\partial x_a}=\frac{\partial E_{bond}}{\partial r_{ab}}\frac{\partial r_{ab}}{\partial x_a}

\frac{\partial E_{bond}}{\partial r_{ab}}=143.9325k_{b}(r_{ab}-r_{ab}^0)(1+1.5cs(r_{ab}-r_{ab}^0)+\frac{7}{12}2cs^2(r_{ab}-r_{ab}^0)^2)

We start by calculating the partial derivative with respect to x_a.

\frac{\partial r_{ab}}{\partial x_a}=\frac{\partial \sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}}{\partial x_a}=\frac{x_a-x_b}{\sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}}=\frac{x_a-x_b}{r_{ab}}

For y_a and z_a we find \frac{y_a-y_b}{r_{ab}} and \frac{z_a-z_b}{r_{ab}}.

\left(\frac{x_a-x_b}{r_{ab}},\frac{y_a-y_b}{r_{ab}},\frac{z_a-z_b}{r_{ab}}\right)=\frac{\bf{r_{ab}}}{r_{ab}}

\bf{F_a}=-143.9325k_{b}(r_{ab}-r_{ab}^0)(1+1.5cs(r_{ab}-r_{ab}^0)+\frac{7}{12}2cs^2(r_{ab}-r_{ab}^0)^2)\frac{\bf{r_{ab}}}{r_{ab}}

Angle Bending

AngleBendingEnergy.png

E_{angle}=\frac{1}{2}0.043844k_a(\theta_{abc}-\theta_{abc}^0)^2(1+cb(\theta_{abc}-\theta_{abc}^0))

k_a: angle bending force constant (mmffang.prm)

\theta_{abc}^0: ideal angle (mmffang.prm)

\theta_{abc}: angle

cb: cubic bending constant (-0.007)

The angle can be calculated from the coordinates of the atoms a(x_a,y_a,z_a), b(x_b,y_b,z_b) and c(x_c,y_c,z_c).

\theta_{abc}=arccos\left(\frac{\bf{r_{ab}}\cdot\bf{r_{bc}}}{r_{ab}r_bc}\right)=arccos\left(\frac{(x_ax_b+y_ay_b+z_az_b)}{\sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}\sqrt{(x_b-x_c)^2+(y_b-y_c)^2+(z_b-z_c)^2}}\right)

We can also calculate the forces on each atom by calculating the negative gradient.

\bf{F_a}=-\nabla_a E_{angle}=-\left(\frac{\partial E_{angle}}{\partial x_a},\frac{\partial E_{angle}}{\partial y_a},\frac{\partial E_{angle}}{\partial z_a}\right)

\frac{\partial E_{angle}}{\partial x_a}=\frac{\partial E_{angle}}{\partial \theta_{abc}}\frac{\partial \theta_{abc}}{\partial x_a}

\frac{\partial E_{angle}}{\partial \theta_{abc}}=0.043844k_{a}(\theta_{abc}-\theta_{abc}^0)(1+1.5cb(\theta_{abc}-\theta_{abc}^0))

We start by calculating the partial derivative with respect to x_a.

\frac{\partial \theta_{abc}}{\partial x_a}=\frac{\partial arccos\left(\frac{\bf{r_{ab}}\cdot\bf{r_{bc}}}{r_{ab}r_bc}\right)}{\partial x_a}

Bend Stretching

Torsional

Out-Of-Plane Bending

Van der Waals

Electrostatic