Example #1
0
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)
Example #2
0
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)
Example #3
0
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:
Example #4
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')
Example #5
0
#
# 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)