SPPARKS is a Monte Carlo code that has algorithms for kinetic Monte Carlo (KMC), rejection KMC (rKMC), and Metropolis Monte Carlo (MMC). On-lattice and off-lattice applications with spatial sites on which "events" occur can be simulated in parallel.

KMC is also called true KMC or rejection-free KMC. rKMC is also called null-event MC. In a generic sense the code's KMC and rKMC solvers catalog a list of events, each with an associated probability, choose a single event to perform, and advance time by the correct amount. Events may be chosen individually at random, or a sweep of enumarated sites can be performed to select possible events in a more ordered fashion.

Applications are implemented in SPPARKS which define events and their probabilities and acceptance/rejection criteria. They are coupled to solvers or sweepers to perform KMC or rKMC or MMC simulations.

These are three kinds of applications in SPPARKS:

- on-lattice
- off-lattice
- general

On-lattice applications define static event sites with a fixed neighbor connectivity. Off-lattice applications define mobile event sites such as particles. A particle's neighbors are typically specified by a cutoff distance. General applications have no spatial component.

The set of on-lattice applications currently in SPPARKS are:

- diffusion model
- Ising model
- Potts model in many variants
- membrane model
- sintering model

The set of off-lattice applications currently in SPPARKS are:

- Metropolis atomic relaxation model

The set of general applications currently in SPPARKS are:

- biochemcial reaction network model
- test driver for solvers using a synthetic biochemical network

These are the KMC solvers currently available in SPPARKS and their scaling properties:

- linear search, O(N)
- tree search, O(logN)
- composition-rejection search, O(1)

SPPARKS is written in C++. It runs on single-processor desktop or laptop machines, but for some applications, can also be run in parallel. SPPARKS will run on any parallel machine that compiles C++ and supports the MPI message-passing library. This includes distributed- or shared-memory machines.

In parallel, a geometric partitioning of the simulation domain is performed. Sub-partitioning of processor domains into colors or quadrants (2d) and octants (3d) is done to enable multiple events to be performed on multiple processors simultaneously. Communication of boundary information is performed as needed.

Parallelism can also be invoked to perform multiple runs on a collection of processors, for statistical puposes.

SPPARKS is designed to be easy to modify and extend. For example, new solvers and sweeping rules can be added, as can new applications. Applications can define new commands which are read from the input script.

Our group has written and released a separate toolkit called Pizza.py which provides tools which can be used to setup, analyze, plot, and visualize data for SPPARKS simulations. Pizza.py is written in Python and is available for download from the Pizza.py WWW site.

SPPARKS is a freely-available open-source code, distributed under the terms of the GNU Public License, which means you can use or modify the code however you wish. See this page for a brief discussion of the open-source philosophy.

More details about the code are provided in the SPPARKS documentation.