The defenition of the lattice is slightly different from what you may
be used to in other programs. Spinner
does not know of the
space groups, so instead of providing the space group and atom
positions in the asymmetric cell you have to provide the positions of
all magnetic atoms in the unit cell.
To simplify the input file, the lattice defenition as well as the defenition of the hamiltonian can be delegated to a dedicated file which by convention carries the extension '.lattice'. This file can be referred to from the input file with the command
lattice = kagome.lattice
All commands under the headers 'Lattice Topology defenitions' and 'Hamiltonian Defenitions' in the –help output of spinner can be used in this file. These commands are overruled by the same commands in the input file, which in turn can be overruled by the same commands on the command line.
The Bravais lattice is defined with the 'lattice-params' command, for example
lattice-params = 1,1,1,90,90,90
for a cubic lattice.
To add atoms to this Bravais lattice you add an 'add-atoms' entry for each atom, containing a label for the site, the coordinates measured relative to the cell axes a,b,c the spin magnitude, the g factor and the occupancy f.
For example, to create an fcc lattice you should add
add-atom = Cu1,0,0,0,1,2,1 add-atom = Cu2,0.5,0.5,0,1,2,1 add-atom = Cu2,0.5,0,0.5,1,2,1 add-atom = Cu2,0,0.5,0.5,1,2,1
It is advisable to assign atoms (ions) which are inequivalent by symmetry different labels, even when they are the same species. In addition, only when the lattice contains spins of different magnitude it is usefull to use a spin magnitude different from 1, and this feature should be considered as not implemented for now.
The g-factor is important when the Hamitonian contains dipole-dipole interactions only, and is not included in the calculation of the magnetisations etc. The reason for this is that in the case a calculation is carried out with a magnetic anisotropy the g-factor is a tensor. Hence, in comparing the magnetisations and susceptibilities along different axes care must be taken to include the correct g-factors for each orientation manually after the calculation, if you really want to go into that much detail.
The dimensionality of the lattice is defined by the combination of 'La','Lb','Lc' and the command 'periodic-axes'. With 'La','Lb','Lc' you specify how many unit cells should be used along each axis, and with the command 'periodic-axes' you specify whether periodic boundary conditiona should be used along these axes.
For example, you can create a ring of 10 spins, where the first spin is connected to the last one, in the following way:
lattice-params = 1,1,0,90,90,90 add-atom = Cu,0,0,0,1,2,1 La = 10 Lb = 1 Lc = 1 periodic-axes = a
While a 'sphere' is created with:
lattice-params = 1,1,0,90,90,90 add-atom = Cu,0,0,0,1,2,1 La = 10 Lb = 10 Lc = 1 periodic-axes = a b
The dimensionality 'd' is the number of axes along which periodic boundary contions apply. In the case of the ring d=1 and in the case of the sphere d=2. It is also possible to make a two dimensional slab, which is a 3 dimensional object, which is 'infinite' in two dimensions.
lattice-params = 1,1,0,90,90,90 add-atom = Cu,0,0,0,1,2,1 La = 10 Lb = 10 Lc = 2 periodic-axes = a b
Note that periodic boundary conditions are used to avoid the effects of dangling bonds at the edges of a material, or boundary effects. It is not a way to simulate a perfectly infinite sized system. The only way to get an idea of what the system would do in the thermodynamic limit is by carrying out a finite-size scaling analysis; Measure the transition temperature and critical exponents for systems of different sizes (always applying periodic boundary conditions as appropriate for the problem) and then extrapole the trends to infinity.
In the case of infinite range interactions this gives rise to some conceptual problems. The Ewald sum and the reaction-field method provide approximate answers to this problem. In the Ewald sum the contribution of from the simulation cell and all its periodic images ad infinitum is calculated, and in the reaction field method the contribution from moments outside a specified interaction radius are taken into account in an averaged way.
When using the dipole-dipole hamiltonian with reaction-field it is important to take the radius over which is summed much smaller than the size of the system.
Once the lattice and its dimensions have been defined spinner
can work out which bonds are nearest neighbour, which next nearest
neighbour and so on. You assign a magnetic exchange coupling J to each
of these bonds, for now up to third nearest neighbour, though this can
easily be extended. There is also a method to add bonds explicitly,
using the command 'add-bond'. This method will be explained at the end
of this section.
The data structure in which the lattice of magnetic dipoles is stored
is a Graph as provided by the Boost graph library. The magnetic
dipoles prepresent the vertices or nodes of the graph, while a
magnetic interaction between a pair of dipoles (nodes) is represented
as an edge (or bond). By default spinner
creates a graph in
which each magnetic dipole is connected with every other dipole. The
resulting graph is in most cases too large (complex) and the
simulation will run very slow. With the 'cut-off' variable an upper
limit for the interaction distance can be set. This should be done in
almost all cases.
For example, if you want to simulate a square lattice with nearest neighbour and next nearest neighbour interactions only, you should use
cut-off = 1.5 #IMPORTANT: always set correct cut-off distance. J1 = 1 J2 = 0.4 J3 = 0.01 #this one falls out of the cut-off distance and has no effect
Assuming the nearest neighbour distance is 1 unit, the next nearest neighbour distance is sqrt(2) = 1.414, and the next next nearest neighbour distance, which would correspond to J3, is 2 units. By setting 'cut-off = 1.5' the setting for J3 has no effect. If you do want to include a J3 interaction you should still set 'cut-off = 2.1' because even though J's for larger interactions are zero by default, they are included in the graph and therefore in the calculation of the energy of each spin. The result will be correct but unnessecary slow.
The reason these bonds are made by default even though their J's may all be zero, is that you may choose to include dipoled-dipole interactions in the hamiltonian, which are independent of the J's. More on this in the next section.
For a new lattice you may find it difficult to estimate to what value
the cut-off distance should be set. In that case you can first do a
test run without entering any temperatures to simulate. From the
output of Spinner
you can then tell to what value you should
set the cut-off distance.
This way of adding bonds expliticitly, by naming the atoms (ions) which need to be linked by their label and respective distance overrides the previous method. The two methods cannot be used alongside eachother. Note that the cut-off should still be chosen larger than the longest bond length or the bond will not be made.
cut-off = 1.5 add-bond = 1.0 1.0 Cu1 Cu1 add-bond = 0.5 0.70710 Cu1 Cu2
Here we see the need of giving symmetry inequivalent atoms different labels. If the above lines are used in combination with the fcc lattice defined earlier:
lattice-params = 1 1 0 90 90 90 periodic-axes = a b c add-atom = Cu1 0,0,0 1,2,1 add-atom = Cu2 0.5,0.5,0 1,2,1 add-atom = Cu2 0.5,0,0.5 1,2,1 add-atom = Cu2 0,0.5,0.5 1,2,1
then there will be no bonds directly between Cu2 and Cu2 on different unit cells, even though these also have a bond length of 1.0 .