HPMC support cluster moves with depletants

Merged
#394 · Created  · Last updated

Merged pull request

Merged in clusters_enthalpy (pull request #419)

548a827·Author: ·Closed by: ·2018-03-06

Description

From UpdaterClusters.h

A generic cluster move for implicit depletant integrators. The cluster move set employed consists of pivot (point mirroring) and line reflection (pi rotation) moves. The algorithm therefore implements a simplified version of the Geometric Cluster algorithm, cf. Liu and Luijten PRL 2004 and Sinkovits, Barr and Luijten JCP 2012.

The algorithm has been simplified to not perform any detailed overlap checks, only circumsphere overlap checks. This choice does not affect correctness, it only affects ergodicity. Therefore the cluster move should be combined with a local move, that is, IntegratorHPMCMonoImplicit(New).

It should be straight forward to generalize the updater to general enthalpic potentials.

In order to support anisotropic particles, we have to reject moves that cross the PBC, as described in Sinkovits et al. Furthermore, the class doesn't support any parallelization - it will work in MPI, but only in serial. The reason is that GCA-like algorithm's are not easily parallelizable because of the non-local nature of the move set.

Some fixing up of documentation still needs to be done.

EDIT: I rewrote the updater to support MPI parallelization to the extent possible. There are still serial bottlenecks, but the most expensive part, the overlap checks, are now performed in parallel.

Note: I fixed two minor bugs in HPMC along the way. They can be cherry-picked for maint: commit:9b6c4a93e73a12826db4d62513d61c1ae42b7594 and commit:3b6c46617574d77cf25852666d06056cf0866ddb

ChangeLog

New features

  • New command hpmc.update.cluster() supports GCA-like cluster moves with anisotropic particles and depletants.

Bug fixes

  • Fixed a problem with periodic boundary conditions and implicit depletants when depletant_mode=circumsphere

  • Fixed a rare segmentation fault with hpmc.integrate.*_union() and hpmc.integrate.polyhedron

0 attachments

0 comments

Loading commits...