class TrialAVB2 : public feasst::TrialFactoryNamed

Attempt AVB2 in->out and out->in with equal probability. Only implemented for single-site particles.

This trial move is refered to as AVB2 as described in the following manuscript:

First, a target particle of type “t” is selected with a site with index site_index_t. With probability, \(P_{bias}\), a particle of type “a” with site_index_a outside the aggregation volume (AV) of site_index_t is placed inside the AV. Otherwise, site_index_a inside the AV is placed outisde the AV.

The derivation of the acceptance probability follows that as described in both TrialComputeMove and ComputeAddAVB with the following transition probabilities.

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}\)

Forward event

[reverse event]

Probability, \(\pi_{on}\)

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

Select particle of type t

[Select particle of type t]



Select out->in move

[Select in->out move]


\(1 - P_{bias}\)

Select site_index_a not in AV of site_index_t

[Select site_index_a in AV of site_index_t]

\(1/(N_a - N^{s,AV}_a - \delta_{ta})\)

\(1/(N^{s,AV}_a + 1)\)

Place site_index_a inside AV of site_index_t

[Place site_index_a outside AV of site_index_t]


\(1/(V - v_{AV})\)



\(min(1, \chi)\)

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

where \(N_t\) is the number of particles of type t, \(v_{AV}\) is the aggregation volume, \(N^{s,AV}_a\) is the number of sites with site_index_a, in particles of type a, that are in the AV of site_index_t, \(V\) is the volume of the entire system and \(\delta_{ta}\) is the Kronecker delta as a function of the type index of the target and added particles (i.e., if add and target are of same type, then \(\delta_{ta} = 1\), otherwise \(\delta_{ta} = 0\)).

Application of local detailed balance yields the following acceptance probability for the out->in move:

\(\chi = \frac{1-P_{bias}}{P_{bias}} \frac{N_a - N^{s,AV}_a - \delta_{ta}}{N^{s,AV}_a + 1} \frac{v_{AV}}{V - v_{AV}} e^{-\beta\Delta U}\).

The in->out move can be derived by the switching the foward and reverse moves. In that case, one is no longer added to \(N^{s,AV}_a\), but to \(N_a - N^{s,AV}_a - \delta_{ta}\) instead. The resulting acceptance probability is

\(\chi = \frac{P_{bias}}{1-P_{bias}} \frac{N^{s,AV}_a}{N_a - N^{s,AV}_a - \delta_{ta} + 1} \frac{V - v_{AV}}{v_{AV}} e^{-\beta\Delta U}\).


class TrialAVB2Half : public feasst::Trial

Attempt AVB2 in->out or out->in Only implemented for single-site particles TrialAVB2 is recommended in most cases to ensure detailed-balance is satisfied. But this is used in special cases like Prefetch when avoiding TrialFactory.