The design of Simpatico was motivated by the following goals:
- Extensibility: New algorithms may be added for most elements of a simulation via C++ class inheritance, without modifying the core source code. Extensible elements include: Monte Carlo moves, molecular dynamics integrators, potential energy functions, molecular species, data analysis algorithms, and configuration file formats.
- Developer friendliness: Simpatico is written in idiomatic, object oriented C++ with an unusual level of developer documentation (for a scientific program) at the programming interface and source code level.
- Efficiency: Both parallel (ddSim) and single-processor (mcSim and mdSim) programs are designed to be competitive as tools for computationally demanding research projects.
- Integrated data analysis: All programs come bundled with a set of data analysis ("Analyzer") classes that can be used for "on-the-fly" analysis, during a simulation. The mcSim and mdSim programs can also be used for post-processing of trajectory files, using the same set of data analysis classes.
- Integrated MC, MD and hybrid MC simulations: The single-processor mcSim and mdSim programs use similar data structures to provide efficient implementations of molecular Monte Carlo (MC), molecular dynamics (MD), and hybrid Monte Carlo (HMC) algorithms.
The design of mcSim and mdSim (which share a great deal of code) is similar in some ways to that of Etomica, which was written in Java by David Kofke's group at the University of Buffalo. The domain decomposition parallelization algorithm used in ddSim is similar to that originally introduced in the LAMMMPS molecular dynamics code.
Simpatico has thus far been used only for simulations of simple coarse-grained models of polymer liquids. It lacks some features for setup and simulation of atomistic models that are found in several more mature open source molecular dynamics simulation codes, such as Lammps, DL_POLY, NAMD, Gromacs, and in a smaller number of Monte Carlo codes, such as Towhee.
1 About (Up) 1.2 Capabilities (Next)