class ComputeAddAVBDivalent : public feasst::TrialCompute

Attempt to add a particle of type “t” with site_index_t anywhere in the Domain. Then add a second particle of type “a” with site_index_a in the AV of site_index_t. Finally, add a third particle of type “b” with site_index_a in the AV of site_index_t.

The derivation of the acceptance criteria follows a similar procedure as described in ComputeAddAVB.

Forward event

[reverse event]

Probability, \(\pi_{on}\)

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

Select insert trial

[Select remove trial]



Insert site_index_t in box

[Remove site_index_t]


\(1/(N_t + 1 + \delta_{ta} + \delta_{tb})\)

Insert 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 + \delta_{ab})\)

Insert site_index_b in AV of site_index_t

[Remove site_index_b in the AV of site_index_t]


\(1/(N^{s,AV}_b + 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

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

Public Functions

ComputeAddAVBDivalent(const argtype &args = argtype())


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

Perform the Perturbations and determine acceptance.