Skip to content

Releases: spirit-code/spirit

New Desktop GUI, update to C++14

17 Mar 17:46
e82250d
Compare
Choose a tag to compare

Updated to C++14

  • 63261d9c - Updated C++ standard from C++11 to C++14.

Added features

  • 35e6ea48 - Added a 4th order anisotropy

Desktop GUI changes

Added new immediate mode GUI using Dear ImGui
grafik

Also,

  • fc7735fe - Ui-QT: Re-enabled Hopfion configuration and added new normal option.
  • 5b7f1954 - Ui-CPP: Added two options to the plot widget 1) divide by nos and 2) renormalize Rx. Both are useful when observing moving_endpoints calculations
  • 5dee3d9d - Ui-QT: added moving endpoints to parameters widget

Interface changes

  • 1a5bb7ff - Core: implemented Hamiltonian getters for Exchange and DMI pairs. Note: there is still no getter for DMI pairs, only for the number of DMI pairs.
  • b5351e57 - Python API: Added function system.get_energy_contributions - Returns a dictionary with strings as keys and floats as values. Can be used like energy_ex = contribs["Exchange"], etc.
  • d92ceb35 - Core: improve Chain_Set_Length. Now automatically copies the current image when an increase of the chain length is requested. Also fixed a bug in ui-imgui that caused a crash when reducing the chain length
  • 2dab6cfc - python_api: corrected hamiltonian.get_field and added it to unit tests
  • ee7baf10 - Hamiltonian_API: Added a function that writes the embedding space Hessian to a file
  • f87ec6ba - EMA: Can now control sparse parameter via API. Also added function to clear the modes.
  • 57486d7f - API: Implemented an easy way to get basic information about a simulation run via the API.
  • facb5601 - Configurations: Added 'normal' parameter to Configuration_Hopfion.
  • 91de3514 - Quantities: Implemented a new function Quantity_Get_Toplogical_Charge_Density
  • 7ec8ee46 - API: implemented force and energy history in Simulation_Run_Info
  • c95766c4 - C-API: Changed NULL to nullptr in Simulation.h
  • a30dc841 - GNEB: Added get and set functions for moving endpoints to API
  • c7e84313 - GNEB: equilibrium delta_Rx for moving endpoints can now be controlled via the API
  • cfe8fd86 - GNEB: API getter for equilibrium_delta_Rx
  • d6bd46a0 - API for cubic anisotropy
  • 08ea0fc6 - API: Implemented getters and setters for llg_beta

Bugfixes

  • 59db68d7 - CUDA fix
  • 5b7f5479 - Bugfixes for imgui webapp. - fixed OpenGL blending, which made transparent colours see-through to the gl canvas - fixed include orders for GLAD - also improved charcoal style accordingly - also moved ui-imgui/ui-web to ui-imgui/webapp - also removed unreachable code from main_web.cpp
  • 19a962fc - GH-actions and CMake: fix ImGui builds. Also deactivated ImGui build for coverage builds etc.
  • f45715e2 - Core: fix bug in Data::Geometry::triangulation and tetrahedra.
  • fba2fb51 - Bugfix in Core: deadlock in OrderedLock class. If a second thread called lock and was waiting on cvar.back(), the referenced std::condition_variable could be destructed by the first locking thread calling unlock, causing the second thread to wait forever. This is fixed by poping the queue only after wait completed (i.e. within lock). Additionally, spurious wakeups could cause the wait to end prematurely, which is fixed by using the predicated overload. Also made some naming improvements and fixed formatting.
  • 2189dce2 - Core: fix config parsing of RNG seeds.
  • 5c5c403f - CMake: fix collision of options.
  • 3be348e6 - Ui-QT: fixed an issue, where resizing of the geometry could lead to crashes. The cell filters needed to be reset after setting n_cell.
  • 11fe9381 - Ui-QT: fixed an issue, where resizing of the geometry could lead to crashes (Part 2). Updates of the cell filter slider ui-elements would emit events that could reset the m_cell_min/max_xxx values the old numbers. The SpinWidget::setCellFilter function now makes sure to only accept viable values.
  • 5b59ebec - Bugfix: check boundary conditions on quadruplets. This commit fixes only the CPU implementation.
  • 382cac3c - Hamiltonian_Heisenberg: - Exchange/DMI: cu_idx_from_pair was erroneously given the cell index as first argument (it should be the spin index) - Zeeman: The index computation was missing a factor of n_cell_atoms
  • e8991403 - Fix potential bug due to initialization order fiasco.
  • 9b998cb6 - Fixed an issue when reading in eigenmodes from the GUI
  • 06d5bc64 - Quantities: Get_Magnetization now respects mu_s
  • 0706699e - Configparser: Fixed a small error where the log of individual pinned sites would just repeat the direction of the first fixed spin.
  • 41403b4e - Hamiltonian_Heisenberg: Fixed race condition in DDI
  • 4827222d - Method_GNEB: fixed a bug in a lambda capture
  • a4b45178 - Timing: Fixed issues in DurationFromString
  • 32ce288a - Hamiltonian_Heisenberg: Fixed a bug in the OpenMP implementation of DDI. Some index variables were not thread private. Somehow this only caused issues on clang.

Other improvements and changes

Read more

Fix for Single Image Methods

11 Jan 18:14
Compare
Choose a tag to compare

Fixed a bug, causing segfaults when using one of the single image methods on any image of the chain other than the first one.

LBFGS and Sparse HTST

21 Dec 16:45
Compare
Choose a tag to compare

New LBFGS Solvers (thanks to A. Ivanov)

Added new solvers for energy minimization LBFGS_Atlas, LBFGS_OSO and VP_OSO.
These new solvers circumvent the explicit renormalization of the spins by working with norm-preserving maps - either stereographic atlases or matrix exponentials.

Sparse HTST

Implementad a sparse version of HTST, which can be used if no dipole-dipole interactions are present. If applicable, it is much faster and more memory-efficent than the dense implementation.

Other

  • added interpolated energy contributions
  • internally, mutices are now FIFO, allowing to interact with the GUI even when there are many iterations per second
  • minor fixes for HTST
  • improved log legibility
  • small improvements of ui-web
  • more and improved documentation
  • new CLI parser
  • added simulation_n_shot to python API
  • fixed unit tests for single precision
  • optional skipping of zero padding, if periodic boundaries are used
  • fixed memory leaks in CUDA backend
  • fixed api functions energy_per_spins (thanks to P. Buhl)
  • added circular domain wall skyrmions
  • added visual filters, based on lattice cell to QT-GUI
  • optimized LLG and GNEB energy calculations by deriving them from the gradient
  • moved CI to github actions
  • fixed Hessian for dipole-dipole interaction
  • improved cmake code, especially cuda integration

Fixes to API and CUDA backend

04 Jul 14:42
Compare
Choose a tag to compare
  • Fixed a bug in the HTST API
  • Fixed incorrect names in the Python log API
  • The CUDA backend now uses CUB for reductions, eliminating some error-prone self-written boilerplate code.
  • Improved the documentation of CUDA limitations, noting the fact that the GUI cannot be used with the CUDA backend on Windows or OSX

Major Feature Release

23 Jun 20:36
Compare
Choose a tag to compare

Note that the paper about this code has been published and should be cited when using the code for scientific publications: Phys. Rev. B 99, 224414 (2019) (arxiv version: arXiv:1901.11350).

Added Features

Minimum Mode Following (MMF)

See the method paper, Phys. Rev. Lett. 121, 197202 (2018), for more details.

This method can be used to search out saddle points in the energy landscape.
See the docs for the available parameters.

Harmonic Transition State Theory (HTST)

See the method paper, Comp. Phys. Comm. 196, 335 (2015), for more details.

This method can be used to estimate the rate of thermally activated transitions in a spin system
from the critical points in the energy landscape corresponding to a given transition. It can
therefore be used to estimate lifetimes of (meta-) stable spin configurations.
See the docs for the available parameters.

Diplolar interactions

Also referred to as dipole-dipole interaction (DDI), stray field or demagnetising field.
See the docs for the available parameters.

Impvroved spring forces for GNEB

Spring force ratio

This is the ratio of weighting of the energy difference and the geodesic distance
between images in the calculation of the spring force. A ratio of 0.5 will cause the lengths
of the interpolated energy polynomials between image to take equal lengths.

Path shortening force

The path shortening force tries to reduce the geodesic length of the GNEB transition.
It can be used to pre-converge a path, avoiding the effect of zero energy modes, which
might otherwise hinder convergence.

If it is set to a large value, the path will tend to the homogeneous interpolation between
bounding images.

4th order Runge-Kutta solver

This solver is more precise for dynamical simulations than the other solvers, such as
Heun's (2nd order RK), but requires more calculations of the energy gradient.


Desktop GUI changes

  • added configurations-like for setting atom types / defects
  • added new "interactive mode" for setting atom types / defects
  • improved InfoWidget
  • improvements for multi-atom basis cells
  • added colormap cardinal axis
  • fixed some locale bugs

Interface Changes

Input File

There are some breaking changes to the input file!

C API

  • Added APIs for MMF and HTST
  • Made the function naming more consistent
  • Split Simulation_Start API into one function per Method
  • Added APIs for setting atom types / defects and pinning
  • Added Chain_Set_Length
  • Added APIs for GNEB image types and spring force parameters

Python API

Renamed and/or recapitalised all APIs in order to adhere closer to
PEP8.
The capitalisation should now consistent.


Bugfixes

  • fixed the OVF output writing (both header and binary endianness)
  • fixed several build problems, such as
    • the default build type
    • passing CMake options from the top level to the Spirit core library
    • building the CUDA backend on Windows
  • several fixes for multi-atom basis cells
  • corrected stochastic thermal field in LLG method
  • minor fix to homogeneous transition function
  • corrected calculation of topological charge
  • minor fix of isosurfaces for multi-atom basis cells
  • bugfix for geometry dimensionality calculation
  • several fixes for resizing the geometry at runtime
  • fixed spin spiral creation

Other Improvements

  • moved mu_s from Hamiltonian to Geometry
  • improved logging of backtraces and unhandled exceptions
  • added a Dockerfile
  • updated and completed C API docs and setup autogenerating Python API docs
  • added logos to docs

Bugfix for CUDA backend

10 Apr 14:07
Compare
Choose a tag to compare

A missing function call caused a segfault on initialisation.

Bugfixes for Windows and CUDA

05 Apr 08:18
Compare
Choose a tag to compare
  • fixed some compile errors with float scalar type on Windows

  • updated Eigen to work with newer CUDA versions

  • fixed CUDA compilation of Heisenberg Hamiltonian

  • also removed unneeded/unmaintained input files

Bugfix for Exchange and DMI getters

06 Jul 12:57
Compare
Choose a tag to compare

Along with the setters, the getter functions in the Hamiltonian API were broken when the two Heisenberg Hamiltonians were merged.
The getters would sometimes give back wrong values and sometimes even crash.

Bugfix for Exchange and DMI setters

05 Jul 15:54
Compare
Choose a tag to compare

The APIs for these two interactions were broken.
Also added the DM chirality to the API and to UI-CPP.

Bugfixes

13 Jun 12:09
Compare
Choose a tag to compare
  • repaired documentation generation

  • added Simulation_Get_Time and Simulation_Get_Wall_Time API functions and added corresponding fields to the InfoWidget in the QT GUI

  • fix for Intel compiler 18, where the OpenMP code would not build

  • improved returns of some Python bindings, now using lists instead of weird ctypes types

  • added some Python bindings for Hamiltonian

  • added N_Images_In_File and fixed reading bindings of Python API

  • fixed input parsing of some pre-defined bravais lattices and fixed Bravais vectors in Geometry.cpp

  • some improvements to PlotWidget in QT GUI, which should make it easier to use when the number of images is large

  • fixed the useability of some line-edits in QT GUI