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
An object returned from a self-consistent calculation for either a MoleculeConfiguration or a BulkConfiguration.
Default:
None
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.
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.
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.
The quantum number has different forms depending on the type of calculation:
Molecule, unpolarized: The quantum number
corresponds to the the energy level
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
, where
is an integer or a list of such representing the energy levels and
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.