Source code for pynao.m_div_eigenenergy_numba

from __future__ import division
import numba as nb
import numpy as np

[docs]@nb.jit(nopython=True, parallel=False) def div_eigenenergy_numba(n2e, n2f, nfermi, vstart, comega, nm2v_re, nm2v_im): """ multiply the temporary matrix by (fn - fm) (frac{1.0}{w - (Em-En) -1} - frac{1.0}{w + (Em - En)}) using numba """ neigv = n2e.shape[-1] a0 = comega.real**2 - comega.imag**2 b = 2*comega.real*comega.imag for n in range(nfermi): en = n2e[n] fn = n2f[n] for m in range(neigv-vstart): em = n2e[m+vstart] fm = n2f[m+vstart] a = a0 - (em -en)**2 factor = 2*(fn - fm)*(em - en) den = a**2 + b**2 nm2v_re_nm = factor*(a*nm2v_re[n, m] + b*nm2v_im[n, m])/den nm2v_im_nm = factor*(a*nm2v_im[n, m] - b*nm2v_re[n, m])/den #nm2v = nm2v_re[n, m] + 1.0j*nm2v_im[n, m] #nm2v = nm2v * (fn-fm) * \ # ( 1.0 / (comega - (em - en)) - 1.0 / (comega + (em - en)) ) # nm2v_re[n, m] = nm2v_re_nm nm2v_im[n, m] = nm2v_im_nm for n in range(vstart+1, nfermi): nm2v_re[n, 0:n-vstart] = 0.0 nm2v_im[n, 0:n-vstart] = 0.0
[docs]@nb.jit(nopython=True) def mat_mul_numba(a, b): return a*b