SPIN SIMULATION FRAMEWORK
linux build:
This repository contains experimental micromagnetic version of Vulkan Spirit developed by Tolmachev Dmitrii. Peter Grünberg Institute and Institute for Advanced Simulation, Forschungszentrum Jülich, D-52425 Jülich, Germany
Vulkan Spirit requires installation of Vulkan SDK with a minimal version of 1.1. It can be launched on any modern GPU - including Nvidia, AMD and Intel iGPU. By utilizing the Vulkan-optimized library VkFFT (https://github.com/DTolm/VkFFT), also developed by Tolmachev Dmitrii, Vulkan Spirit achieves 2x-3x computational speed increase over mumax3 package. More information on implementation and optimizations can be found in my Master thesis, for which contact me by email ([email protected], [email protected]).
Currently working:
-GPU micromagnetic simulations:
-LLG solvers: RK4, Depondt
-minimizers: VP-OSO, LBFGS-OSO, CG-OSO
-gradient components: Exchange, DMI(bulk, interface), anisotropy(uniaxial, cubic), Zeeman, DDI
-regions with different parameters, periodic/open boundary conditions, freezing spins
-passing standard problems #1-#4
-Qt GUI - almost every parameter can be adjusted from there
-Max system sizes supported: (2^14, 2^15, 2^15)
Not working yet (compared to current Spirit release version):
-Methods, other than LLG
-images and chains - one simulation/one Spirit instance. Can specify at which GPU to run in config
-python bindings - use main.cpp in ui-cpp folder. Regions can also be defined from there.
-regions definition from GUI
-STT and temperature effects
-OSX
How to install:
-install CMake (>=3.11)
-install Vulkan SDK (>=1.1)
-install Qt (Qt >= 5.7 (including qt-charts); OpenGL drivers >= 3.3)
-follow core library instructions for Linux or Windows
Standard problems check: https://github.com/dtolm/Spirit/blob/master/Vulkan_Spirit_standard_problems.pdf
Below are the contents of old readme file.
Core Library:
Service | System | Compiler | Status |
---|---|---|---|
Travis-CI | Ubuntu 14.04 macOS |
GCC 6 Clang |
master: develop: |
AppVeyor | Windows | MSVC14 MSVC14.1 |
master: develop: |
Branch | Python Package Coverage | Core Library Coverage |
---|---|---|
master: | ||
develop: |
The code is released under MIT License.
If you intend to present and/or publish scientific results or visualisations for which you used Spirit,
please cite G. P. Müller et al., Phys. Rev. B 99, 224414 (2019)
and read the docs/REFERENCE.md.
This is an open project and contributions and collaborations are always welcome!!
See docs/CONTRIBUTING.md on how to contribute or write an email to [email protected]
For contributions and affiliations, see docs/CONTRIBUTORS.md.
Please note that a version of the Spirit Web interface is hosted by the Research Centre Jülich at http://juspin.de
- Introduction
- Getting started with the Desktop User Interface
- Getting started with the Python Package
Spirit is a platform-independent framework for spin dynamics, written in C++11. It combines the traditional cluster work, using using the command-line, with modern visualisation capabilites in order to maximize scientists' productivity.
"It is unworthy of excellent men to lose hours like slaves in the labour of calculation which could safely be relegated to anyone else if machines were used."
- Gottfried Wilhelm Leibniz
Our goal is to build such machines. The core library of the Spirit framework provides an easy to use API, which can be used from almost any programming language, and includes ready-to-use python bindings. A powerful desktop user interface is available, providing real-time visualisation and control of parameters.
- Atomistic Spin Lattice Heisenberg Model including also DMI and dipole-dipole
- Spin Dynamics simulations obeying the Landau-Lifschitz-Gilbert equation
- Direct Energy minimisation with different solvers
- Minimum Energy Path calculations for transitions between different spin configurations, using the GNEB method
- Cross-platform: everything can be built and run on Linux, OSX and Windows
- Standalone core library with C API which can be used from almost any programming language
- Python package making complex simulation workflows easy
- Desktop UI with powerful, live 3D visualisations and direct control of most system parameters
- Modular backends including parallelisation on GPU (CUDA) and CPU (OpenMP)
More details may be found at spirit-docs.readthedocs.io or in the Reference section including
There is also a Wiki, hosted by the Research Centre Jülich.
See the build instructions for Unix/OSX or Windows on how to get the desktop user interface.
The user interface provides a powerful OpenGL visualisation window using the VFRendering library. It provides functionality to
- Control Calculations
- Locally insert Configurations (homogeneous, skyrmions, spin spiral, ... )
- Generate homogeneous Transition Paths
- Change parameters of the Hamiltonian
- Change parameters of the Method and Solver
- Configure the Visualization (arrows, isosurfaces, lighting, ...)
See the UI-QT Reference for the key bindings of the various features.
Unfortunately, distribution of binaries for the Desktop UI is not possible due to the restrictive license on QT-Charts.
To install the Spirit python package, either build and install from source (Unix/OSX, Windows) or simply use
pip install spirit
With this package you have access to powerful Python APIs to run and control dynamics simulations or optimizations. This is especially useful for work on clusters, where you can now script your workflow, never having to re-compile when testing, debugging or adding features.
The most simple example of a spin dynamics simulation would be
from spirit import state, simulation
with state.State("input/input.cfg") as p_state:
simulation.start(p_state, simulation.METHOD_LLG, simulation.SOLVER_SIB)
Where SOLVER_SIB
denotes the semi-implicit method B and the starting configuration
will be random.
To add some meaningful content, we can change the initial configuration by inserting a Skyrmion into a homogeneous background:
def skyrmion_on_homogeneous(p_state):
from spirit import configuration
configuration.plus_z(p_state)
configuration.skyrmion(p_state, 5.0, phase=-90.0)
If we want to calculate a minimum energy path for a transition, we need to generate a sensible initial guess for the path and use the GNEB method. Let us consider the collapse of a skyrmion to the homogeneous state:
from spirit import state, chain, configuration, transition, simulation
### Copy the system and set chain length
chain.image_to_clipboard(p_state)
noi = 7
chain.set_length(p_state, noi)
### First image is homogeneous with a Skyrmion in the center
configuration.plus_z(p_state, idx_image=0)
configuration.skyrmion(p_state, 5.0, phase=-90.0, idx_image=0)
simulation.start(p_state, simulation.METHOD_LLG, simulation.SOLVER_VP, idx_image=0)
### Last image is homogeneous
configuration.plus_z(p_state, idx_image=noi-1)
simulation.start(p_state, simulation.METHOD_LLG, simulation.SOLVER_VP, idx_image=noi-1)
### Create transition of images between first and last
transition.homogeneous(p_state, 0, noi-1)
### GNEB calculation
simulation.start(p_state, simulation.METHOD_GNEB, simulation.SOLVER_VP)
where SOLVER_VP
denotes a direct minimization with the velocity projection algorithm.
You may also use Spirit order to extract quantitative data, such as the energy.
def evaluate(p_state):
from spirit import system, quantities
M = quantities.get_magnetization(p_state)
E = system.get_energy(p_state)
return M, E
Obviously you may easily create significantly more complex workflows and use Python to e.g. pre- or post-process data or to distribute your work on a cluster and much more!