Releases: spirit-code/spirit
New Desktop GUI, update to C++14
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
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 calculations5dee3d9d
- 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 functionsystem.get_energy_contributions
- Returns a dictionary with strings as keys and floats as values. Can be used likeenergy_ex = contribs["Exchange"]
, etc.d92ceb35
- Core: improveChain_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 length2dab6cfc
- python_api: corrected hamiltonian.get_field and added it to unit testsee7baf10
- Hamiltonian_API: Added a function that writes the embedding space Hessian to a filef87ec6ba
- EMA: Can now controlsparse
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_Density7ec8ee46
- API: implemented force and energy history in Simulation_Run_Infoc95766c4
- C-API: ChangedNULL
tonullptr
inSimulation.h
a30dc841
- GNEB: Added get and set functions for moving endpoints to APIc7e84313
- GNEB: equilibrium delta_Rx for moving endpoints can now be controlled via the APIcfe8fd86
- GNEB: API getter for equilibrium_delta_Rxd6bd46a0
- API for cubic anisotropy08ea0fc6
- API: Implemented getters and setters for llg_beta
Bugfixes
59db68d7
- CUDA fix5b7f5479
- 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.cpp19a962fc
- GH-actions and CMake: fix ImGui builds. Also deactivated ImGui build for coverage builds etc.f45715e2
- Core: fix bug inData::Geometry::triangulation
andtetrahedra
.fba2fb51
- Bugfix in Core: deadlock inOrderedLock
class. If a second thread calledlock
and was waiting oncvar.back()
, the referencedstd::condition_variable
could be destructed by the first locking thread callingunlock
, causing the second thread towait
forever. This is fixed bypop
ing the queue only afterwait
completed (i.e. withinlock
). Additionally, spurious wakeups could cause thewait
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_atomse8991403
- Fix potential bug due to initialization order fiasco.9b998cb6
- Fixed an issue when reading in eigenmodes from the GUI06d5bc64
- Quantities: Get_Magnetization now respects mu_s0706699e
- 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 DDI4827222d
- Method_GNEB: fixed a bug in a lambda capturea4b45178
- Timing: Fixed issues in DurationFromString32ce288a
- 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
e1ba4599
- CI: addedsudo apt update
before twosudo apt install
calls.474fa90f
- CI and CMake: working towards deploying binary releases.8aba87dc
- CI: restructured artifacts to add licenses to macOS package.e9cd19a9
- CI: try to fix codecov upload.64fc4e34
- CI: run also on pull requests. Note: do not deploy on pull request events.692bdd66
- CI: added build of mobile webapp and webapp artifacts.945e3d50
- CI: add release drafting on tags.- [
7e4f0f6e
](http://github.com/spirit-code/spirit/commit/7e4f0f6e99b214a6904ec4db7e8e022ef98a0...
Fix for Single Image Methods
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
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
- 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
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
A missing function call caused a segfault on initialisation.
Bugfixes for Windows and CUDA
-
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
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
The APIs for these two interactions were broken.
Also added the DM chirality to the API and to UI-CPP.
Bugfixes
-
repaired documentation generation
-
added
Simulation_Get_Time
andSimulation_Get_Wall_Time
API functions and added corresponding fields to theInfoWidget
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