ComputeMorph
-
class ComputeMorph : public feasst::TrialCompute
Attempt to morph particle(s) a, b, …, h into particle(s) \(z_a, z_b, ..., z_h\).
To avoid trivial morphs, the particle type of \(i\) cannot be equal to the type of \(z_i\).
The derivation of the acceptance criteria follows a similar procedure as descibed in TrialComputeAdd and ComputeAddMultiple.
Forward event
[reverse event]
Probability, \(\pi_{on}\)
[reverse probability, \(\pi_{no}\)]
Change particle of type a to z_a
[Change particle of type z_a to a]
\(1/N_a\)
\([1/(N_{z_a}+\sum_{x=a}^h \delta_{z_az_x} - \delta_{z_ax})]\)
Change particle of type b to z_b
[Change particle of type z_b to b]
\(1/(N_b+1+\sum_{x=a}^{b} \delta_{z_x b} - \delta_{xb})\)
\([1/(N_{z_b}+\sum_{x=b}^h \delta_{z_bz_x} - \delta_{z_bx})]\)
…
…
Change particle of type h to z_h
[Change particle of type z_h to h]
\(1/(N_h+1+\sum_{x=a}^{h} \delta_{z_x h} - \delta_{xh})\)
\([1/(N_{z_h} + 1)]\)
Accept
[Accept]
\(min(1, \chi)\)
\([min(1, 1/\chi)]\)
Application of local detailed balance yields the acceptance probability,
\(\chi = e^{-\beta\Delta U} \prod_{i=a}^h e^{\beta(\mu_{z_i}-\mu_i)} \frac{ N_i + 1 + \sum_{j=a}^i \delta_{z_j i} - \delta_{ji} }{ N_{z_i} + \sum_{j=i}^h \delta_{z_i z_j} - \delta_{z_ij} }\)
Note that the number of particles is from the perspective of the old state.
A rederivation using the new state number of particles instead is as follows:
Forward event
[reverse event]
Probability, \(\pi_{on}\)
[reverse probability, \(\pi_{no}\)]
Change particle of type a to z_a
[Change particle of type z_a to a]
\(1/(N_a+\sum_{x=a}^h \delta_{xa} - \delta_{z_xa})\)
\([1/N_{z_a}]\)
Change particle of type b to z_b
[Change particle of type z_b to b]
\(1/(N_b+\sum_{x=b}^h \delta_{xb} - \delta_{z_xb})\)
\([1/(N_{z_b}+1+\sum_{x=a}^b \delta_{xz_b}-\delta_{z_xz_b})]\)
…
…
Change particle of type h to z_h
[Change particle of type z_h to h]
\(1/(N_h + 1)\)
\([1/(N_{z_h}+1+\sum_{x=a}^h \delta_{xz_h}-\delta_{z_xz_h})]\)
Accept
[Accept]
\(min(1, \chi)\)
\([min(1, 1/\chi)]\)
\(\chi = e^{-\beta\Delta U} \prod_{i=a}^h e^{\beta(\mu_{z_i}-\mu_i)} \frac{ N_i + \sum_{j=i}^h\delta_{ji}-\delta_{z_j i} }{ N_{z_i}+1+\sum_{j=a}^i\delta_{jz_i}-\delta_{z_jz_i} }\)
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)