def calc_rho(Fourier, r, ZR, V, cell): rho = 0 ginv = calc_g_inv(cell) for F_comp in Fourier: Q = Num.array([F_comp[0]*2*Num.pi*ginv[0][0]**0.5,F_comp[1]*2*Num.pi*ginv[1][1]**0.5,F_comp[2]*2*Num.pi*ginv[2][2]**0.5], float) rho = rho + (F_comp[3] * Num.cos(2*Num.pi*F_comp[4] - Num.dot(r,Q))) rho = rho * ZR / V return rho
def Fourier_synthesis(Fourier, cell, ZR, xf, yf, zf, an, bn, cn, zmin): Rho = Num.ndarray((an, bn, cn), float) sampx = cell[0] * xf sampy = cell[1] * yf sampz = cell[2] * zf g_inv = calc_g_inv(cell) g_inv2 = calc_g_inv([sampx, sampy, sampz, cell[3], cell[4], cell[5]]) V = Num.linalg.det(Num.linalg.inv(g_inv2)) ** 0.5 for i in range(int(an)): x = sampx / an * float(i) for j in range(int(bn)): y = sampy / bn * float(j) for k in range(int(cn)): z = sampz / cn * float(k) + sampz / zf * zmin R = Num.array([x, y, z], float) Rho[i][j][k] = calc_rho(Fourier, R, g_inv) Rho = Rho * ZR / (V * 2 * Num.pi) return Rho, [sampx, sampy, sampz]
def Fourier_synthesis(Fourier, cell, ZR, xf, yf, zf, an, bn, cn, zmin): Rho = Num.ndarray((an, bn, cn), float) sampx = cell[0] * xf sampy = cell[1] * yf sampz = cell[2] * zf g_inv = calc_g_inv(cell) g_inv2 = calc_g_inv([sampx, sampy, sampz, cell[3], cell[4], cell[5]]) V = Num.linalg.det(Num.linalg.inv(g_inv2))**0.5 for i in range(int(an)): x = sampx / an * float(i) for j in range(int(bn)): y = sampy / bn * float(j) for k in range(int(cn)): z = sampz / cn * float(k) + sampz / zf * zmin R = Num.array([x, y, z], float) Rho[i][j][k] = calc_rho(Fourier, R, g_inv) Rho = Rho * ZR / (V * 2 * Num.pi) return Rho, [sampx, sampy, sampz]
def calc_rho(Fourier, r, ZR, V, cell): rho = 0 ginv = calc_g_inv(cell) for F_comp in Fourier: Q = Num.array([ F_comp[0] * 2 * Num.pi * ginv[0][0]**0.5, F_comp[1] * 2 * Num.pi * ginv[1][1]**0.5, F_comp[2] * 2 * Num.pi * ginv[2][2]**0.5 ], float) rho = rho + (F_comp[3] * Num.cos(2 * Num.pi * F_comp[4] - Num.dot(r, Q))) rho = rho * ZR / V return rho