class BondThreeBody

A three body bond is defined by three sites, 0 - 1 - 2. The relative vector r01 = r0 - r1 points from r1 to r0. The relative vector r21 = r2 - r1 points from r1 to r2.

Angle Property minimum_degrees sets the energy to NEAR_INFINITY at smaller angles.

Subclassed by feasst::AngleHarmonic, feasst::AngleSquareWell, feasst::RigidAngle

Public Functions

virtual double energy(const Position &ri, const Position &rj, const Position &rk, const Bond &angle) const

Return the energy of interaction between ri, rj and rk.

virtual double energy(const double radians, const Bond &angle) const = 0

Return the energy of interaction given an angle in radians.

virtual double random_angle_radians(const Angle &angle, const double beta, const int dimension, Random *random) const

Return a randomly selected bond angle.

In three dimensions, \(P(\theta) \propto \sin\theta\exp[-\beta U(\theta)]\)

In two dimensions, \(P(\theta) \propto \theta\exp[-\beta U(\theta)]\)

virtual void random_branch(const Angle &a2a1m1, const Angle &a2a1m2, const Angle &m1a1m2, const double beta, double *radians_a2a1m1, double *radians_a2a1m2, double *radians_m1a1m2, Random *random) const

Return three random angles to form a branch.

anchor2 -> 1         1(a2)
mobile1 -> 2         |
mobile2 -> 3         4(a1)  t143(angle)
anchor1 -> 4       /   \L34(distance)
              2(m1)     3(m2, the site to be placed in this function)