Closed GPMueller closed 6 years ago
Concerning the fusion of neighbours and pairs:
pairs_least_symmetry
flag could switch between mirroring (when interactions are symmetric, i.e. J_ij = J_ji). this would be inefficient when using single-threadedThe inhomogenous interactions should (at least for now) exclusively be done by creating a correspondingly-sized single basis cell.
Note: it would be advisable to retain information on whether interactions were provided in the form of neighbour shells or pairs etc.
Hamiltonian_Heisenberg
should have two constructors, one with exchange and DMI shells and one with pairs. All other interactions etc. should not be affected.heisenberg_pairs
and heisenberg_neighbours
flags can stay in place in order to discriminate between the two ways of setting up.Creating a list of pairs
Functions:
Hamiltonian_Heisenberg
Hamiltonian_Heisenberg_from_Config
, with two extra functions for pairwise interactionsNeighbours::Remove_Equivalent_Neighbours
which takes a list of Pairs and a list of shell indices and removes from both the redundant entries#ifdef
part to Dataparser
, which mirrors the Pairs if openmp or cuda versionNeighbours::
Get_Pairs_in_Shells
, Get_Pairs_in_Radius
, Get_Neighbours_in_Shells
, Get_Neighbours_in_Radius
should be reduced to two functions:
Get_Pairs_in_Radius
, which simply produces a list of pairsGet_Neighbours_in_Shells
, which produces a list of pairs and a list of corresp. shell indices (using the remove-equivalent function)Implemented on PR #395, merged with 3531992673e1bd4da1a043dea50e1f2994d79bde. TODO:
General
Maybe re-establish homogeneous and inhomogeneous hamiltonians, fusing neighbours and pairs together. The homogeneous model can assume a single set of constants for the first basis cell and translate this across the lattice, while the inhomogeneous model could e.g. generate full lists of interactions on creation, with a set of interaction pairs/neighbours for each single spin (or cell?).
This issue could also be related to the
Geometry
: When the geometry is not a regular lattice, things need to be done differently. This is currently not supported, but under development - a full neighbour list for the entire lattice could in principle be calculated in such a case, but the question is how the interaction parameters should then be set...How to deal with pinned spins and atom types consistently and efficiently? - especially if no spins are pinned and all atoms have the same type?
Interactions
What needs to be covered:
Examples:
Suggestions:
Points to consider:
Fields
What may need to be covered:
Examples:
Suggestions:
Points to consider:
Energy functions
Points to consider: