示例#1
0
def test_particles2mesh(init_pyDive):
    shape = [256, 256]
    density = pyDive.cloned.zeros(shape)

    particles = pyDive.h5.open(input_file, "/particles")

    def particles2density(particles, density):
        particles = particles.load()
        total_pos = particles["cellidx"].astype(np.float32) + particles["pos"]

        # convert total_pos to an (N, 2) shaped array
        total_pos = np.hstack(
            (total_pos["x"][:, np.newaxis], total_pos["y"][:, np.newaxis]))

        par_weighting = np.ones(particles.shape)
        import pyDive.mappings
        pyDive.mappings.particles2mesh(density, par_weighting, total_pos,
                                       pyDive.mappings.CIC)

    pyDive.map(particles2density, particles, density)

    test_density = density.sum()  # add up all local copies

    ref_density = np.load(os.path.join(dirname, "p2m_CIC.npy"))

    np.testing.assert_array_almost_equal(ref_density, test_density)
示例#2
0
def test_particles2mesh(init_pyDive):
    shape = [256, 256]
    density = pyDive.cloned.zeros(shape)

    particles = pyDive.h5.open(input_file, "/particles")

    def particles2density(particles, density):
        particles = particles.load()
        total_pos = particles["cellidx"].astype(np.float32) + particles["pos"]

        # convert total_pos to an (N, 2) shaped array
        total_pos = np.hstack((total_pos["x"][:,np.newaxis],
                               total_pos["y"][:,np.newaxis]))

        par_weighting = np.ones(particles.shape)
        import pyDive.mappings
        pyDive.mappings.particles2mesh(density, par_weighting, total_pos, pyDive.mappings.CIC)

    pyDive.map(particles2density, particles, density)

    test_density = density.sum() # add up all local copies

    ref_density = np.load(os.path.join(dirname, "p2m_CIC.npy"))

    np.testing.assert_array_almost_equal(ref_density, test_density)
示例#3
0
def test_reduce(init_pyDive):
    input_array = pyDive.h5.open(input_file, "fields").load()

    energy_array = pyDive.empty(input_array.shape, dtype=input_array.dtype["fieldE"]["x"])

    def energy(out, fields):
        out[:] = fields["fieldE/x"]**2 + fields["fieldE/y"]**2 + fields["fieldB/z"]**2

    pyDive.map(energy, energy_array, input_array)

    test_total = pyDive.reduce(energy_array, np.add)
    ref_total = np.add.reduce(energy_array.gather(), axis=None)

    diff = abs(ref_total - test_total)
    assert diff / ref_total < 1.0e-5
示例#4
0
def test_map(init_pyDive):
    input_array = pyDive.h5.open(input_file, "fields")

    ref_array = input_array["fieldE/x"].load().gather()**2 \
              + input_array["fieldE/y"].load().gather()**2 \
              + input_array["fieldB/z"].load().gather()**2

    test_array = pyDive.empty(input_array.shape, dtype=input_array.dtype["fieldE"]["x"])

    def energy(out, h5fields):
        fields = h5fields.load()
        out[:] = fields["fieldE/x"]**2 + fields["fieldE/y"]**2 + fields["fieldB/z"]**2

    pyDive.map(energy, test_array, input_array)

    assert np.array_equal(ref_array, test_array.gather())
示例#5
0
def test_reduce(init_pyDive):
    input_array = pyDive.h5.open(input_file, "fields").load()

    energy_array = pyDive.empty(input_array.shape,
                                dtype=input_array.dtype["fieldE"]["x"])

    def energy(out, fields):
        out[:] = fields["fieldE/x"]**2 + fields["fieldE/y"]**2 + fields[
            "fieldB/z"]**2

    pyDive.map(energy, energy_array, input_array)

    test_total = pyDive.reduce(energy_array, np.add)
    ref_total = np.add.reduce(energy_array.gather(), axis=None)

    diff = abs(ref_total - test_total)
    assert diff / ref_total < 1.0e-5
示例#6
0
def test_map(init_pyDive):
    input_array = pyDive.h5.open(input_file, "fields")

    ref_array = input_array["fieldE/x"].load().gather()**2 \
              + input_array["fieldE/y"].load().gather()**2 \
              + input_array["fieldB/z"].load().gather()**2

    test_array = pyDive.empty(input_array.shape,
                              dtype=input_array.dtype["fieldE"]["x"])

    def energy(out, h5fields):
        fields = h5fields.load()
        out[:] = fields["fieldE/x"]**2 + fields["fieldE/y"]**2 + fields[
            "fieldB/z"]**2

    pyDive.map(energy, test_array, input_array)

    assert np.array_equal(ref_array, test_array.gather())