HeisenbergExchange¶

class HeisenbergExchange(configuration, kpoints=None, atom_indices=None)

Class for calculating the inter-site Heisenberg exchange coupling matrix for a BulkConfiguration.

Parameters: configuration (BulkConfiguration) – The BulkConfiguration for which to calculate the inter-site coupling matrix. kpoints (All | list of ints.) – The k-points with which to calculate the heisenberg exchange constants. Default: MonkhorstPackGrid(1, 1, 1) atom_indices – The atom indices for which to calculate the heisenberg exchange constants. Default: All i.e. all atoms in the configuration.
atomIndices()
Returns: The atom indices. list of int.
atomSpins()
Returns: The atomic spin polarizations. list of floats.
couplingMatrix(atom_i_index, atom_j_index)

Returns the unscaled coupling matrix elements between atom_i_index and atom_j_index. This corresponds to the matrix elements from the model H_ij = J_ij * e_i * e_j, where e_i and e_j are unit vectors.

Parameters: atom_i_index (int.) – The index of atom i in the central cell. atom_j_index (int.) – The index of atom j in the central and repeated cells. The coupling matrix elements. PhysicalQuantity of type energy
fullCouplingMatrix()
Returns: The Heisenberg exchange coupling matrix with shape (n_atoms, n_atoms), where n_atoms is the number of atoms in the configuration. PhysicalQuantity of type energy.
kpoints()
Returns: The k-points with which to calculate the Heisenberg exchange constants. class:~.MonkhorstPackGrid | RegularKpointGrid
metatext()
Returns: The metatext of the object or None if no metatext is present. str | unicode | None
nlprint(stream=None)

Print a string containing an ASCII table useful for plotting the AnalysisSpin object.

Parameters: stream (python stream) – The stream the table should be written to. Default: NLPrintLogger()
realSpaceDistance(atom_i_index, atom_j_index)

Returns the real space distance between atom_i_index and atom_j_index.

Parameters: atom_i_index (int.) – The index of atom i in the central cell. atom_j_index (int.) – The index of atom j in the central and repeated cells. The real space distance between the atoms. PhysicalQuantity of type length.
scaledCouplingMatrix(atom_i_index, atom_j_index)

Returns the coupling matrix elements between atom_i_index and atom_j_index scaled with the atomic spin polarizations. This corresponds to the matrix elements from the model H_ij = J_ij * S_i * S_j.

Parameters: atom_i_index (int.) – The index of atom i in the central cell. atom_j_index (int.) – The index of atom j in the central and repeated cells. The coupling matrix elements. PhysicalQuantity of type energy
setMetatext(metatext)

Set a given metatext string on the object.

Parameters: metatext (str | unicode | None) – The metatext string that should be set. A value of “None” can be given to remove the current metatext.

Usage Examples¶

Calculate Heisenberg exchange spin coupling constants of a stretched H2 moleculefrom:

# Define elements
elements = [Hydrogen, Hydrogen]

# Define coordinates
cartesian_coordinates = [[ 0. ,  0. ,  0. ],
[ 0. ,  0. ,  3.0]]*Angstrom

# Set up configuration
molecule_configuration = MoleculeConfiguration(
elements=elements,
cartesian_coordinates=cartesian_coordinates
)

numerical_accuracy_parameters = NumericalAccuracyParameters(
density_mesh_cutoff=50.0*Hartree,
)

calculator = LCAOCalculator(
exchange_correlation = SGGA.PBE,
basis_set=BasisGGASG15.Hydrogen_Medium,
)

# Set anti-ferromagnetic spins.
scaled_spins = [
-1.0,
1.0,
]

initial_spin = InitialSpin(scaled_spins=scaled_spins)
molecule_configuration.setCalculator(
calculator,
initial_spin=initial_spin,)

heisenberg_exchange = HeisenbergExchange(
configuration=molecule_configuration,
)

nlsave('H2-heisenberg-exchange.hdf5', heisenberg_exchange)


heisenberg_exchange.py

Notes¶

The Heisenberg exchange Hamiltonian described magnetic exchange coupling as given by

$H = -\sum_{i,j}J_{ij}\hat{S}_i\hat{S}_j$

where $$\hat{S}_i$$ is the local spin vector on atom $$i$$ and $$J_{ij}$$ is the Heisenberg exchange coupling constant. Following [LKAG87], [HOY04] we calculate the coupling constants for the Hamiltonian

$H^{unit} = -\sum_{i,j}J_{ij}^{unit}\mathbf{e}_i\mathbf{e}_j$

where the spin operators are substituted by unit vectors $$\mathbf{e}_i$$ pointing in the direction of the i’th site magnetization.

Both the coupling constants $$J_{ij}^{unit}$$ and $$J_{ij}$$ are available in a HeisenbergExchange object and are simply relates as

$J_{ij} = \frac{J_{ij}^{unit}}{S_i\cdot S_j}$

where $$S_i$$ is calculated from the MullikenPopulation on each atom as $$S_i = (M_i^{up} - M_i^{down})/2$$ where $$M_i^{up}$$ is the Mulliken population for up-electrons on atom $$i$$.

The coupling constants $$J_{ij}^{unit}$$ are obtained as:

coupling_matrix = heisenberg_exchange.couplingMatrix(atom_i_index=0, atom_j_index=1)


and the coupling constants $$J_{ij}$$ are obtained as:

scaled_coupling_matrix = heisenberg_exchange.scaledCouplingMatrix(atom_i_index=0, atom_j_index=1)


 [HOY04] Myung Joon Han, Taisuke Ozaki, and Jaejun Yu. Electronic structure, magnetic interactions, and the role of ligands in $\mathrm mn_n(n=4,12)$ single-molecule magnets. Phys. Rev. B, 70:184421, 2004. URL: https://link.aps.org/doi/10.1103/PhysRevB.70.184421, doi:10.1103/PhysRevB.70.184421.
 [LKAG87] A.I. Liechtenstein, M.I. Katsnelson, V.P. Antropov, and V.A. Gubanov. Local spin density functional approach to the theory of exchange interactions in ferromagnetic metals and alloys. Journal of Magnetism and Magnetic Materials, 67(1):65 – 74, 1987. URL: http://www.sciencedirect.com/science/article/pii/0304885387907219, doi:https://doi.org/10.1016/0304-8853(87)90721-9.