DeformationPotential

class DeformationPotential(configuration, hamiltonian_derivatives, dynamical_matrix, symmetry_label=None, kpoint_cartesian=None, kpoint_fractional=None, q_route=None, points_per_segment=None, q_path=None, electron_bands=None, phonon_modes=None, max_interaction_range=None, rotate_to_pure_spin_states=None)

Constructor for the DeformationPotential object.

Parameters:
  • configuration (BulkConfiguration) – The BulkConfiguration for which to calculate the deformation potential.
  • hamiltonian_derivatives (HamiltonianDerivatives) – The Hamiltonian derivatives for the configuration.
  • dynamical_matrix (DynamicalMatrix) – The dynamical matrix for the configuration.
  • symmetry_label (str) – The kpoint (as a symmetry point) for which to calculate the deformation potential. This option is mutually exclusive to kpoint_cartesian and kpoint_fractional.
    Default: ‘G’ (Gamma-point)
  • kpoint_cartesian (PhysicalQuantity of type inverse length) – The kpoint (in Cartesian coordinates) for which to calculate the deformation potential. This option is mutually exclusive to symmetry_label and kpoint_fractional.
    Default: [0.0, 0.0, 0.0] * Angstrom**-1 Gamma-point
  • kpoint_fractional (list(3) of floats) – The kpoint (in fractional coordinates) for which to calculate the deformation potential. This option is mutually exclusive to kpoint_cartesian and symmetry_label.
    Default: [0.0, 0.0, 0.0] Gamma-point
  • q_route (list of symmetry points, e.g. ['G', 'X', 'G']) – The route to take through the Brillouin-zone. This option is mutually exclusive to q_path.
    Default: None
  • points_per_segment (int) – The number of points per segment of the route. This option is mutually exclusive to q_path.
    Default: 20
  • q_path (list of list of floats) – List of fractional q-points. This option is mutually exclusive to q_route and points_per_segment. The shape of the list is (:, 3), e.g. [[0.0, 0.0, 0.0], [0.25, 0.0, 0.0], [0.5, 0.0, 0.0]].
    Default: None
  • electron_bands (list of ints | All) – The band indices of the Bloch states to include.
    Default: All Include all bands.
  • phonon_modes (list of ints | All) – Phonon modes to include.
    Default: All Include all phonon modes.
  • maximum_interaction_range (PhysicalQuantity of type length) – Set the maximum range of the interactions in the HamiltonianDerivatives.
    Default: None
  • rotate_to_pure_spin_states (bool) – Whether the eigenstates should be rotated to pure spin states or not.
    Default: True for Unpolarized, Polarized and Noncollinear, False for SpinOrbit
couplingMatrix()

Query method for the coupling matrix calculated in the Bloch basis.

Returns:Electron-phonon coupling matrix calculated with the ElectronPhononCoupling object. The shape of the coupling matrix is (number_of_spins, number_of_phonon_modes, number_of_kpoints, number_of_qpoints, number_of_electron_bands).
Return type:PhysicalQuantity of type energy
eigenvaluesK()

Query method for the electron Bloch state energies as a function of k.

Returns:The electron Bloch state energies as a function of k. The shape of the array is (number_of_spins, number_of_kpoints, number_of_electron_bands).
Return type:PhysicalQuantity of type energy
eigenvaluesKMinusQ()

Query method for the electron Bloch state energies as a function of k-q.

Returns:The electron Bloch state energies as a function of k-q. The shape of the array is (number_of_spins, number_of_kpoints, number_of_qpoints, number_of_electron_bands).
Return type:PhysicalQuantity of type energy
eigenvaluesKPlusQ()

Query method for the electron Bloch state energies as a function of k+q.

Returns:The electron Bloch state energies as a function of k+q. The shape of the array is (number_of_spins, number_of_kpoints, number_of_qpoints, number_of_electron_bands).
Return type:PhysicalQuantity of type energy
electronBands()

Query method for the electron bands.

Returns:The list of electronic band indices used in the calculation.
Return type:list of int
evaluate()

Query method for the electron-phonon coupling matrix.

Returns:Electron-phonon coupling matrix (unscaled) calculated with the ElectronPhononCoupling object. The shape of the coupling matrix is (n_spins, n_modes, n_kpoints, n_qpoints, n_bloch_states, n_bloch_states).
Return type:PhysicalQuantity with the unit eV / Angstrom
fitDeformationPotential(mode=None, initial_band=None, final_band=None, spin=None, first_q_index=None, last_q_index=None, coupling_matrix=None)

Method for fitting the deformation potential for a particular phonon mode.

Parameters:
  • mode (int) – Phonon mode index.
    Default: The first mode calculated
  • initial_band (int) – Quantum number (band index) of the initial Bloch state.
    Default: The first band calculated
  • final_band (int) – Quantum number (band index) of the final Bloch state.
    Default: The last band calculated
  • spin (Spin.Up | Spin.Down) – The spin flag.
    Default: Spin.Up
  • first_q_index (int) – Index of the first q-point to consider in the fit.
    Default: 0
  • last_q_index (int) – Index of the last q-point to consider in the fit.
    Default: Last index
  • coupling_matrix ('scaled' | 'unscaled') – String indicating if the scaled or unscaled coupling matrix should be plotted.
    Default: 'unscaled'
Returns:

Fitted zeroth, first-order deformation potentials, model deviation and R squared.

Return type:

PhysicalQuantity, PhysicalQuantity, PhysicalQuantity, numpy.array

kpoint()

Query method for the k-point.

Returns:The k-point the deformation potential is calculated for.
Return type:numpy.array
metatext()
Returns:The metatext of the object or None if no metatext is present.
Return type:str | unicode | 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()
phononEnergies()

Query method for the phonon energies.

Returns:The phonon energies as a function of q. The shape of the array is (number_of_degrees_of_freedom, number_of_qpoints), where number_of_degrees_of_freedom = 3*number_of_atoms.
Return type:PhysicalQuantity of type energy
phononModes()

Query method for the phonon modes.

Returns:The list of phonon mode indices used in the calculation.
Return type:list of int.
qRoute()

Query method for the q-route.

Returns:The route to taken through the Brillouin-zone in the calculation.
Return type:list of str
qpoints()

Query method for the q-points.

Returns:The list of fractional q-points used in the calculation.
Return type:list
setMetatext(metatext)

Set a given metatext string on the object.

Parameters:metatext (str | unicode | None) – The metatext string that should be set. A value of “None” can be given to remove the current metatext.
unscaledCouplingMatrix()

Query method for the unscaled electron-phonon coupling matrix.

Returns:Electron-phonon coupling matrix calculated with the ElectronPhononCoupling object. The shape of the coupling matrix is (number_of_spins, number_of_phonon_modes, number_of_kpoints, number_of_qpoints, number_of_electron_bands).
Return type:PhysicalQuantity with the unit eV / Angstrom

Usage Examples

Calculate the deformation potential in graphene for different wave-vector paths in reciprocal space, specified by symmetry points connected by linear segments or a series of fractional q-points:

# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
lattice = Hexagonal(2.4612*Angstrom, 6.709*Angstrom)

elements = [Carbon, Carbon]

fractional_coordinates = [[0.0           , 0.0           , 0.5],
                          [0.333333333333, 0.666666666667, 0.5]]

bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=(5, 5, 1),
    )

calculator = LCAOCalculator(
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

# -------------------------------------------------------------
# Hamiltonian derivatives
# -------------------------------------------------------------
hamiltonian_derivatives = HamiltonianDerivatives(
    bulk_configuration,
    repetitions=(5, 5, 1),
    )

# -------------------------------------------------------------
# Dynamical matrix
# -------------------------------------------------------------
dynamical_matrix = DynamicalMatrix(
    bulk_configuration,
    repetitions=(5, 5, 1),
    max_interaction_range=10*Angstrom,
    )

# -------------------------------------------------------------
# Deformation potential
# -------------------------------------------------------------
deformation_potential_1 = DeformationPotential(
    bulk_configuration,
    hamiltonian_derivatives,
    dynamical_matrix,
    symmetry_label='L',
    q_route=['G', 'M', 'L', 'A', 'G', 'K', 'H', 'A'],
    points_per_segment=30,
    electron_bands=[0, 1, 2],
    phonon_modes=[0, 1],
    )

nlsave('graphene.nc', deformation_potential_1)

deformation_potential_2 = DeformationPotential(
    bulk_configuration,
    hamiltonian_derivatives,
    dynamical_matrix,
    kpoint_fractional=[0.0, 0.0, 0.5],
    q_path=[[0.0, 0.0, 0.0], [0.2, 0.0, 0.0], [0.3, 0.0, 0.0], \
            [0.4, 0.0, 0.0], [0.45, 0.0, 0.0], [0.5, 0.0, 0.0]],
    electron_bands=[0, 1, 2],
    phonon_modes=[0, 1],
    )

nlsave('graphene.nc', deformation_potential_2)

deformation_potential.py