The phonon contribution module

Longitudinal and off-diagonal phonon contribution

class cij.core.phonon_contribution.nonshear.ElasticModulus

Bases: object

class cij.core.phonon_contribution.nonshear.LongitudinalElasticModulusPhononContribution(calculator, e)

Bases: ElasticModulus

Represents the phonon part of the longitudinal thermal elastic modulus \(c^\text{ph}_{ii}(T, V)\)

\[c^\text{ph}_{ii}(T, V) = c^\text{zpm}_{ii}(V) + c^\text{th}_{ii}(T, V)\]
Parameters
  • calculator (cij.core.calculator.Calculator) –

  • e (Tuple[ndarray, ndarray]) – the “strain” corresponding to the subscript (\(e_i/\Delta\) and e_j/Delta) for calculating strain-Gruneisen parameter \(\gamma^{ii}_{qm}\) from mode-Gruneisen parameter \(\gamma_{qm}\).

property Q

Value of expression \(Q_{qm}(T, V)\)

\[Q_{qm}(T, V) = \frac{\hbar\omega_{qm}(V)}{k_\text{B}T}\]
property Q1

Value of expression

\[\frac{Q_{qm}(T, V)}{\exp Q_{qm}(T, V) - 1}\]

where \(Q_{qm}(T, V) = \frac{\hbar\omega_{qm}(V)}{k_\text{B}T}\)

property Q2

Value of expression

\[\frac{Q_{qm}^2(T, V) \exp Q_{qm}(T, V) }{(\exp Q_{qm}(T, V) - 1) ^ 2}\]

where \(Q_{qm}(T, V) = \frac{\hbar\omega_{qm}(V)}{k_\text{B}T}\)

average_over_modes(amount)
property freq_array: ndarray
property isothermal_to_adiabatic

The difference between isothermal \(c^\text{T}_{ij}\) and adiabatic \(c^\text{S}_{ij}\) thermal elastic modulus

\[c^\text{S}_{ij} - c^\text{T}_{ij} = \frac{T}{V C_{V}} \frac{\partial S}{\partial e_{i i}} \frac{\partial S}{\partial e_{j j}}\]
property mode_gamma

Values related to the strain-Grüneisen parameter

property prefactors
property q_weights: ndarray

The \(q\)-points multiplicities or weights \(w_{q}\)

property t_array: ndarray
property thermal_contribution

The thermal contribution \(c^\text{th}\) to the vibrational part of the longitudinal elastic modulus (\(c_{iiii}\)).

\[\]
property v_array: ndarray
property value_adiabatic

The adiabatic elastic modulus \(c^\text{S}_{ij}(T, V)\) as a function of temperature and volume, valid only for longitudinal and off-diagonal elastic modulus (\(i,j=1,2,3\))

\[c^\text{S}_{ij} = \frac{T}{V C_{V}} \frac{\partial S}{\partial e_{i i}} \frac{\partial S}{\partial e_{j j}} + c^\text{T}_{ij}\]
property value_isothermal

The phonon part of the elastic constant \(c^\text{ph}_{ij}\) as a function of temeprature and volume

\[c^\text{ph}_{ij}(T, V) = c^\text{zpm}_{ij}(V) + c^\text{th}_{ij}(T, V)\]
property zero_point_contribution

The zero-point motion contribution to the vibrational part of the longitudinal elastic modulus (\(c_{iiii}\), \(i = 1-3\)).

\[c^{\text{zpm}}_{iiii} = \frac{\hbar}{2V}\sum_{qm} \left(\frac{\partial^2\omega_{qm} (V)}{\partial e_{ii} ^ 2}\right) = \frac{\hbar}{2V}\sum_{qm} \left(\gamma^{ii}_{qm}\gamma^{ii}_{qm} - \frac{\partial \gamma^{ii}_{qm}}{\partial e_{ii}} + \gamma^{ii}_{qm}\right) \omega_{qm}\]
class cij.core.phonon_contribution.nonshear.OffDiagonalElasticModulusPhononContribution(calculator, e)

Bases: LongitudinalElasticModulusPhononContribution

property mode_gamma

Values related to the strain-Grüneisen parameter

property prefactors
property thermal_contribution

The thermal contribution to the vibrational part of the longitudinal elastic modulus (\(c^\text{th}_{iijj}\), \(i,j = 1-3\), \(i \neq j\)).

\[c^{\text{th}}_{iijj} = \frac{k_{\mathrm{B}} T}{V} \sum_{q m} \frac{\partial^{2}\left[\ln \left(1-e^{-Q_{q m}}\right)\right]}{\partial e_{i i} \partial e_{j j}} = \]
property value_isothermal

The phonon part of the elastic constant \(c^\text{ph}_{ij}\) as a function of temeprature and volume

\[c^\text{ph}_{ij}(T, V) = c^\text{zpm}_{ij}(V) + c^\text{th}_{ij}(T, V)\]
property zero_point_contribution

The zero-point motion contribution to the vibrational part of the longitudinal elastic modulus (\(c^\text{zpm}_{iijj}\), \(i,j = 1-3\), \(i \neq j\)).

\[c^{\text{zpm}}_{iijj} = \frac{\hbar}{2V}\sum_{qm} \left(\frac{\partial^2\omega_{qm} (V)}{\partial e_{ii} \partial e_{jj}}\right) = \frac{\hbar}{2V}\sum_{qm} \left(\gamma^{ii}_{qm}\gamma^{jj}_{qm} - \frac{\partial \gamma^{ii}_{qm}}{\partial e_{jj}}\right) \omega_{qm}\]
cij.core.phonon_contribution.nonshear.average_over_modes(amount, q_weights)

Calculate sum of physical quantity over \(3N\) phonon modes and \(N_q\) \(q\)-points (\(\sum_{qm}\)) except for accoustic modes at Gamma point (first \(q\)-point and first three modes).

Parameters
  • amount (ndarray) – \(X_{qm}\)

  • q_weights (ndarray) – \(q\)-point multiplicities \(w_q\)

Return type

ndarray

Returns

Sum \(\bar X = \sum_{qm} X_{qm} w_q\)

cij.core.phonon_contribution.nonshear.clear_gamma_point(mat)

Shear phonon contribution

class cij.core.phonon_contribution.shear.ShearElasticModulusPhononContribution(strain, key, calculator=None)

Bases: object

property fictitious_strain

The fictitious strain

property fictitious_strain_energy: ndarray

The strain energy for the fictitious strain under the original coordinate system except for the unknown

property fictitious_strain_energy_rotated: ndarray

The strain energy for the fictitious strain under the rotated coordinate system

property fictitious_strain_rotated

The fictitious strain in the rotated coordinate system

get_elastic_modulus(key)
Return type

ndarray

get_elastic_modulus_rotated(key)
Return type

ndarray

get_modulus_keys()
get_modulus_keys_rotated()
get_target_elastic_modulus()

The elastic modulus need to be calculated from the difference in fictitious strain energy of the rotated coordinate system and the known terms in the original coordinate.

Return type

ndarray

property strain_rotated
property transformation_matrix

The transformation matrix

property value_adiabatic
property value_isothermal
cij.core.phonon_contribution.shear.calculate_fictitious_strain_energy(fictitious_strain, resolve_elastic_modulus, target=None)

Calculate the strain energy for under given coordinate system, ignore the unknown.

Parameters
  • fictitious_strain (ndarray) – the fictitious strain where strain energy is calculated

  • resolve_elastic_modulus (callable) – the function used to get elastic modulus

  • target (Optional[ModulusRepresentation]) – the key for the elastic modulus

Return type

ndarray

cij.core.phonon_contribution.shear.get_fictitious_strain_energy_keys(fictitious_strain, target=None)
Return type

ndarray