OrbitalMoment¶
- class OrbitalMoment(configuration, kpoints=None, temperature=None)¶
Class for calculating the orbital moment for a BulkConfiguration or a MoleculeConfiguration.
- Parameters:
configuration (
BulkConfiguration
) – The BulkConfiguration for which to calculate the inter-site coupling matrix.kpoints (sequence (size 3) of int |
MonkhorstPackGrid
|KpointDensity
|RegularKpointGrid
) – The k-points with which to calculate the orbital moment. Default: The k-point sampling used on the calculator.temperature (PhysicalQuantity of type temperature) – The temperature for the thermal smearing of the Fermi distribution. Default:
300 * Kelvin
- atomResolvedOrbitalMoment()¶
- Returns:
The orbital magnetic moment for each atom.
- Return type:
PhysicalQuantity of Bohr magneton
- 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 | 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()
- orbitalMoment()¶
- Returns:
The total orbital magnetic moment.
- Return type:
PhysicalQuantity of Bohr magneton
- setMetatext(metatext)¶
Set a given metatext string on the object.
- Parameters:
metatext (str | None) – The metatext string that should be set. A value of “None” can be given to remove the current metatext.
- temperature()¶
- Returns:
The temperature for the thermal smearing of the Fermi distribution.
- Return type:
PhysicalQuantity of type temperature
- uniqueString()¶
Return a unique string representing the state of the object.
Usage Examples¶
Calculate the OrbitalMoment for iron.
# Set minimal log verbosity
setVerbosity(MinimalLog)
# %% bulk_iron
# Set up lattice
lattice = BodyCenteredCubic(2.8665*Angstrom)
# Define elements
elements = [Iron]
# Define coordinates
fractional_coordinates = [[ 0., 0., 0.]]
# Set up configuration
bulk_iron = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates
)
# %% InitialSpin
scaled_spins = [
1.0,
]
initial_spin = InitialSpin(
scaled_spins=scaled_spins
)
nlsave('orbital_moment_results.hdf5', initial_spin)
# %% Set LCAOCalculator
# %% LCAOCalculator
#----------------------------------------
# Exchange-Correlation
#----------------------------------------
exchange_correlation = SGGA.PBE
k_point_sampling = KpointDensity(
density_a=7.0*Angstrom,
density_b=7.0*Angstrom,
density_c=7.0*Angstrom
)
numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=k_point_sampling
)
checkpoint_handler = NoCheckpointHandler
calculator = LCAOCalculator(
exchange_correlation=exchange_correlation,
numerical_accuracy_parameters=numerical_accuracy_parameters,
checkpoint_handler=checkpoint_handler
)
# %% Set Calculator
bulk_iron.setCalculator(
calculator=calculator,
initial_spin=initial_spin
)
bulk_iron.update()
nlsave('orbital_moment_results.hdf5', bulk_iron)
# %% Set LCAOCalculator
# %% LCAOCalculator
#----------------------------------------
# Exchange-Correlation
#----------------------------------------
exchange_correlation = SOGGA.PBE
k_point_sampling = KpointDensity(
density_a=7.0*Angstrom,
density_b=7.0*Angstrom,
density_c=7.0*Angstrom
)
numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=k_point_sampling
)
checkpoint_handler = NoCheckpointHandler
calculator_1 = LCAOCalculator(
exchange_correlation=exchange_correlation,
numerical_accuracy_parameters=numerical_accuracy_parameters,
checkpoint_handler=checkpoint_handler
)
# %% Set Calculator
bulk_iron.setCalculator(
calculator=calculator_1,
initial_spin=initial_spin,
initial_state=bulk_iron
)
bulk_iron.update()
nlsave('orbital_moment_results.hdf5', bulk_iron)
# %% OrbitalMoment
kpoints = MonkhorstPackGrid(
na=22,
nb=22,
nc=22
)
orbital_moment = OrbitalMoment(
configuration=bulk_iron,
kpoints=kpoints
)
nlsave('orbital_moment_results.hdf5', orbital_moment)
Notes¶
The orbital moment is calculated following [1] as
where \(\alpha\) denotes band index, \(\mathbf{k}\) is a k-point with corresponding weight \(w_\mathbf{k}\) and \(f_{\alpha, \mathbf{k}}\) is the occupation factor. The second sum runs over basis function orbitals and \(c_{\lambda}^{\alpha}(\mathbf{k})\) it the eigenvector component for basis orbital \(\lambda\) and band index \(\alpha\) calculated at the k-point \(\mathbf{k}\). The angular momentum operator is \(\mathbf{L}\) and \(\mathbf{S}(\mathbf{k})\) is the basis orbital overlap matrix.