Name

calculateEigenstates Calculates eigenstates (Bloch states) for molecular and bulk systems.

Synopsis

Namespace: ATK.KohnSham
list calculateEigenstates(
self_consistent_calculation,
quantum_numbers
)

Description

The function calculateEigenstates() calculates wave functions and Bloch states corresponding to the eigenstates of molecular and bulk systems. The states can be stored in a VNL file for visualization in Virtual NanoLab.

List of arguments

self_consistent_calculation

An object returned from a self-consistent calculation for either a MoleculeConfiguration or a BulkConfiguration.

Default: None

quantum_numbers

The quantum numbers which determine the eigenstates to be calculated (see below).

Default: None

If the quantum numbers correspond to several states, a list of eigenstates is returned.

Returned object methods

Each item in the list corresponds to a particular eigenstate, and has the following query methods:

  • Array toArray(): Returns the real-space representation of the cell-function (i.e. the periodic part of the eigenstate) as complex numbers in a NumPy array with dimensions (n1, n2, n3).

  • PhysicalUnit toUnit(): Returns the unit of the real-space representation of the eigenstate.

  • Tuple quantumNumber(): Returns the quantum numbers of the eigenstate. The format of the quantum depends on the type of system (see below).

  • PhysicalQuantity eigenvalue(): Returns the eigenvalue of the eigenstate.

Usage examples

Calculate the eigenstates for the two lowest spin-up energy levels of a molecule:

eigenstates = calculateEigenstates(
    self_consistent_calculation,
    quantum_numbers=([0,1], Spin.Up)
    )

vnl_file = VNLFile("myfile.vnl")
for state in eigenstates:
    print state.quantumNumbers(),state.eigenvalue()
    vnl_file.addToSample(state,"My Sample")

Here, we loop over all calculated eigenstates and print the associated quantum number.

Notes

The quantum number has different forms depending on the type of calculation:

  • Molecule, unpolarized: The quantum number corresponds to the the energy level n of the molecule and should be specified as a non-negative integer or a list of such. The energy level lowest in energy is specified as [0]. The dimensionality of the returned list corresponds to the number of energy levels specified.

  • Molecule, spin-polarized: The quantum number is a tuple specified as (n,\mathrm{spin}), where n is an integer or a list of such representing the energy levels and \mathrm{spin} is the spin state. Both Spin.Up and Spin.Down can be specified at the same time. If N is the number of energy levels and M the number of spin states specified the returned array will have the dimension N × M.

  • Bulk, unpolarized: (n,k_point), where n is the band index and k_point is a k-point (a sequence of 3 dimensionless numbers, in units of the reciprocal lattice vectors).

  • Bulk, spin-polarized: (n,k_point,spin), where n is the band index and k_point is a k-point (a sequence of 3 dimensionless numbers, in units of the reciprocal lattice vectors), and spin is the spin state.

Each of the quantum numbers can also be a sequence of the described type in case several projected eigenstates are desired. For instance, ([0,1],[0.0,0.0,0.0]) for the two lowest bands at the Γ point of a bulk system, or (0,(Spin.Up,Spin.Down)) to get both lowest spin eigenstates for a molecule. If an empty sequences is given, nothing is calculated.

As noted above, if the quantum numbers correspond to several states, a list is returned. Each item in the list corresponds to a particular eigenstate, and can be stored in a VNLFile. The list itself can not be stored. The eigenstates are ordered such that the first elements in the quantum number sequence varies slowest and the last elements fastest. It is always a good strategy to use the query method quantumNumber() to remove any uncertainty about the quantum numbers.