ComputeAVB4

class ComputeAVB4 : public feasst::TrialComputeMove
AVB4 is an extension of AVB3 as described in the following manuscript:
https://doi.org/10.1021/jp012209k
But in AVB4, in \(\rightarrow\) out and out \(\rightarrow\) in moves are not considered. This is because AVB2 handles these moves more efficiently without having to select a third particle. One may also allow the \(j,k\) particles to be either the same or to have overlapping aggregation volumes (AV).
The AVB4 algorithm proceeds as follow. First, a particle of type “j” is selected with a site with index site_index_j. Second, a particle of type “k” is selected with a site with index site_index_k. With probability, \(P_{bias}\), select site_index_a in the AV of site_index_k and place it in the AV of site_index_j. Otherwise, select site_index_a in the AV of site_index_j and place it in the AV of site_index_k.
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}\)
The derivation of the acceptance probability follows that as described in both TrialComputeMove and ComputeAddAVB with the following transition probabilities.
Forward event
[reverse event]
Probability, \(\pi_{on}\)
[reverse probability, \(\pi_{no}\)]
Select a particle of type j and a particle of type k
[Select a particle of type j and a particle of type k]
\(1/(N_j N_k)\)
\([1/(N_j N_k)]\)
Select j \(\rightarrow\) k trial type
[Select k \(\rightarrow\) j trial type]
\(1  P_{bias}\)
\([P_{bias}]\)
Select site_index_a in AV of site_index_j
[Select site_index_a in AV of site_index_k
\(1/N^{s,AV,j}_a\)
\([1/(N^{s,AV,k}_a + \Delta_{ak})\)]
Place site_index_a in AV of site_index_k
[Place site_index_a in AV of site_index_j]
\(1/v^k_{AV}\)
\([1/v^j_{AV}]\)
Accept
[Accept]
\(min(1, \chi)\)
\([min(1, 1/\chi)]\)
where \(N_t\) is the number of particles of type \(t\), \(t\) is either \(j\) or \(k\), \(v^t_{AV}\) is the aggregation volume of particles of type t, \(N^{s,AV,t}_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_{ak}=1\), except when site_index_a is in the AV of site_index_k. In that special case, \(\Delta_{ak}=0\)
Application of local detailed balance yields the following acceptance probability for the \(j \rightarrow k\) move:
\(\chi_ = \frac{P_{bias}}{1  P_{bias}} \frac{N^{s,AV,j}_a}{N^{s,AV,k}_a + \Delta_{ak}} \frac{v^k_{AV}}{v^j_{AV}} e^{\beta\Delta U}\).
The reverse, \(k \rightarrow j\) acceptance probability is obtained by simply perturbing the \(j,k\) indices and inverting the bias probability ratio as follows:
\(\chi_ = \frac{1  P_{bias}}{P_{bias}} \frac{N^{s,AV,k}_a}{N^{s,AV,j}_a + \Delta_{aj}} \frac{v^j_{AV}}{v^k_{AV}} e^{\beta\Delta U}\).
For ease of implementation, we confine ourselves to the case where j and k are selected from the same pool of particles (e.g., types, or group, or all). Thus, there is no need to select j>k or k>j. And because j and k are equivalent types, both terms which involve \(P_{bias}\) and terms which involve \(v_{AV}\) do not contribute. The resulting acceptance probability for this j>k trial is
\(\chi_ = \frac{N^{s,AV,j}_a}{N^{s,AV,k}_a + \Delta_{ak}} e^{\beta\Delta U}\).
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)