class TrialGrow : public feasst::TrialFactoryNamed

Manually describe partial or full-particle growth using configurational bias. The input is a vector of argtype, where each argtype represents a TrialStage for growing one (or rarely, multiple) sites.

The following options may only be used in the first argtype.

  • particle_type: type of particle in Configuration (always required).

  • site: site index in particle_type to transfer/regrow (always required).

  • weight: weight of selection of this trial (default: see Trial).

  • transfer: if true, create add and remove trial with equal weight (default: false).

  • gibbs_transfer: if true, create two trials which transfer particles between configuration_index and configuration_index2 (default: false).

  • regrow: if true, place anywhere in the domain (default: false).

  • transfer_avb: if true, same as transfer but with TrialAddAVB/TrialRemoveAVB for the first stage (default: false).

  • regrow_avb2: if true, regrow using TrialAVB2 in the first stage (default: false).

  • regrow_avb4: if true, regrow using TrialAVB4 in the first stage (default: false).

  • translate: if true (default: false), translate site (which is required arg for TrialSelectParticle). In addition, must have number of stages equal to number of sites.

  • add: if true, create an add trial (default: false).

  • remove: if true, create a remove trial (default: false).

  • add_avb: if true, create an avb add trial (default: false).

  • remove_avb: if true, create an avb remove trial (default: false).

  • default_num_steps: optional default number of steps for all stages.

  • default_reference_index: optional default reference index for all stages.

  • default_new_only: optional default new only for all stages.

The following options may be used in any argtype. If used in the first, then it is a partial regrowth move.

Note that only one of bond, angle or branch may be true for a given stage.

Derivation of the acceptance criteria follows the procedure described in TrialComputeMove and first described in Lecture 9 of Prof. David Kofke’s Molecular Simulation course CE 530

For bonds, angles and dihedrals, the relevant forward and reverse probabilities are as follows:

Forward event

[reverse event]

Probability, \(\pi_{on}\)

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

Select particle of type t

[Select particle of type t]



Select bond from given site indices

[Select bond from given site indices]



Select new length/angle \(b_n\)

[Select old length/angle \(b_o\)]



Select new orientation

[Select old orientation]





\(\min(1, \chi)\)

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

Applying (local) detailed balance yields

\(\chi = \frac{P(b_o)}{P(b_n)}\exp[-\beta(U_n - U_o)]\).

For example, the probabililty of selecting a bond length/angle, b, by an entirely random placement in space is given by

\(P \propto 1\).

In this case,

\(\chi = \exp[-\beta(U_n - U_o)]\)

where the energies include all intramolecular and intermolecular terms. For strong bonds, this becomes highly inefficient because most trials will be rejected due to the intramolecular term, which is inexpensive to compute, but the intermolecular term has to be computed for each trial and is expensive. This is described as scheme one on page 347 of Frenkel and Smit’s Understanding Molecular Simulation.

The second, more efficient scheme is to select the bond/angle by taking the intramolecular bond energy, \(U^b\), into account during the selection.

\(P \propto \exp(-\beta U^b)\).

In this case,

\(\chi = \frac{P(b_o)}{P(b_n)}\exp\{-\beta[(U_n-U^b_n) - (U_o-U^b_o)]\}\).

Because \(U^b\) is already taken into account during selection of the bond/angle using this Rosenbluth form for \(P(l)\), \(U^b\) is excluded from the energy in the acceptance probability.

Subclassed by feasst::TrialGrowFile

Public Functions

TrialGrow(std::vector<argtype> args)

list of arguments, one for each stage.

class TrialGrowFile : public feasst::TrialGrow


  • grow_file: name of TrialGrowFile file with the following format:

    line1: TrialGrowFile

    line2: optional space

    line3: stage with key pair separated by space (e.g., “transfer true site 0”)

    lineX: additional stages until end of file or empty line.

    lineY: additional trials with additional stages as described above, separated by empty lines.

    See the tutorials for examples.