Magnetic Hamiltonian - bertdupe/Matjes GitHub Wiki
This page includes all the interactions which can be used when evaluating the magnetic Hamiltonian:
- Heisenberg exchange
- Dzyaloshinskii–Moriya interaction
- General Exchange tensor
- Magnetic anisotropy
- Dipolar interaction
- Zeeman energy
- Biquadratic-exchange
- 4-spin interaction
- Magneto-electric coupling
- Magneto-temperature coupling
Most interactions are inserted though a keyword, which is followed by a set of lines which include the different entries for that particular interaction. No empty lines or comment lines shall appear between the lines which would be treated as signature of the end of entries, however comments at the end of each line are possible. Each interaction keyword shall only appear once.
Heisenberg exchange
The Heisenberg exchange can be switched on through the keyword magnetic_J
. This interaction the atom types of the connected atoms, the distance between them, and the real value.
For example,
magnetic_J
1 1 1 1.0d-3
1 2 2 0.1d-3
magnetic_J_fft F
defines a Heisenberg exchange of magnitude 1.0meV between all atoms of atom-type 1 which have the minimal (1), distance between themselves and an interaction between the second neighbors of atom-types 1 and 2 with magnitude 0.1meV.
The keyword magnetic_J_fft
(default false) allows to describe the exchange interaction in Fourier space which saved computational time if the dipolar magnetic interaction is also calculated in Fourier space.
Dzyaloshinskii–Moriya interaction
The Dzyaloshinskii–Moriya interaction (DMI) is controlled by the magnetic_D
keyword. Compared to the Heisenberg exchange it requires an additional atom type input which defines the non-magnetic "source" atom-type. With respect to the center position between the two magnetic atoms the first occurrence of the non-magnetic atom-type is searched which then defines the orientation of the DMI-vectors. Those orientations are provided in the printed output.
For example,
magnetic_D
1 1 2 1 1.0d-3
defines a DMI interaction between the nearest-neighbors of atom-type 1 with magnitude 1meV and with an orientation defined by the nearest set of atom-type 2 atoms.
The keyword magnetic_D_fft
(default false) allows to describe the DMI in Fourier space which saved computational time if the dipolar magnetic interaction is also calculated in Fourier space.
General Exchange tensor
The Exchange and the Dzyaloshinskii–Moriya interaction (DMI) can also be given as a single matrix controlled by the magnetic_r2_tensor
keyword. Compared to the Heisenberg exchange and DMI it requires an additional information about the direction where the tensor should apply. In that case, there is no need of a "source" of DMI; the general tensor is a purely mathematical form. The direction is given as 3 reals after the tensor written in line. All tensors for each bounds are printed in the output for the user to check.
For example,
magnetic_r2_tensor
1 1 1 -6.1367d-3 0.1433d-3 -0.0333d-3 0.1433d-3 -5.9900d-3 -0.0578d-3 -0.0333d-3 -0.0578d-3 -6.2289d-3 -3.3222369641 -1.9465726106 0.0000003973
defines an exchange tensor between atom type 1 and 1 for shell 1 first nearest neighbor. The exchange tensor is then given by
-6.1367d-3 0.1433d-3 -0.0333d-3
0.1433d-3 -5.9900d-3 -0.0578d-3
-0.0333d-3 -0.0578d-3 -6.2289d-3
This exchange tensor should be applied along the bound
-3.3222369641 -1.9465726106 0.0000003973
if there are no neighbors along the direction of reference, the exchange tensor will be rotated along the bounds' neighbor.
The keyword magnetic_tensor_fft
(default false) allows to describe the general exchange tensor in Fourier space which saved computational time if the dipolar magnetic interaction is also calculated in Fourier space.
Magnetic anisotropy
The magnetic anisotropy is defined as following:
magnetic_anisotropy
1 0.0 0.0 1.0 0.4d0
where the first integer defines the atom-type on which the anisotropy acts. The following 3 reals determine the unit direction of the anisotropy axis (the vector is automatically normalized). The last real is the magnitude in eV also containing the sign.
For backwards compatibility it is also possible to use only 3 reals, then the magnitude is determined as norm of the 3-vector with the sign of the first non-zero entry.
Alternatively, the anisotropy can be in units of the real-space lattice parameters:
magnetic_anisotropy_lat
1 0.0 0.0 2.0 0.4d0
where the first 3 reals now define the direction in units of the real-space lattice parameters and the 4. real gives the magnitude in eV.
Both examples yield the same anisotropy if the third real-space unit-cell vector is along z-direction.
The keyword magnetic_anisotropy_fft
(default false) allows to describe the anisotropy in Fourier space which saved computational time if the dipolar magnetic interaction is also calculated in Fourier space.
Dipolar interaction
The dipolar interaction can be calculated using either the conventional Hamiltonian setup or the more efficient discrete fourier-transformation implementation which requires FFTW3 (CPP_FFTW3). It is highly advised to use the fft implementation which will be much faster even for medium-sized computational grids. In case of periodic boundary conditions the number of considered periodic cells has to be specified through mag_dip_period_cut
, in case of open boundaries the respective value is ignored.
The inputs are:
mag_dip_use T
mag_dip_fft T
mag_dip_period_cut 30 30 1
, where mag_dip_use
signifies that the DDI interaction is calculated. The FFTW implementation is used when mag_dip_fft
is True (default), otherwise the slower/dense implementation in the normal space is used.
mag_dip_fft F
naturally results in very dense Hamiltonians, which should only be used for testing purposes in small systems, where, due to the dense nature, is advantageous to use the dense Hamiltonian implementation CPP_DENSE.
Zeeman energy
The Zeeman energy will automatically be taken into account if the external magnetic field H_ext
is non-zero. Alternatively, it can be manually switched on through the logical keyword enable_H T
which might be necessary in case of time-dependent external magnetic field changes.
4-spin interaction
The 4-spin interaction can be considered in case of a lattice where the nearest patches of 4 atom sites of a given atom-type have equal edge sizes (ie. square and hexagonal lattices). It is switched on through:
M_4spin
1 1.0d-3
where, the first integer defines the atom-type and the second term defines the magnitude.
Biquadratic-exchange
The input of the biquadratic exchange is equivalent to the Heisenberg exchange with for example:
M_biq
1 1 1 0.2d-3
, which creates an interaction of the first neighbors of atom-type 1 of magnitude 0.2meV.
Magneto-electric coupling
Both the symmetric and the anti-symmetric terms of the magneto-electric coupling are defined similar as the Heisenberg exchange. In case of the antisymmetric term a choice of a non-magnetic "source" is not necessary since the direction of the interaction is given by the external electric field direction.
The inputs are:
ME_sym
1 1 1 2.0-3
ME_antisym
1 1 1 1.0d-3
Notice than an external electric field has to be defined which can either be set through extE
or enable_E T
. Since both terms are implemented as rank3 tensor, it is possible to change the electric field throughout the simulation.
Magneto-temperature coupling
A temperature coupling term is implemented in analogy to the magnetic exchange interaction. The temperature is considered on the second of the interacting sites, the reverse neighbor symmetrizes the interaction.
The input is analogous to the Heisenberg exchange input:
MT_J
1 1 1 0.2
Notice than a temperature field has to be defined which can either be set through Tini
or enable_T T
. Since the term is implemented as rank4 tensor, it is possible to change the temperature throughout the simulation.