Much of my research efforts have involved the development Cassandra, an open-source Monte Carlo code capable of simulating molecular systems with highly coupled degrees of freedom. Examples of systems that can be treated with this code are molecules containing chain, rings, or both. The supported statistical mechanical ensembles are the canonical, isothermal-isobaric, grand-canonical and Gibbs ensembles. One of the main strengths of Cassandra is the possibility of computing phase equilibria of molecular systems. The key feature of Cassandra is how sampling of internal molecular degrees of freedom occur and how this method is coupled to typical particle-insertion methods for phase equilibria, such as the Gibbs ensemble.
In Cassandra, a molecule is decomposed into molecular fragments. In general, a fragment is composed of a central site bonded to two or more sites giving rise to multiple bond angles at the central site. For instance, ethanol is parsed into three distinct fragments, as shown below. The first one is an oxygen atom connected to a hydrogen and a carbon atom. The second fragment is composed of a central carbon, bonded to two hydrogens, one oxygen and to another carbon. Finally, the third fragment consists of a central carbon bonded to three hydrogens and one carbon.
Once the fragments have been identified, we construct a Boltzmann distributed library of conformations for each molecular fragment, as shown below. Each of the generated conformations has a different angle between its constituent atoms. Different configurations are generated by performing a Metropolis Monte Carlo simulation using atom displacement moves in the ideal gas phase. This process is repeated for each of the three fragment types. All this is done in advance of the actual molecular simulation.
Using conformations drawn from this library, a molecule is reassembled in the simulation box in a fragment-by-fragment fashion, reminiscent of the configurational-biased Monte Carlo algorithm. The insertion process starts by selecting a fragment that will serve as the starting point for a regrowth move in the new box. After this, a random conformation from the respective fragment library is chosen. Then, the fragment is inserted in the simulation box in a predefined number of trial insertion positions. A configurational-biased strategy is used to pick one of those positions. The rest of the molecule is attached by selecting a particular fragment conformation from the corresponding fragment library and generating several trial dihedral angles for the selected conformation that will determine its relative orientation with respect to the rest of the molecule. The process is repeated until all the deleted fragments are replaced with new configurations. The net result is that new bonds and dihedral angles are generated for a segment of the molecule.