**Updated to C++14**
* [`63261d9c`](http://github.com/spirit-code/spirit/commit/63261d9c61bb3cae6c88421955c908f38f103343) - Updated C++ standard from C++11 to C++14.
Added features
===================================
* [`35e6ea48`](http://github.com/spirit-code/spirit/commit/35e6ea482401fb84cacbdb6910fbb4f7403d800f) - Added a 4th order anisotropy
Desktop GUI changes
===================================
**Added new immediate mode GUI using Dear ImGui**
![grafik](https://user-images.githubusercontent.com/20167491/225982658-43da211d-6b94-4564-a040-fd5eef162088.png)
Also,
* [`fc7735fe`](http://github.com/spirit-code/spirit/commit/fc7735fe6b2a9697531990f801cee61b8e638b78) - Ui-QT: Re-enabled Hopfion configuration and added new normal option.
* [`5b7f1954`](http://github.com/spirit-code/spirit/commit/5b7f195452ea9e571323fdec63191c9148a3238d) - 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`](http://github.com/spirit-code/spirit/commit/5dee3d9dec787bf994567aac58bdfe2a2b8bf008) - Ui-QT: added moving endpoints to parameters widget
Interface changes
===================================
* [`1a5bb7ff`](http://github.com/spirit-code/spirit/commit/1a5bb7ffb2517c80fc7506b166080c8a418f83b5) - 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`](http://github.com/spirit-code/spirit/commit/b5351e570688cc5662156d249c965f3f147a9e20) - 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`](http://github.com/spirit-code/spirit/commit/d92ceb35f1c668f097ec674e04efdbdbc65d3cc8) - 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`](http://github.com/spirit-code/spirit/commit/2dab6cfc95913929592695684c0261b28b47c9c7) - python_api: corrected hamiltonian.get_field and added it to unit tests
* [`ee7baf10`](http://github.com/spirit-code/spirit/commit/ee7baf10425dee49f26066931d59871afd7d5b4c) - Hamiltonian_API: Added a function that writes the embedding space Hessian to a file
* [`f87ec6ba`](http://github.com/spirit-code/spirit/commit/f87ec6badb9cbd63b5ac4a4604657e6182ccb1e6) - EMA: Can now control `sparse` parameter via API. Also added function to clear the modes.
* [`57486d7f`](http://github.com/spirit-code/spirit/commit/57486d7f2b8e9271695ac28481423d4eac5deb38) - API: Implemented an easy way to get basic information about a simulation run via the API.
* [`facb5601`](http://github.com/spirit-code/spirit/commit/facb560183f365ed76aa6ef9eee0a0ddc92c9f10) - Configurations: Added 'normal' parameter to Configuration_Hopfion.
* [`91de3514`](http://github.com/spirit-code/spirit/commit/91de35141cf6f22dea8c8c6f0aacd8d4ed9f655c) - Quantities: Implemented a new function Quantity_Get_Toplogical_Charge_Density
* [`7ec8ee46`](http://github.com/spirit-code/spirit/commit/7ec8ee469dec0069c9d557ff95c4e16023840ab3) - API: implemented force and energy history in Simulation_Run_Info
* [`c95766c4`](http://github.com/spirit-code/spirit/commit/c95766c4e0f34a2b3c66eac77c4e7cda29a95042) - C-API: Changed `NULL` to `nullptr` in `Simulation.h`
* [`a30dc841`](http://github.com/spirit-code/spirit/commit/a30dc84170699461086ef10565e6301b99daf8a8) - GNEB: Added get and set functions for moving endpoints to API
* [`c7e84313`](http://github.com/spirit-code/spirit/commit/c7e84313c24a13655f29677bb056ea011fa07fc7) - GNEB: equilibrium delta_Rx for moving endpoints can now be controlled via the API
* [`cfe8fd86`](http://github.com/spirit-code/spirit/commit/cfe8fd861fade14518ac6168d3abe569491c58b0) - GNEB: API getter for equilibrium_delta_Rx
* [`d6bd46a0`](http://github.com/spirit-code/spirit/commit/d6bd46a0ebc625509ee85f3072902abf9d8df9f2) - API for cubic anisotropy
* [`08ea0fc6`](http://github.com/spirit-code/spirit/commit/08ea0fc67319ba878ce9b45f68fef426a69be34b) - API: Implemented getters and setters for llg_beta
Bugfixes
===================================
* [`59db68d7`](http://github.com/spirit-code/spirit/commit/59db68d72330d81b33b61440444a8b950080b73d) - CUDA fix
* [`5b7f5479`](http://github.com/spirit-code/spirit/commit/5b7f54790926b6252c06213b969edc172eae2796) - 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`](http://github.com/spirit-code/spirit/commit/19a962fc0d69bd31e97939dcca839cd4970b7d9f) - GH-actions and CMake: fix ImGui builds. Also deactivated ImGui build for coverage builds etc.
* [`f45715e2`](http://github.com/spirit-code/spirit/commit/f45715e2005d7385901d50d47591cf2a748daedd) - Core: fix bug in `Data::Geometry::triangulation` and `tetrahedra`.
* [`fba2fb51`](http://github.com/spirit-code/spirit/commit/fba2fb515af9ddc3de083bc1fbf422abedd5e4bc) - 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`](http://github.com/spirit-code/spirit/commit/2189dce26c41df147cadeba4d5aba1efc326b0e7) - Core: fix config parsing of RNG seeds.
* [`5c5c403f`](http://github.com/spirit-code/spirit/commit/5c5c403ffecc7b1e4e035c156dc13c123f29bfd7) - CMake: fix collision of options.
* [`3be348e6`](http://github.com/spirit-code/spirit/commit/3be348e62d713cb22bade0dc8db9ff88fc96ecc4) - 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`](http://github.com/spirit-code/spirit/commit/11fe93816eb108aa83966c1495f092b2df93c4a5) - 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`](http://github.com/spirit-code/spirit/commit/5b59ebec52a1824716674448c771063591aa15a2) - Bugfix: check boundary conditions on quadruplets. This commit fixes only the CPU implementation.
* [`382cac3c`](http://github.com/spirit-code/spirit/commit/382cac3c7e9176db707512afbdbaa1e189b9384b) - 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`](http://github.com/spirit-code/spirit/commit/e8991403777829f3162a9f77360fcc09961b6b8d) - Fix potential bug due to initialization order fiasco.
* [`9b998cb6`](http://github.com/spirit-code/spirit/commit/9b998cb628e0bbb33b030bf8849974965a909786) - Fixed an issue when reading in eigenmodes from the GUI
* [`06d5bc64`](http://github.com/spirit-code/spirit/commit/06d5bc6499af83e7298588ceb1326534ad6484c8) - Quantities: Get_Magnetization now respects mu_s
* [`0706699e`](http://github.com/spirit-code/spirit/commit/0706699ecfb9830993e87b337aca912c8b5625ff) - Configparser: Fixed a small error where the log of individual pinned sites would just repeat the direction of the first fixed spin.
* [`41403b4e`](http://github.com/spirit-code/spirit/commit/41403b4e1148172bb642931ba585a912774a2dce) - Hamiltonian_Heisenberg: Fixed race condition in DDI
* [`4827222d`](http://github.com/spirit-code/spirit/commit/4827222ddc761307ef76cea6a417e241a54efc37) - Method_GNEB: fixed a bug in a lambda capture
* [`a4b45178`](http://github.com/spirit-code/spirit/commit/a4b451785dd30a4299a0f2bedbccf7669ca68e93) - Timing: Fixed issues in DurationFromString
* [`32ce288a`](http://github.com/spirit-code/spirit/commit/32ce288a6d10d0c8d8a6a3e8692e4adc5124905d) - 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`](http://github.com/spirit-code/spirit/commit/e1ba4599cbb27a32420619a62cdd08361732e54c) - CI: added `sudo apt update` before two `sudo apt install` calls.
* [`474fa90f`](http://github.com/spirit-code/spirit/commit/474fa90ffd2a29cefcd9479f763c83821782dc7c) - CI and CMake: working towards deploying binary releases.
* [`8aba87dc`](http://github.com/spirit-code/spirit/commit/8aba87dc2df28bb1c3c1846a9dc4a748abd29984) - CI: restructured artifacts to add licenses to macOS package.
* [`e9cd19a9`](http://github.com/spirit-code/spirit/commit/e9cd19a9937d96e6127051140c7941c2dbe74c61) - CI: try to fix codecov upload.
* [`64fc4e34`](http://github.com/spirit-code/spirit/commit/64fc4e349525e11ead21e254949c6d8cdef52848) - CI: run also on pull requests. Note: do not deploy on pull request events.
* [`692bdd66`](http://github.com/spirit-code/spirit/commit/692bdd662ed5049ced29aee8a636f6fbd8121bb4) - CI: added build of mobile webapp and webapp artifacts.
* [`945e3d50`](http://github.com/spirit-code/spirit/commit/945e3d50e118735a76882e53474dfcc51f9c5052) - CI: add release drafting on tags.
* [`7e4f0f6e`](http://github.com/spirit-code/spirit/commit/7e4f0f6e99b214a6904ec4db7e8e022ef98a0e2d) - CI: add `lint` step for core and ui-imgui
* [`ccaa6bef`](http://github.com/spirit-code/spirit/commit/ccaa6beff068d16dfa3a4626dee4ab77726685b9) - CI: generate clang-tidy report to log
* [`0d6c7907`](http://github.com/spirit-code/spirit/commit/0d6c7907eda54cf86163e9b379f171f4c46651ff) - CMake: fix for bundling on Windows. Also minor improvement of `GlfwWindow`.
* [`7eecca95`](http://github.com/spirit-code/spirit/commit/7eecca9516c783c2e31fbe6b203be33a60cbb353) - CMake: fixed missing bin directory when bundling on Linux.
* [`c5d7d3a5`](http://github.com/spirit-code/spirit/commit/c5d7d3a593762a43a664f2ad248b075438d01819) - Added missing thirdparty licenses.
* [`c1ec74fe`](http://github.com/spirit-code/spirit/commit/c1ec74fe06357566e5b3083a22a40dc7d2a983d8) - 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`](http://github.com/spirit-code/spirit/commit/d2ebbc7451397c6d3a322af2286171a84146dd5a) - Handle_Signal: Sending interrupt signal, twice in 2s time interval, now properly exits the code. - std::chrono::duration was measured in wrong unit
* [`441529a5`](http://github.com/spirit-code/spirit/commit/441529a5a4e127dbf3d9b6eda4a9c0a2d047933e) - 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`](http://github.com/spirit-code/spirit/commit/1742cd967f4030d28986652cb872e864864b1e7f) - 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`](http://github.com/spirit-code/spirit/commit/8e80d909b62d74b1cc47101ccf80107b5894f91a) - Core: amend input file docs with RNG seed info. Namely that the seeds will be random if unspecified.
* [`e545385f`](http://github.com/spirit-code/spirit/commit/e545385f522f5e1b3fbb929dd0df146c8cb88f76) - 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`](http://github.com/spirit-code/spirit/commit/1dd74ae46074418f43ea38ebfcaa70575b55ead9) - 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`](http://github.com/spirit-code/spirit/commit/a010ea0f2a61a8afb5c65acdf01740240b872379) - Cuda: Write cuFFT errors to the Log
* [`7219381b`](http://github.com/spirit-code/spirit/commit/7219381b51897167b42ec2e017c4b425d2e74d82) - 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`](http://github.com/spirit-code/spirit/commit/be9bceac5ef909c65d866fa81fb8d27dece220b9) - Manifoldmath: Added a new function Geodesic_Tangent that computes the tangents more accurately. Use it to compute the tangents at the endpoints
* [`21eba6fc`](http://github.com/spirit-code/spirit/commit/21eba6fc82d39fe8826a71e04f45d691a9a2fbc9) - Sparse_HTST: Use sparse lanczos for computation of unstable mode and zero modes
* [`aca472f7`](http://github.com/spirit-code/spirit/commit/aca472f79a0ddd7e4ed67fdf9319c2e51ea9ee14) - Manifoldmath: more performant implementation of project_parallel
* [`2df3ae72`](http://github.com/spirit-code/spirit/commit/2df3ae7234433b7eb2b1a1e280bef718bb84caf7) - Vectormath: Implemented new function `jacobian` and added a unit test for it
* [`41d582c8`](http://github.com/spirit-code/spirit/commit/41d582c8fa3757c02127b29c494bef08058d1472) - Method_LLG: Use `Vectormath::jacobian` instead of `Vectormath::directional_gradient` for STT
* [`db34029c`](http://github.com/spirit-code/spirit/commit/db34029c7d45ab790bccbf316f98b75f7f168ae3) - CMake: Updated cmake_minimum_required to VERSION 3.12
* [`20b438de`](http://github.com/spirit-code/spirit/commit/20b438de768ac3369c9498cd1cd365bbfdfc3f18) - Add .clangd and .clang-tidy config files
* [`d2a78d16`](http://github.com/spirit-code/spirit/commit/d2a78d1605ae0087ecbca604ca05eb323e74ee72) - Update catch to v2.13.6