calculateBlochStates

calculateBlochStates(configuration, quantum_numbers=None, quantum_number_reference=None, spin=None, k_point=None, diagonalization_method=None, density_mesh_cutoff=None)

A method for calculating the real space wave function of multiple Bloch states.

Parameters:
  • configuration (BulkConfiguration) – The configuration for which the eigenstate should be calculated.

  • quantum_numbers (list of int) – A list of quantum numbers of the desired eigenstate.
    Default: [0]

  • quantum_number_reference (Absolute | Lumo) – Whether the quantum numbers are referred to the lowest available energy state (Absolute), or to the lowest unoccupied state (Lumo).
    Default: Absolute

  • spin (Spin.Up | Spin.Down | Spin.All) – The spin to calculate the states for.
    Default: Spin.All

  • k_point (list(3) of floats) – The k-point in fractional coordinates that the Bloch state should be calculated for.
    Default: [0.0, 0.0, 0.0]

  • diagonalization_method

    Method used for diagonalizing the hamiltonian.

    This parameter allows to choose between a full diagonalization solver and an iterative subspace solver. The full diagonalization solver evaluates all bands from the lowest energy one to a given number of bands above fermi level. The iterative subspace solver allows to evaluate a given number of bands around fermi level, or around an energy of choice.

    The full diagonalization solver is more robust, but can be proibitively expensive for very large systems.

    The iterative solver can deal with very large systems (tens of thousands atoms and beyond) and greatly outperforms when calculating a small number of eigenvalues, but it is also inherently less robust.

    Note: the exact method used when selecting FullDiagonalizationSolver is defined by the calculator (see AlgorithmParameters). IterativeDiagonalizationSolver is not supported for PlaneWaveCalculator


    Default: FullDiagonalizationSolver

  • density_mesh_cutoff (PhysicalQuantity of type energy | GridSampling | OptimizedFFTGridSampling) – The mesh cutoff to be used to determine the grid sampling. The mesh cutoff must be a positive energy or a GridSampling object.
    Default: Specific for each calculator.

Type:

FullDiagonalizationSolver | IterativeDiagonalizationSolver

Returns:

The Bloch states.

Return type:

A generator of instances of BlochState

Usage Examples

Create a calculateBlochStates generator for a set of given quantum_numbers and save the results.

# %% BlochStatesGenerator

bloch_states_generator = calculateBlochStates(
    configuration=silicon_alpha,
    quantum_numbers=(0, 2, 3)
)

for bloch_state in bloch_states_generator:
    quantum_number = bloch_state.quantumNumber()
    nlsave('results.hdf5', bloch_state, object_id=f'bloch_state_{quantum_number}')

bloch_states_silicon.py

Notes

This method enables to create a generator for multiple BlochState objects according to a set of quantum_numbers. These quantum_numbers are all specified relative to a quantum_number_reference which can either be the lowest unoccupied energy state, Lumo, or the lowest available energy state, Absolute. As demonstrated in the Usage Example, the individual BlochState objects are generated and calculated once looped over and afterwards saved. calculateBlochStates() is also applicable via the GUI using the analysis BlochStateGenerator.