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. Return type: list of int.
-
atomSpins
()¶ Returns: The atomic spin polarizations. Return type: 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.
Returns: The coupling matrix elements.
Return type: PhysicalQuantity of type energy
- atom_i_index (int.) – The index of atom
-
fullCouplingMatrix
()¶ Returns: The Heisenberg exchange coupling matrix with shape (n_atoms, n_atoms), where n_atoms is the number of atoms in the configuration. Return type: PhysicalQuantity of type energy.
-
kpoints
()¶ Returns: The k-points with which to calculate the Heisenberg exchange constants. Return type: class:~.MonkhorstPackGrid | RegularKpointGrid
-
metatext
()¶ Returns: The metatext of the object or None if no metatext is present. Return type: 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.
Returns: The real space distance between the atoms.
Return type: PhysicalQuantity of type length.
- atom_i_index (int.) – The index of atom
-
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.
Returns: The coupling matrix elements.
Return type: PhysicalQuantity of type energy
- atom_i_index (int.) – The index of atom
-
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.
- configuration (
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)
Notes¶
The Heisenberg exchange Hamiltonian described magnetic exchange coupling as given by
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
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
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. |