class TrialComputeMove : public feasst::TrialCompute

Move a selection of particles and sites.

Derivation of the acceptance criteria follows Lecture 9 of Prof. David Kofke’s Molecular Simulation course CE 530.

For this type of move, the potential energy of the system, U, is the only thermodynamic variable which changes. Thus, whether in the canonical ensemble or otherwise, the probability distribution,

\(\pi_i \propto e^{-\beta U_i}\)

because the other thermodynamic variables such as number of particles, or volume do not change.

The following table describes the transition probabilities associated with the chosen trial move, and its reverse trial that is considered for the purpose of satisfying detailed balance. Thus, the probability shown represents the probability of transitioning from the old to the new state, \(\pi_{on}\). And the reverse transition probability is from new to old, \(\pi_{no}\).

Forward event

[reverse event]

Probability, \(\pi_{on}\)

[reverse probability, \(\pi_{no}\)]

Select molecule of type t

[Select molecule of type t]



Move to new position

[Move to old position]





\(min(1, \chi)\)

\([min(1, 1/\chi)]\)

where \(\chi\) is the acceptance probability that we can now derive by imposing the (local) detailed balance condition.

For (local) detailed balance, the probability of being in the old state, \(\pi_o\), times the probability of transitioning from the old to the new state, \(\pi_{on}\), should be equal to the probability of being in the new state, \(\pi_n\) times the probability of transitioning from the new to old state, \(\pi_{no}\).

\(\pi_o \pi_{on} = \pi_n \pi_{no}\)

Substituting the probability distribution and transition probabilities yields

\(\frac{e^{-\beta U_o}min(1, \chi)}{N_t v} = \frac{e^{-\beta U_n}min(1, 1/\chi)}{N_t v}\)

\(min(1, \chi)/min(1, 1/\chi) = e^{-\beta(U_n - U_o)} = e^{-\beta\Delta U}\)

The left hand side is \(\chi\) for both cases of \(\chi <= 1\) and \(\chi > 1\). Thus,

\(\chi = e^{-\beta\Delta U}\)

Subclassed by feasst::ComputeAVB2, feasst::ComputeAVB4

Public Functions

void perturb_and_acceptance(Criteria *criteria, System *system, Acceptance *acceptance, std::vector<TrialStage*> *stages, Random *random)

Perform the Perturbations and determine acceptance.