Example #1
0
def __hyperplane_eval_iso_2p5D(I, x, r, k0, k1, w0, arr):
    ''' k[i0,i1,i2] = k0[i1]*w0[i0] + k1[i2]*w1[i0] '''
    i0, i1, i2 = cuda.grid(3)
    tmp = 0
    K0 = k0[i1] * w0[i0, 0]
    K1 = k0[i1] * w0[i0, 1]
    K2 = k1[i2]
    for ii in range(x.shape[0]):
        norm = (K0 * K0 + K1 * K1 + K2 * K2) / (r[ii, 0] * r[ii, 0])
        if norm < 30:
            IP = x[ii, 0] * K0 + x[ii, 1] * K1 + x[ii, 2] * K2
            tmp += I[ii] * c_exp(-.5 * norm) * c_exp(complex(0, -IP))
    arr[i0, i1, i2] = tmp
Example #2
0
def __grid_eval_iso(I, x, r, k0, k1, k2, arr):
    '''
    I*exp(-|rk|^2/2)*exp(-(x\cdot k)i)
    '''
    i0, i1, i2 = cuda.grid(3)
    tmp = 0
    for ii in range(x.shape[0]):
        norm = (k0[i0] * k0[i0] + k1[i1] * k1[i1] +
                k2[i2] * k2[i2]) / (r[ii, 0] * r[ii, 0])
        if norm < 30:
            IP = x[ii, 0] * k0[i0] + x[ii, 1] * k1[i1] + x[ii, 2] * k2[i2]
            tmp += I[ii] * c_exp(-.5 * norm) * c_exp(complex(0, -IP))
    arr[i0, i1, i2] = tmp
Example #3
0
def __grid_eval_aniso(I, x, r, k0, k1, k2, arr):
    '''
    I*exp(-|rk|^2/2)*exp(-(x\cdot k)i)
    '''
    i0, i1, i2 = cuda.grid(3)
    tmp = 0
    for ii in range(x.shape[0]):
        rk0 = r[ii, 0] * k0[i0]
        rk1 = r[ii, 3] * k0[i0] + r[ii, 1] * k1[i1]
        rk2 = r[ii, 5] * k0[i0] + r[ii, 4] * k1[i1] + r[ii, 2] * k2[i2]
        norm = rk0 * rk0 + rk1 * rk1 + rk2 * rk2
        if norm < 30:
            IP = x[ii, 0] * k0[i0] + x[ii, 1] * k1[i1] + x[ii, 2] * k2[i2]
            tmp += I[ii] * c_exp(-.5 * norm) * c_exp(complex(0, -IP))
    arr[i0, i1, i2] = tmp
Example #4
0
def __hyperplane_eval_aniso_2p5D(I, x, r, k0, k1, w0, arr):
    ''' k[i0,i1,i2] = k0[i1]*w0[i0] + k1[i2]*w1[i0] '''
    i0, i1, i2 = cuda.grid(3)
    tmp = 0
    K0 = k0[i1] * w0[i0, 0]
    K1 = k0[i1] * w0[i0, 1]
    K2 = k1[i2]
    for ii in range(x.shape[0]):
        rk0 = r[ii, 0] * K0
        rk1 = r[ii, 3] * K0 + r[ii, 1] * K1
        rk2 = r[ii, 5] * K0 + r[ii, 4] * K1 + r[ii, 2] * K2
        norm = rk0 * rk0 + rk1 * rk1 + rk2 * rk2
        if norm < 30:
            IP = x[ii, 0] * K0 + x[ii, 1] * K1 + x[ii, 2] * K2
            tmp += I[ii] * c_exp(-.5 * norm) * c_exp(complex(0, -IP))
    arr[i0, i1, i2] = tmp
Example #5
0
def q4():
    "For question 4 of the assignment."
    domain = np.linspace(-.5, .5, 128)
    f1 = lambda x: (1-0.9*c_exp(-24j*pi*x)-0.5*c_exp(-2j*pi*x)+\
                   0.045*c_exp(-26j*pi*x))
    f2 = lambda x: (1 - 0.5 * c_exp(-2j * pi * x))
    f3 = lambda x: (1 - 0.9 * c_exp(-4j * pi * x))
    g1 = lambda y: 1 / (np.absolute(f1(y))**2)
    g2 = lambda y: 1 / (np.absolute(f2(y))**2)
    g3 = lambda y: 1 / (np.absolute(f3(y))**2)
    pts1 = [g1(i) for i in domain]
    pts2 = [g2(i) for i in domain]
    pts3 = [g3(i) for i in domain]
    plt.plot(domain, pts1)
    plt.title("Spectral Density Q4PB")
    plt.show()
    plt.plot(domain, pts2)
    plt.title("Spectral Density Q4PC, Part 1")
    plt.show()
    plt.plot(domain, pts3)
    plt.title("Spectral Density Q4PC, Part 2")
    plt.show()
Example #6
0
def q6():
    "For question 6 of the assignment."
    domain = np.linspace(-.5, .5, 128)
    f1 = lambda x: (1 - 0.99 * c_exp(-6j * pi * x))
    g1 = lambda y: 1 / (np.absolute(f1(y))**2)
    pts1 = [g1(i) for i in domain]
    plt.plot(domain, pts1)
    plt.title("Spectral Density Q6PA")
    plt.show()
    helper_func = lambda x: (2 * (sin(2 * pi * x) * (1 / tan(pi * x))) - 1) / 3
    trans_func = lambda y: helper_func(y)**2
    f2 = lambda x: g1(x) * trans_func(x)
    pts2 = [f2(i) for i in domain]
    plt.plot(domain, pts2)
    plt.title("Spectral Density Q6PD")
    plt.show()

    df = pd.DataFrame(pts1)
    new_data = pd.rolling_mean(df, window=3)
    plt.plot(domain, new_data)
    plt.show()
Example #7
0
def __derivs_iso_aux(I, x, r, K, g, dg, ddg):
    '''
    No mixed terms so we have:

    g = I*exp(-|k/r|^2/2)*exp(-(x\cdot k)i)
      = I*G

    dg/dI = G
    dg/dx_j = -ik_jg
    dg/dr = +(k/r^2)(k/r)g
            = |k/r|^2g/r

    ddg/dII = 0
    ddg/dxx = -kk g
    ddg/drr = |k|^2g(|k|^2/r^6 - 3/r^4)
            = (|k/r|^2-3)|k/r|^2g/r^2

    ddg/dIx_j = -ik_jG 
    ddg/dIr = |k/r|^2G/r 
    ddg/dxr = -ik (dg/dr) 
    '''

    rk = cuda.local.array((3, ), f4)

    rk[0] = K[0] / r
    rk[1] = K[1] / r
    rk[2] = K[2] / r

    N = rk[0] * rk[0] + rk[1] * rk[1] + rk[2] * rk[2]
    if N > 60:
        g[0] = 0
        for i in range(10):
            dg[i] = 0
            for j in range(10):
                ddg[i, j] = 0
        return

    G = c_exp(complex(-.5 * N, -(x[0] * K[0] + x[1] * K[1] + x[2] * K[2])))

    g[0] = I * G

    # d/dI
    dg[0] = G

    # d^2/dI^2
    ddg[0, 0] = 0

    # d^2/dx^2
    for i in range(3):
        for j in range(i, 3):
            ddg[1 + i, 1 + j] = -K[i] * K[j] * g[0]

    # d^2/dr^2
    ddg[4, 4] = (N - 3) * N * g[0] / (r * r)

    # d^2/dIdx
    for i in range(3):
        ddg[0, 1 + i] = complex(0, -K[i]) * G

    # d/dx
    for i in range(3):
        dg[1 + i] = I * ddg[0, 1 + i]

    # d^2/dIdr
    ddg[0, 4] = N * G / r

    # d/dr
    dg[4] = ddg[0, 4] * I

    # d^2/dxdr
    for i in range(3):
        ddg[1 + i, 4] = complex(0, -K[i]) * dg[4]

    # Symetrise
    for i in range(5):
        for j in range(i):
            ddg[i, j] = ddg[j, i]
Example #8
0
def __derivs_aniso_aux(I, x, r, K, g, dg, ddg):
    '''
    No mixed terms so we have:

    g = I*exp(-|rk|^2/2)*exp(-(x\cdot k)i)
      = I*G

    dg/dI = G
    dg/dx_j = -ik_jg
    dg/dr_{j0,j1} = -rkg (drk/dr_{j0,j1})
            = -(rk)_{j0}k_{j1}g

    ddg/dII = 0
    ddg/dxx = -kk g
    ddg/dr_{j0,j1}r_{j2,j3} = (rk)_{j0}(rk)_{j2}k_{j1}k_{j3} g - k_{j1}k_{j3}g \delta_{j0==j2}

    ddg/dIx_j = -ik_jG 
    ddg/dIr_j = -(rk)_{j0}k_{j1}G 
    ddg/dxr = -ik (dg/dr) 
    '''

    rk = cuda.local.array((3, ), f4)
    ind0 = cuda.local.array((6, ), i4)
    ind1 = cuda.local.array((6, ), i4)

    ind0[0], ind0[1], ind0[2] = 0, 1, 2
    ind0[3], ind0[4], ind0[5] = 1, 2, 2
    ind1[0], ind1[1], ind1[2] = 0, 1, 2
    ind1[3], ind1[4], ind1[5] = 0, 1, 0

    rk[0] = r[0] * K[0]
    rk[1] = r[3] * K[0] + r[1] * K[1]
    rk[2] = r[5] * K[0] + r[4] * K[1] + r[2] * K[2]

    N = -.5 * (rk[0] * rk[0] + rk[1] * rk[1] + rk[2] * rk[2])
    if N < -30:
        g[0] = 0
        for i in range(10):
            dg[i] = 0
            for j in range(10):
                ddg[i, j] = 0
        return

    G = c_exp(complex(N, -(x[0] * K[0] + x[1] * K[1] + x[2] * K[2])))

    g[0] = I * G

    # d/dI
    dg[0] = G

    # d^2/dI^2
    ddg[0, 0] = 0

    # d^2/dx^2
    for i in range(3):
        for j in range(i, 3):
            ddg[1 + i, 1 + j] = -K[i] * K[j] * g[0]

    # d^2/dr^2
    for i in range(6):
        i0, i1 = ind0[i], ind1[i]
        ddg[4 + i,
            4 + i] = g[0] * (rk[i0] * K[i1] * rk[i0] * K[i1] - K[i1] * K[i1])
        for j in range(i + 1, 6):
            j0, j1 = ind0[j], ind1[j]
            if i0 == j0:
                ddg[4 + i, 4 + j] = g[0] * (rk[i0] * K[i1] * rk[j0] * K[j1] -
                                            K[i1] * K[j1])
            else:
                ddg[4 + i, 4 + j] = g[0] * rk[i0] * K[i1] * rk[j0] * K[j1]

    # d^2/dIdx
    for i in range(3):
        ddg[0, 1 + i] = complex(0, -K[i]) * G

    # d/dx
    for i in range(3):
        dg[1 + i] = I * ddg[0, 1 + i]

    # d^2/dIdr
    for i in range(6):
        i0, i1 = ind0[i], ind1[i]
        ddg[0, 4 + i] = -rk[i0] * K[i1] * G

    # d/dr
    for i in range(6):
        dg[4 + i] = ddg[0, 4 + i] * I

    # d^2/dxdr
    for i in range(3):
        for j in range(6):
            ddg[1 + i, 4 + j] = complex(0, -K[i]) * dg[4 + j]

    # Symetrise
    for i in range(10):
        for j in range(i):
            ddg[i, j] = ddg[j, i]