calculateLinearResponseSpinTransferTorkance

calculateLinearResponseSpinTransferTorkance(configuration, energy=None, kpoints=None, self_energy_calculator=None, energy_zero_parameter=None, infinitesimal=None)

Calculate the atom-resolved spin transfer torkance in the linear response approximation.

Parameters:
  • configuration (DeviceConfiguration) – The configuration to calculate the spin torque transfer torkance. The configuration must have a calculator with non-collinear spin.

  • energy (PhysicalQuantity of type energy) – The energy for which the spin transfer torque should be calculated.
    Default: 0.0 * eV

  • kpoints (sequence (size 3) of int | MonkhorstPackGrid | KpointDensity) – The k-points for which the spin transfer torque should be calculated.
    Default: The Monkhorst-Pack grid used for the self-consistent calculation.

  • self_energy_calculator (DirectSelfEnergy | RecursionSelfEnergy | SparseRecursionSelfEnergy | KrylovSelfEnergy) – The self energy calculator to use.
    Default: RecursionSelfEnergy(storage_strategy=NoStorage())

  • energy_zero_parameter (AverageFermiLevel | AbsoluteEnergy) – Specifies the choice for the energy zero.
    Default: AverageFermiLevel

  • infinitesimal (PhysicalQuantity of type energy) – Small energy, used to move the spin transfer torque calculation away from the real axis. This is only relevant for recursion-style self-energy calculators.
    Default: 1.0e-6 * eV

Returns:

A tuple with the total torkance, the torkance per k-point, the k-points and weights used for the integration.

Return type:

A tuple (torkance, torkance_per_kpoint, kpoints, weights) where torkance is a (3, natoms)numpy.array, torkance_per_kpoint is a (3, natoms, nk) numpy.array.

Usage Examples

A usage example is shown together with a finite bias calculation in calculateNonSelfConsistentFiniteBiasSpinTransferTorque documentation.

Notes

The linear response spin transfer torkance is evaluated as [1]:

\[\mathbf{\tau}_{a} = \sum_{\alpha \in a} \sum_{\beta} \Re [\frac{\partial \rho_{CD, \alpha \beta}}{\partial V_{b}} \mathbf{\sigma} \times \mathbf{B}_{XC, \alpha \beta}]\]

where \(\rho_{CD} = \rho_{neq} - \rho_{eq}\) is the current driven density matrix [2]. Assuming a left-right symmetric junction resulting in a small bias drop \(\pm V_{b}/2\), and slowly varying spectral density around the Fermi energy \(E_F\), we use:

\[\frac{\partial \rho_{CD, \alpha \beta}}{\partial V_{b}} = \frac{1}{4\pi} \mathbf{G}_0(E_{F}) [\mathbf{\Gamma}_R(E_{F}) - \mathbf{\Gamma}_L(E_{F})] \mathbf{G}_0^{\dagger}(E_{F})\]

This is similar, but not identical, to the implementation in the analysis object SpinTransferTorque. Moreover this method returns the atom-resolved torkance, while SpinTransferTorque evaluates the torkance in real space.