The derivation of the acceptance criteria follows a similar procedure as descibed in TrialComputeMove, except with the following differences.

The limiting distribution in the grand canonical ensemble is

$$\pi_i \propto \frac{e^{-\beta U + \beta \mu_t N_t}}{\Lambda^{dN}}$$

where $$\mu_t$$ is the chemical potential of particles of type t, $$\Lambda$$ is the de Broglie wavelength, $$N_t$$ is the number of particles of type t and d is the dimension.

The transition probabilities are as follows, assuming that this move is coupled with a trial that removes particles with the same selection weight.

 Forward event [reverse event] Probability, $$\pi_{on}$$ [reverse probability, $$\pi_{no}$$] Select insert trial [Select remove trial] $$1/w$$ $$[1/w]$$ Place particle of type t [Delete particle type t] $$1/V$$ $$\left[\frac{1}{N_t+1}\right]$$ Accept [Accept] $$min(1, \chi)$$ $$[min(1, 1/\chi)]$$

Application of local detailed balance yields the acceptance probability, $$\chi$$.

$$\frac{e^{-\beta U_o + \beta\mu_t N_t}}{\Lambda^{dN}w V }min(1, \chi) = \frac{e^{-\beta U_n + \beta\mu_t (N_t+1)}}{\Lambda^{d(N+1)}w (N_t+1)} min(1, 1/\chi)$$

$$\chi = \frac{V e^{-\beta\Delta U + \beta\mu_t}}{(N_t+1)\Lambda^d}$$

Note that the number of particles, $$N_t$$ is from the perspective of the old state. Thus, if the particle has already been added during computation of $$\chi$$, then $$N_t + 1 \rightarrow N_t$$. The same applies for TrialComputeRemove.

The de Broglie wavelength, $$\Lambda^d$$, is absorbed into the definition of $$\mu$$ for convenience, $$\mu + \ln(\Lambda^d)/\beta \rightarrow \mu$$.

For configurational bias, consider multiple trial positions and select one.

 Forward event [reverse event] Probability, $$\pi_{on}$$ [reverse probability, $$\pi_{no}$$] Generate k positions in V. Probability that x_n is in k. [Select particle of type t] $$k/V$$ $$[\frac{1}{N_t + 1}]$$ Pick x_n in k positions with probability P_k. [Remove selected particle] $$P_k$$ $$$$ Accept [Accept] $$min(1, \chi)$$ $$[min(1, 1/\chi)]$$

$$\frac{k P_k}{\Lambda^{dN} V}e^{-\beta U_o + \beta\mu_t N_t} min(1, \chi) = \frac{1}{\Lambda^{d(N+1)} (N_t+1)}e^{-\beta (U_o + U) + \beta\mu_t (N_t+1)}min(1, 1/\chi)$$

where $$U$$ is the interaction energy of the new site with the existing sites and $$U_o$$ is the energy of the original configuration.

$$\chi = \frac{V}{k P_k(N_t+1)\Lambda^d}e^{-\beta U + \beta\mu_t}$$

If the probability of picking a position is chosen by the Rosenbluth factor,

$$P_k = e^{-\beta U}/\sum_i^k e^{-\beta U_i}$$.

Thus, the acceptance is given by

$$\chi = \frac{V \sum_i^k e^{-\beta U_i}}{k(N_t+1)\Lambda^d}e^{\beta\mu_t}$$

For dual-cut configurational bias, the new trials are instead chosen from a reference potential, $$U^r$$, that is ideally much faster to compute than the full potential but still contains sampling-relevant terms (e.g., excluded volume in a dense system).

$$P_k = e^{-\beta U^r}/\sum_i^k e^{-\beta U_i^r}$$

$$\chi = \frac{V \sum_i^k e^{-\beta U_i^r}}{k(N_t+1)\Lambda^d}e^{-\beta(U - U^r) + \beta\mu_t}$$

Note that these equations consider only a single-site particle.

For the deletion trial, the forward and reverse moves are switched.

 Forward event [reverse event] Probability, $$\pi_{on}$$ [reverse probability, $$\pi_{no}$$] Select particle of type t. [Generate k positions in V. Probability that x_o is in k.] $$\frac{1}{N_t}$$ $$[k/V]$$ Remove selected particle [Pick x_o in k positions with probability P_k.] $$1$$ $$[P_k]$$ Accept [Accept] $$min(1, \chi)$$ $$[min(1, 1/\chi)]$$

$$\frac{1}{N_t \Lambda^{dN}}e^{-\beta U_o + \beta\mu_t N_t} min(1, \chi) = \frac{k P_k}{V \Lambda^{d(N-1)}}e^{-\beta (U_o - U) + \beta\mu_t (N_t-1)}min(1, 1/\chi)$$

where $$U$$ is the interaction energy of the removed site with the existing sites and $$U_o$$ is the energy of the original configuration.

$$\chi = \frac{k P_k \Lambda^d}{V N_t}e^{\beta U - \beta\mu_t}$$

If the probability of picking a position is chosen by the Rosenbluth factor,

$$P_k = e^{-\beta U}/\sum_i^k e^{-\beta U_i}$$.

Note that one of the k positions is $$x_o$$. Thus, the acceptance is given by

$$\chi = \frac{k \Lambda^d}{V N_t \sum_i^k e^{-\beta U_i}}e^{-\beta\mu_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.