import numpy as np import fs import pm_setup # parameters omega_m = 0.308 nc = 64 boxsize = 64 a = 1.0 seed = 1 # initial setup fs.msg.set_loglevel(1) particles = pm_setup.force() filename = 'force_%s.h5' % fs.config_precision() particles.save_hdf5(filename, 'if') print('%s created.' % filename)
import fs import cola_setup particles = cola_setup.particles() filename = 'cola_%s.h5' % fs.config_precision() particles.save_hdf5(filename, 'xv') print('%s written' % filename)
import numpy as np import h5py import fs import cola_setup def diff(x): if x > 0.5 * boxsize: return boxsize - x return x # reference data filename = 'cola_%s.h5' % fs.config_precision() file = h5py.File(filename, 'r') x_ref = file['x'][:] file.close() # Cola simulation fs.msg.set_loglevel(3) particles = cola_setup.particles() x_par = particles.x # TODO: # get boxsize a # parallelise diff and get diff= x_par - x_ref # need to periodic wrapup the difference # must compare with dx=boxsize/nc if fs.comm.this_node() == 0:
# Test total density is number of particles # if fs.comm.this_node() == 0: nc = delta.shape nmesh = nc[0]*nc[1]*nc[2] eps = np.finfo(delta.dtype).eps a = delta.astype(np.float64) sum = np.sum(a) print("Total %e %e" % (sum, nmesh*eps)) assert(abs(sum) < eps*nmesh) # # Compare with serial mesh # filename = 'pm_density_%s.h5' % fs.config_precision() file = h5py.File(filename, 'r') delta_ref = file['delta'][:] file.close() a = (delta - delta_ref).astype(np.float64) rms_error = np.std(a) max_error = np.max(np.abs(a)) print('rms= %e' % rms_error) print('diff= %e' % max_error) assert(max_error < 500.0*eps) print('pm_density OK')
# # Test PM force parallelisation: # check force does not depend on number of MPI nodes import fs import numpy as np import h5py import pm_setup # read reference file # $ python3 create_force_h5.py to create file = h5py.File('force_%s.h5' % fs.config_precision(), 'r') ref_id = file['id'][:] ref_force = file['f'][:] file.close() # compute PM force fs.msg.set_loglevel(0) particles = pm_setup.force() particle_id = particles.id particle_force = particles.force # compare two forces if fs.comm.this_node() == 0: assert(np.all(particle_id == ref_id)) print('pm_force id OK') force_rms = np.std(ref_force)