示例#1
0
def test_measures():
    f1 = filters.GaussianFilter(radius=5)
    fh = FieldHandler(Ndim=3, Lbox=15, dimensions=16, Pk=(k, Pk), filter=f1)
    dx = fh.Lbox / fh.dimensions
    sfield = fh.get_smoothed(f1)

    # Test density measurement
    c = C.DensityConstrain([8, 8, 8], filter=f1, value=1, field_handler=fh)
    val = c.measure()
    tgt = sfield[8, 8, 8]
    assert_allclose(val, tgt)

    # Test gradient measurement
    c = C.GradientConstrain([8, 8, 8],
                            filter=f1,
                            value=[0, 0, 0],
                            field_handler=fh)
    val = c.measure()
    tgt = np.array(np.gradient(sfield, dx))[:, 8, 8, 8]
    assert_allclose(val, tgt)

    # Test hessian measurement
    c = C.HessianConstrain([8, 8, 8],
                           filter=f1,
                           value=[0] * 6,
                           field_handler=fh)
    val = c.measure()
    tgt = np.array(np.gradient(np.gradient(sfield, dx), dx,
                               axis=(-3, -2, -1)))[:, :, 8, 8, 8]
    assert_allclose(val, tgt)
示例#2
0
def test_field_sigma():
    fh = FieldHandler(Ndim=3, Lbox=100, dimensions=128, Pk=(k, Pk))

    smoothing_scales = np.geomspace(5, 10, 20)
    sigma_th = [fh.sigma(0, filters.TopHatFilter(R)) for R in smoothing_scales]
    sigma_exp = [
        fh.get_smoothed(filters.TopHatFilter(R)).std() for R in smoothing_scales
    ]

    # Check the field variance
    assert_allclose(sigma_th, sigma_exp, rtol=5e-2)
示例#3
0
def test_filtering():
    N = 64
    v0 = 10
    fh = FieldHandler(Ndim=3, Lbox=N, dimensions=N, Pk=(k, Pk))
    fh.white_noise[:] = 0
    fh.white_noise[N // 2, N // 2, N // 2] = v0
    fh.white_noise_fft = np.fft.rfftn(fh.white_noise)

    R = 10
    field = fh.get_smoothed(R)
    x, y, z = (
        np.array(np.meshgrid(*[np.linspace(0, N - 1, N)] * 3, indexing="ij")) - N // 2
    )
    ref = (
        1
        / (2 * np.pi * R ** 2) ** (3 / 2)
        * np.exp(-(x ** 2 + y ** 2 + z ** 2) / 2 / R ** 2)
        * v0
    )

    assert_allclose(field, ref, atol=1e-5)