class ComputeAddAVB : public feasst::TrialCompute

Attempt to add a particle of type “a” (for add) with a bias for site_index_a to be in the aggregation volume (AV) of site_index_t (“t” for target) of a particle of type “t”.

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

Forward event

[reverse event]

Probability, \(\pi_{on}\)

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

Select insert trial

[Select remove trial]



Select particle of type t

[Select particle of type t]


\(\left[\frac{1}{N_t+\delta_{ta}} \right]\)

Place site_index_a in AV of site_index_t

[Remove site_index_a in AV of site_index_t]


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



\(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 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 acceptance probability

\(\frac{e^{-\beta U_o + \beta\mu_a N_a}}{\Lambda^{dN} w N_t v_{AV}} min(1, \chi) = \frac{e^{-\beta U_n + \beta\mu_a(N_a+1)}}{\Lambda^{d(N+1)}w(N_t + \delta_{ta}) (N^{s,AV}_a+1)}min(1, 1/\chi)\)

\(\chi = \frac{N_t}{N_t+\delta_{ta}} \frac{v_{AV}}{(N^{s,AV}_a + 1)\Lambda^d} e^{-\beta\Delta U + \beta\mu_a}\)

Note that if the add was already performed, and \(\delta_{ta}=1\) then the equations are altered from the perspective of the old to the new state.

\(\frac{N_t}{N_t + \delta_{ta}} \rightarrow \frac{N_t - \delta_{ta}}{N_t}\)

Public Functions

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

Perform the Perturbations and determine acceptance.