# Difference between revisions of "OBForceFieldMMFF94"

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.

## Contents

### Bond Stretching

#### Energy

$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}$

#### 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

$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}$