calculateVelocity¶
- calculateVelocity(configuration, kpoint=None, spin=None, band_indices=None)¶
Calculates the Bloch-state velocity \(\frac{1}{\hbar} \frac{dE}{dk}\) using first order perturbation theory.
- Parameters:
configuration (
BulkConfiguration
) – The configuration for which to calculate the velocity.kpoint (tuple of floats) – The kpoint as three floats representing fractional reciprocal space coordinates. Default: The Gamma point
(0.0, 0.0, 0.0)
spin (
Spin.Up
|Spin.Down
|Spin.All
) – The spin component for which to perform the calculation. Default:Spin.All
band_indices (list of non-negative int) – Indices of the bands for which to calculate the velocity. Default: All bands (
range(number_of_bands)
)
- Returns:
The velocities for each band.
- Return type:
numpy.array
Usage Examples¶
Evaluate the valence band velocity for graphene at the Dirac point:
# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
# Set up configuration
bulk_configuration = BulkConfiguration(
bravais_lattice=Hexagonal(2.4612*Angstrom, 6.709*Angstrom),
elements=[Carbon, Carbon],
fractional_coordinates=[[ 0.333333333333, 0.166666666667, 0.5 ],
[ 0.666666666667, 0.833333333333, 0.5 ]],
)
# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
calculator = LCAOCalculator()
bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()
# Fractional k-point, slighly displaced away from the Dirac point.
k = [1./3+0.001, 1./3+0.001, 0 ]
# Calculate the velocity of the band with band-index 3 (valence band)
velocity = calculateVelocity(bulk_configuration, kpoint=k, spin=Spin.Up, band_indices=[3])
# Take the velocity component along the X cartesian direction.
velocity = velocity[0][0][0]
# Print the result.
print('Fermi velocity of graphene:')
print('v = %.2e m/s' %abs(velocity.inUnitsOf(Meter/Second)))
Running the script you will get a Fermi velocity of \(v_F=8.4\cdot 10^{5}\) m/s, which is close to literature values, genereally reported to be \(\approx 10^6\) m/s.
Notes¶
The band velocity, usually defined as \(v_n(\mathbf{k}) = \nabla_\mathbf{k}E_n(\mathbf{k})\) is evaluated using first-order perturbation theory. The velocity in Cartesian direction \(\alpha\) of band \(n\) at wavevector \(\mathbf{k}\) is:
\[v_n^\alpha(\mathbf{k}) = \langle \psi_n(\mathbf{k})| \partial_{k_\alpha} H(\mathbf{k}) - \epsilon_n(\mathbf{k}) \partial_{k_\alpha} S(\mathbf{k})| \psi_n(\mathbf{k}) \rangle,\]where \(|\psi_n(\mathbf{k}\rangle\) is the Bloch eigenstate in band \(n\) with energy \(\epsilon_n(\mathbf{k})\). \(\partial_{k_\alpha} H(\mathbf{k})\) and \(\partial_{k_\alpha} S(\mathbf{k})\) are the derivative of the Fourier transformed Hamiltonian and overlap matrices with respect to Cartesian component \(k_\alpha\).