class AngleHarmonic : public feasst::BondThreeBody

This class uses the following Angle Properties

  • k_energy_per_radian_sq

  • equilibrium_degrees

  • num_jacobian_gaussian (default: 0) which are described as follows.

U(angle) = k_energy_per_radian_sq*(angle - equilibrium_degrees)^2 with parameters given in Angle Properties.

The usual 1/2 factor is not included, but can be incorporated into the k parameter manually by the user input to the particle file.

The Jacobian-Gaussian algorithm described in:

is implemented here for the “2-branch” case, while “3-branch” is not currently implemented. Thank you to Dr Daniel Siderius and Professor Bin Chen for providing example implementation code and discussion.

The num_jacobian_gaussian parameter is only read by the one angle that has both sites that are placed by the branch in the vertices. To use the default BondThreeBody::random_branch, set num_jacobian_gaussian to 0.

The Jacobian-Gaussian method should not currently be used for GCE as it seems to shift the chemical potential by a spurious constant factor.

Public Functions

double energy(const double radians, const Bond &angle) const

Return the energy of interaction given an angle in radians.

void random_branch(const Angle &a2a1m1, const Angle &a2a1m2, const Angle &m1a1m2, const double beta, const bool is_position_held, double *radians_a2a1m1, double *radians_a2a1m2, double *radians_m1a1m2, Random *random, double *ln_met, const Position *const a1, const Position *const a2, const Position *const m1, const Position *const m2) const

Return three random angles to form a branch.