def calculate_fourier_trasform_cartesian(
symbols: Vector, coords: Vector, dictCGFs: Dict, mo_i: Vector,
kpoints: Vector, chikdic=None) -> Vector:
"""
Calculate the Fourier transform projecting the MO in a set of plane waves
mo_fourier(k) = < phi(r) | exp(i k . r)>
"""
if (chikdic is None):
chikdic = get_fourier_basis(symbols, dictCGFs, kpoints)
result = np.zeros(len(kpoints), dtype=np.complex128)
acc = 0
for symbol, xyz in zip(symbols, coords):
krs = -2j * pi * np.dot(kpoints, xyz)
eikrs = np.exp(krs)
cfgks = chikdic[symbol]
dim_cgfs = len(cfgks)
coefs = mo_i[acc: acc + dim_cgfs]
prod = coefs[:, None] * cfgks * eikrs[None, :]
result += np.sum(prod, axis=0)
acc += dim_cgfs
return result
评论列表
文章目录