Ejemplo n.º 1
0
def test_readout():
    engine = ParticleMeshEngine(pm)
    code = CodeSegment(engine)
    s = pm.BoxSize / pm.Nmesh * 0.001 + 0.99 * engine.q / pm.Nmesh  # sample all positions.

    field = pm.generate_whitenoise(seed=1234, mode='real')

    code.get_x(s='s', x='x')
    code.decompose(x='x', layout='layout')
    code.readout(x='x', mesh='density', layout='layout', value='value')

    check_grad(code,
               'value',
               'density',
               init={
                   'density': field,
                   's': s
               },
               eps=1e-4,
               rtol=1e-8)

    check_grad(code,
               'value',
               's',
               init={
                   'density': field,
                   's': s
               },
               eps=1e-4,
               rtol=1e-8)
Ejemplo n.º 2
0
def test_solve_fastpm_linear_growth():
    pm = ParticleMesh(BoxSize=1024.0, Nmesh=(128, 128, 128), dtype='f8')

    engine = FastPMEngine(pm)

    code = CodeSegment(engine)
    code.create_linear_field(whitenoise='whitenoise',
                             powerspectrum=pk,
                             dlinear_k='dlinear_k')
    code.solve_fastpm(pt=pt,
                      dlinear_k='dlinear_k',
                      asteps=[0.1, 0.5, 1.0],
                      s='s',
                      v='v',
                      s1='s1',
                      s2='s2')
    code.get_x(s='s', x='x')
    code.paint_simple(x='x', density='density')
    field = pm.generate_whitenoise(seed=1234, unitary=True).c2r()

    density, dlinear_k, s = code.compute(['density', 'dlinear_k', 's'],
                                         init={'whitenoise': field})
    density_k = density.r2c()
    p_lin = FFTPower(FieldMesh(dlinear_k), mode='1d')
    p_nonlin = FFTPower(FieldMesh(density), mode='1d')

    # the simulation shall do a linear growth
    t1 = abs((p_nonlin.power['power'] / p_lin.power['power'])**0.5)
    assert_allclose(t1[1:4], 1.0, rtol=5e-2)
Ejemplo n.º 3
0
def test_paint():
    engine = ParticleMeshEngine(pm)
    code = CodeSegment(engine)
    s = pm.BoxSize / pm.Nmesh * 0.001 + 0.99 * engine.q / pm.Nmesh # sample all positions.

    code.get_x(s='s', x='x')
    code.decompose(x='x', layout='layout')
    code.paint(x='x', mesh='density', layout='layout')

    check_grad(code, 'density', 's', init={'s': s}, eps=1e-4, rtol=1e-8)
Ejemplo n.º 4
0
def test_paintdirect():
    engine = ParticleMeshEngine(pm)
    code = CodeSegment(engine)
    s = pm.BoxSize / pm.Nmesh * 0.001 + 0.99 * engine.q / pm.Nmesh # sample all positions.
    m = numpy.ones(len(engine.q)) * 3

    code.get_x(s='s', x='x')
    code.decompose(x='x', layout='layout')
    code.paintdirect(x='x', mesh='density', layout='layout', mass='m')

    check_grad(code, 'density', 's', init={'s': s, 'm' : m}, eps=1e-4, rtol=1e-8, atol=1e-11)
    check_grad(code, 'density', 'm', init={'s': s, 'm' : m}, eps=1e-4, rtol=1e-8, atol=1e-11)
Ejemplo n.º 5
0
def test_readout():
    engine = ParticleMeshEngine(pm)
    code = CodeSegment(engine)
    s = pm.BoxSize / pm.Nmesh * 0.001 + 0.99 * engine.q / pm.Nmesh # sample all positions.

    field = pm.generate_whitenoise(seed=1234, type='real')

    code.get_x(s='s', x='x')
    code.decompose(x='x', layout='layout')
    code.readout(x='x', mesh='density', layout='layout', value='value')

    check_grad(code, 'value', 'density', init={'density' : field, 's': s}, eps=1e-4, rtol=1e-8)

    check_grad(code, 'value', 's', init={'density' : field, 's': s}, eps=1e-4, rtol=1e-8)
Ejemplo n.º 6
0
def test_solve_fastpm():
    pm = ParticleMesh(BoxSize=8.0, Nmesh=(4, 4, 4), dtype='f8')

    engine = FastPMEngine(pm, shift=0.5, B=1)

    code = CodeSegment(engine)
    code.create_linear_field(whitenoise='whitenoise',
                             powerspectrum=pk,
                             dlinear_k='dlinear_k')
    code.solve_fastpm(pt=pt,
                      dlinear_k='dlinear_k',
                      asteps=[0.1, 1.0],
                      s='s',
                      v='v',
                      s1='s1',
                      s2='s2')
    #    code.solve_fastpm(pt=pt, dlinear_k='dlinear_k', asteps=[1.0], s='s', v='v', s1='s1', s2='s2')
    code.get_x(s='s', x='x')
    code.paint_simple(x='x', density='density')
    field = pm.generate_whitenoise(seed=1234, unitary=True).c2r()

    eps = field.cnorm()**0.5 * 1e-5

    check_grad(code,
               's1',
               'whitenoise',
               init={'whitenoise': field},
               eps=eps,
               rtol=1e-8)

    check_grad(code,
               's',
               'whitenoise',
               init={'whitenoise': field},
               eps=eps,
               rtol=1e-8)
    check_grad(code,
               'v',
               'whitenoise',
               init={'whitenoise': field},
               eps=eps,
               rtol=1e-8)
    check_grad(code,
               'density',
               'whitenoise',
               init={'whitenoise': field},
               eps=eps,
               rtol=1e-8)