vegas
Introduction
vegas is a feature rich atomistic magnetic material simulation platform written in rust. It supports Ising and Heisenberg spins, as well as a couple of Monte Carlo algorithms, namely Metropolis and Wolff.
Vegas is meant to be used as a library to build your custom magnetic material simulation programs. That said, there's an included program that can handle generic input and can be used as a reference implementation for your own programs.
Installation
To install vegas you need to have the rust installed. Then, you can install vegas by running the following command:
If you want to install vegas as a library, you can add it via cargo:
Features
As a library
- Statistical metrics accumulators.
- Static dispatching of compund Hamiltonians.
- Pre-defined energy components: Gauge, Exchange, Anisotropy, Zeeman.
- Powerful error handling via the
thiserrorcrate. - Flexible instrumentation system, using dynamic dispatching.
- Support for different integration algorithms such as Metropolis.
- Parquet input output support via the
parquetcrate. - Pre-defined programs: Relax, CoolDown, HysteresisLoop.
As a command line tool
You can use the toml input file format to run simulations. An example of input file is given below:
# Model definition can be Ising or Heisenberg.
= "Ising"
# Algorithm definition can be Metropolis or Wolff.
= "Metropolis"
# You can create unit cells of different lattice types.
[]
= "sc"
# You can expand your unit cell to create larger samples.
[]
= 10
= 10
= 1
# You can set periodic boundary conditions in each direction.
[]
= true
= true
= false
# You can control the stages of the simulation.
[[]]
= "Relax"
= 1000
= 4.0
[[]]
= "CoolDown"
= 4.0
= 0.1
= 0.1
= 1000
= 20000
# You can define outputs to be written during the simulation.
[]
= "./output.parquet"
[]
= "./state.parquet"
= 1000
You can run the simulation by executing the following command:
Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub. There are currently some missing features that would benefit the package, such as:
- Custom exchange interaction values, we currently support only one value.
- More Hamiltonian terms (Dzyaloshinskii-Moriya, Dipolar, etc).
- More integration algorithms (Wolff, Swendsen-Wang, etc).