Example #1
0
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
Example #2
0
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]
Example #3
0
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]
Example #4
0
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