Ejemplo n.º 1
0
def EvolvePmesh(pm, pmfinal, timesteps, Q, use_cosmo, smoothing = 0, lptbool = 0, snaps = None, \
                    laplacian = fourier_lap, derivative = fourier_der, zolamode = 0):

    boxsize = pm.BoxSize[0]

    ZA = evolve.ZA(pm, Q)
    if lptbool:
        LPT = evolve.LPT2(pm, Q)

    obj1 = Bunch()
    obj1.pos = numpy.zeros_like(Q)
    obj1.vel = numpy.zeros_like(Q)
    obj1.accel = numpy.zeros_like(Q)

    ## IC ##
    cosmo = cosmology.Cosmology(use_cosmo, 100.)

    a0 = numpy.exp(timesteps[0])
    obj1.pos = Q + ZA * cosmo.Dgrow(a0)
    obj1.vel = ZA * cosmo.Dgrow(a0) * cosmo.Fomega1(a0) * cosmo.Ha(a0) * a0**2

    if lptbool:
        obj1.pos += cosmo.Dgrow(a0)**2 * LPT
        obj1.vel += cosmo.Dgrow(a0)**2 *LPT \
            *cosmo.Fomega2(a0)*cosmo.Ha(a0)* a0**2

    obj1.pos[obj1.pos < 0.0] += pm.BoxSize[0]
    obj1.pos[obj1.pos > pm.BoxSize[0]] -= pm.BoxSize[0]

    ## Loop it ##
    for i in range(len(timesteps) - 1):

        loga1 = timesteps[i]
        loga2 = timesteps[i + 1]

        weight = 3 * cosmo.M * cosmo.H0**2 / (8 * math.pi * 43.007) * (
            pm.BoxSize[0] / pm.Nmesh)**3

        accelerate(obj1.pos, pmfinal, obj1.accel, smoothing, weight, laplacian,
                   derivative)

        if i > 0:
            loga0 = timesteps[i - 1]
            kick(obj1.vel, obj1.accel, 0.5 * (loga1 + loga0), loga1, loga1,
                 zolamode)

        kick(obj1.vel, obj1.accel, loga1, 0.5 * (loga1 + loga2), loga1,
             zolamode)
        drift(obj1.pos, obj1.vel, loga1, loga2, pmfinal, zolamode)

        pmfinal.clear()
        pmfinal.paint(obj1.pos)
        output.append(pmfinal.real.copy())

    pmfinal.clear()
    ## Return evolved position ##
    pmfinal.paint(obj1.pos)

    return output
Ejemplo n.º 2
0
def za_ic(pm, pmfinal, Q, timesteps, use_cosmo, smoothing=0):

    cosmo = cosmology.Cosmology(use_cosmo, 100.)

    ZA = evolve.ZA(pm, Q)
    a0 = numpy.exp(timesteps[0])
    pos_ic = Q + ZA * cosmo.Dgrow(a0)

    pos_ic[pos_ic < 0.0] += pm.BoxSize[0]
    pos_ic[pos_ic > pm.BoxSize[0]] -= pm.BoxSize[0]

    pmfinal.clear()
    pmfinal.paint(pos_ic)
Ejemplo n.º 3
0
def EvolvePmesh(pm, pmfinal, timesteps, Q, use_cosmo, smoothing = 0, lptbool = 0, snaps = None, \
                    laplacian = fourier_lap, derivative = fourier_der, zolamode = 0):

    output = []
    boxsize = pm.BoxSize[0]

    ZA = evolve.ZA(pm, Q)
    if lptbool:
        LPT = evolve.LPT2(pm, Q)

    obj1 = Bunch()
    obj1.pos = numpy.zeros_like(Q)
    obj1.vel = numpy.zeros_like(Q)
    obj1.accel = numpy.zeros_like(Q)

    ## IC ##
    cosmo = cosmology.Cosmology(use_cosmo, 100.)

    a0 = numpy.exp(timesteps[0])
    obj1.pos = Q + ZA * cosmo.Dgrow(a0)
    obj1.vel = ZA * cosmo.Dgrow(a0) * cosmo.Fomega1(a0) * cosmo.Ha(a0) * a0**2

    if lptbool:
        obj1.pos += cosmo.Dgrow(a0)**2 * LPT
        obj1.vel += cosmo.Dgrow(a0)**2 *LPT \
            *cosmo.Fomega2(a0)*cosmo.Ha(a0)* a0**2

    obj1.pos[obj1.pos < 0.0] += pm.BoxSize[0]
    obj1.pos[obj1.pos > pm.BoxSize[0]] -= pm.BoxSize[0]

    ## Loop it ##
    for i in range(len(timesteps) - 1):

        loga1 = timesteps[i]
        loga2 = timesteps[i + 1]

        weight = 3 * cosmo.M * cosmo.H0**2 / (8 * math.pi * 43.007) * (
            pm.BoxSize[0] / pm.Nmesh)**3

        accelerate(obj1.pos, pmfinal, obj1.accel, smoothing, weight, laplacian,
                   derivative)

        if i > 0:
            loga0 = timesteps[i - 1]
            kick(obj1.vel, obj1.accel, 0.5 * (loga1 + loga0), loga1, cosmo)

        kick(obj1.vel, obj1.accel, loga1, 0.5 * (loga1 + loga2), cosmo)

        drift(obj1.pos, obj1.vel, loga1, loga2, boxsize, cosmo)

        pmfinal.clear()
        # if snaps != None:
    #     postemp = numpy.zeros_like(obj1.pos)
    #     postemp[:] = obj1.pos
    #
    #     left = snaps.searchsorted(loga1, side = "left")
    #     right = snaps.searchsorted(loga2,  side = "right")
    #
    #     if left != right:
    #         drift(postemp, obj1.vel, loga1, snaps[left], boxsize, cosmo)
    #         pmfinal.clear()
    #         pmfinal.paint(postemp)
    #         output.append(pmfinal.real.copy())
    #
    #         for foo in range(left+1, right):
    #             drift(postemp, obj1.vel, snaps[foo -1], snaps[foo], boxsize, cosmo)
    #             pmfinal.clear()
    #             pmfinal.paint(postemp)
    #             output.append(pmfinal.real.copy())
    #
    #drift(postemp, obj1.vel, snaps[right-1], loga2, pmfinal, cosmo)

    pmfinal.clear()
    ## Return evolved position ##
    pmfinal.paint(obj1.pos)

    return output