ComputeAddAVB

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]
\(1/w\)
\([1/w]\)
Select particle of type t
[Select particle of type t]
\(1/N_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/v_{AV}\)
\([1/N^{s,AV}_a + 1]\)
Accept
[Accept]
\(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.

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