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)
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)
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)
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)
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)
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)