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