class ComputeAddMultiple : public feasst::TrialCompute

Attempt to add multiple particles.

For a derivation of the acceptance criteria, see TrialComputeMove and TrialComputeAdd for reference. For adding multiple particles i, j, …, z:

Forward event

[reverse event]

Probability, \(\pi_{on}\)

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

Select insert trial

[Select remove trial]



Place particle of type i

[Delete particle type i]


\(\left[1/(N_{i}+ \sum_{a=i}^{z}\delta_{ia})\right]\)

Place particle of type j

[Delete particle type j]


\(\left[1/(N_{j}+ \sum_{a=j}^{z}\delta_{ja})\right]\)

Place particle of type z

[Delete particle type z]





\(min(1, \chi)\)

\([min(1, 1/\chi)]\)

where \(\delta_{ab} = 1\) when the types of particles \(a\) and \(b\) are identical. Otherwise, \(\delta = 0\).

Application of local detailed balance yields the acceptance probability,

\(\chi = e^{-\beta\Delta U}\prod_{a=i}^z\frac{Ve^{\beta\mu_a}} {(N_a+\sum_{b=a}^{z}\delta_{ab})\Lambda^d}\)

This equation was derived from the perspective of the old state. If the new state is the perspective, \(N_a+\sum_{b=a}^{z}\delta_{ab} \rightarrow N_a-\sum_{b=i}^{a-1}\delta_{ab}\)

Public Functions

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

Perform the Perturbations and determine acceptance.