2 research outputs found
Spirit: Multifunctional Framework for Atomistic Spin Simulations
The \textit{Spirit} framework is designed for atomic scale spin simulations
of magnetic systems of arbitrary geometry and magnetic structure, providing a
graphical user interface with powerful visualizations and an easy to use
scripting interface. An extended Heisenberg type spin-lattice Hamiltonian
including competing exchange interactions between neighbors at arbitrary
distance, higher-order exchange, Dzyaloshinskii-Moriya and dipole-dipole
interactions is used to describe the energetics of a system of classical spins
localised at atom positions. A variety of common simulations methods are
implemented including Monte Carlo and various time evolution algorithms based
on the Landau-Lifshitz-Gilbert equation of motion, which can be used to
determine static ground state and metastable spin configurations, sample
equilibrium and finite temperature thermodynamical properties of magnetic
materials and nanostructures or calculate dynamical trajectories including spin
torques induced by stochastic temperature or electric current. Methods for
finding the mechanism and rate of thermally assisted transitions include the
geodesic nudged elastic band method, which can be applied when both initial and
final states are specified, and the minimum mode following method when only the
initial state is given. The lifetime of magnetic states and rate of transitions
can be evaluated within the harmonic approximation of transition-state theory.
The framework offers performant CPU and GPU parallelizations. All methods are
verified and applications to several systems, such as vortices, domain walls,
skyrmions and bobbers are described
spirit-code/spirit: New Desktop GUI, update to C++14
The Spirit framework is designed for atomic scale spin simulations of magnetic systems of arbitrary geometry and magnetic structure, providing a graphical user interface with powerful visualizations and an easy to use scripting interface. An extended Heisenberg type spin-lattice Hamiltonian including competing exchange interactions between neighbors at arbitrary distance, higher-order exchange, Dzyaloshinskii-Moriya and dipole-dipole interactions is used to describe the energetics of a system of classical spins localised at atom positions. A variety of common simulations methods are implemented including Monte Carlo and various time evolution algorithms based on the Landau-Lifshitz-Gilbert equation of motion, which can be used to determine static ground state and metastable spin configurations, sample equilibrium and finite temperature thermodynamical properties of magnetic materials and nanostructures or calculate dynamical trajectories including spin torques induced by stochastic temperature or electric current. Methods for finding the mechanism and rate of thermally assisted transitions include the geodesic nudged elastic band method, which can be applied when both initial and final states are specified, and the minimum mode following method when only the initial state is given. The lifetime of magnetic states and rate of transitions can be evaluated within the harmonic approximation of transition-state theory. The framework offers performant CPU and GPU parallelizations. 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 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 pop ing 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 e1ba4599 - CI: added sudo apt update before two sudo 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 - CI: add lint step for core and ui-imgui ccaa6bef - CI: generate clang-tidy report to log 0d6c7907 - CMake: fix for bundling on Windows. Also minor improvement of GlfwWindow . 7eecca95 - CMake: fixed missing bin directory when bundling on Linux. c5d7d3a5 - Added missing thirdparty licenses. c1ec74fe - CMake: improved installation folder structure and added licenses. Thirdparty licenses are now installed and added to bundles. Documentation folder now has a better structure. d2ebbc74 - Handle_Signal: Sending interrupt signal, twice in 2s time interval, now properly exits the code. - std::chrono::duration was measured in wrong unit 441529a5 - CMake: enable Ninja+Clang on Windows. Using add_subdirectory( thirdparty/qhull ) instead of the complicated ExternalProject_add stuff. Had to make a minor change to thirdparty/qhull/CMakeLists to get the right include directories when compiling QHull. 1742cd96 - Core: add ordered locking to Spin_System_Chain . - renamed Ordered_Lock to OrderedLock , added class description comment and placed into Utility namespace - applied renaming and clang-format to Spin_System - use OrderedLock in Spin_System_Chain and applied clang-format - improved copying of Spin_System by using std::make_shared (also fixed missing mmf parameter copy in copy assignment - improved some include guards and comments 8e80d909 - Core: amend input file docs with RNG seed info. Namely that the seeds will be random if unspecified. e545385f - Sparse_HTST: Numerical improvements - Inverse_PowerMethod: Current estimated eigenvector now gets orthogonalized with all previous found eigenvectors after every iteration (this helps to solve problems where the vector would fall back onto previous eigenvectors) - also update the rayleigh quotient and refactor the LU decomposition periodically to improve evalue estimate during the iterations - small changes to log output 1dd74ae4 - Sparse_HTST: Increased accuracy of zero-mode calculation. After the minimization of the rayleigh coefficient, a few iterations of the shift invert power method are performed to increase the accuracy of the computed eigenvalues. This is necessary to for an accurate calculation in the case zero-modes are present. a010ea0f - Cuda: Write cuFFT errors to the Log 7219381b - Added support for amortizing iterations by performing a small number of iterations without checks in between. In a CUDA build this can help to minimize memory transfers. be9bceac - Manifoldmath: Added a new function Geodesic_Tangent that computes the tangents more accurately. Use it to compute the tangents at the endpoints 21eba6fc - Sparse_HTST: Use sparse lanczos for computation of unstable mode and zero modes aca472f7 - Manifoldmath: more performant implementation of project_parallel 2df3ae72 - Vectormath: Implemented new function jacobian and added a unit test for it 41d582c8 - Method_LLG: Use Vectormath::jacobian instead of Vectormath::directional_gradient for STT db34029c - CMake: Updated cmake_minimum_required to VERSION 3.12 20b438de - Add .clangd and .clang-tidy config files d2a78d16 - Update catch to v2.13.