def test_solver(): Plin = LinearPower(Planck15, redshift=0, transfer='EisensteinHu') solver = Solver(pm, Planck15, B=1) Q = pm.generate_uniform_particle_grid(shift=0) wn = solver.whitenoise(1234) dlin = solver.linear(wn, lambda k: Plin(k)) state = solver.lpt(dlin, Q, a=1.0, order=2) dnonlin = solver.nbody(state, leapfrog([1.0])) dnonlin.save('nonlin')
def get_lpt(pm, z, cosmology, seed): """Evolve the linear power using a 2LPT solver, so we get a good model of the density structure at the reionization redshift.""" a = 1 / (1 + z) Plin = LinearPower(cosmology, redshift=0, transfer='EisensteinHu') solver = Solver(pm, cosmology, B=1) Q = pm.generate_uniform_particle_grid() wn = solver.whitenoise(seed) dlin = solver.linear(wn, Plin) state = solver.lpt(dlin, Q, a=a, order=2) return state
def solve(pm): solver = Solver(pm, Planck15, B=1) q = numpy.array_split(Q, pm.comm.size)[pm.comm.rank] wn = solver.whitenoise(1234) dlin = solver.linear(wn, lambda k: Plin(k)) state = solver.lpt(dlin, q, a=0.1, order=2) state = solver.nbody(state, leapfrog([0.1, 0.5, 1.0])) d = {} for key in 'X', 'P', 'F': d[key] = numpy.concatenate(pm.comm.allgather(getattr(state, key)), axis=0) return d
def test_lpt(): Plin = LinearPower(Planck15, redshift=0, transfer='EisensteinHu') solver = Solver(pm, Planck15, B=1) Q = pm.generate_uniform_particle_grid(shift=0) wn = solver.whitenoise(1234) dlin = solver.linear(wn, lambda k: Plin(k)) state1 = solver.lpt(dlin, Q, a=0.01, order=1) state2 = solver.lpt(dlin, Q, a=1.0, order=1) pt = MatterDominated(Planck15.Om0, a=[0.01, 1.0], a_normalize=1.0) # print((state2.P[...] / state1.P[...])) print((state2.P[...] - state1.P[...]) / state1.F[...]) fac = 1 / (0.01**2 * pt.E(0.01)) * (pt.Gf(1.0) - pt.Gf(0.01)) / pt.gf(0.01) assert_allclose(state2.P[...], state1.P[...] + fac * state1.F[...])
from pmesh.pm import ParticleMesh import numpy pm = ParticleMesh(BoxSize=512, Nmesh=[256, 256, 256], dtype='f8', resampler='tsc') Q = pm.generate_uniform_particle_grid() stages = numpy.linspace(0.1, 1.0, 20, endpoint=True) solver = Solver(pm, Planck15, B=2) solver_ncdm = SolverNCDM(pm, Planck15, B=2) wn = solver.whitenoise(400) dlin = solver.linear(wn, EHPower(Planck15, 0)) lpt = solver.lpt(dlin, Q, stages[0]) #lpt.S = numpy.float32(lpt.S) def monitor(action, ai, ac, af, state, event): if pm.comm.rank == 0: print(state.a['S'], state.a['P'], state.a['F'], state.S[0], state.P[0], action, ai, ac, af) state1 = solver.nbody(lpt.copy(), leapfrog(stages), monitor=monitor) state2 = solver_ncdm.nbody(lpt.copy(), leapfrog(stages), monitor=monitor)
from pmesh.pm import ParticleMesh import numpy Planck15 = Planck15.clone(gauge='newtonian') pm = ParticleMesh(BoxSize=512, Nmesh=[64, 64, 64], dtype='f4', resampler='tsc') Q = pm.generate_uniform_particle_grid() stages = numpy.linspace(0.1, 1.0, 10, endpoint=True) #stages = [1.] solver = Solver(pm, Planck15, B=2) solver_multi = SolverMulti(pm, Planck15, B=2) wn = solver.whitenoise(400, unitary=True) dlin = solver.linear(wn, LinearPower(Planck15, 0)) lpt = solver.lpt(dlin, Q, stages[0], order=2) def monitor(action, ai, ac, af, state, event): if pm.comm.rank == 0: print(state.a['S'], state.a['P'], state.a['F'], state.S[0], state.P[0], action, ai, ac, af) def monitor_multi(action, ai, ac, af, state, event): if pm.comm.rank == 0: print(state.a['S'], state.a['P'], state.a['F'], state['1'].S[0], state['1'].P[0], action, ai, ac, af)
delta = np.interp(np.log10(k), logk, logpower) power = norm * (10**delta) * (2 * np.pi**2) / k**3 power[mask] = 0. k[mask] = 0. return power #time steps in scale factor stages = np.linspace(0.1, 1., args.Nstep, endpoint=True) a_output = 1. / (np.array(args.output_redshift) + 1.) #IC 2LPT t = time.time() solver_IC = Solver(pm_IC, Planck15, B=2) wn = solver_IC.whitenoise(2695896) dlin = solver_IC.linear(wn, Power) Q = pm.generate_uniform_particle_grid(shift=0) solver = Solver(pm, Planck15, B=2) state = solver.lpt(dlin, Q, stages[0], order=2) if pm.comm.rank == 0: print('Finish generating initial conditions with 2LPT. Time:', time.time() - t) X0 = state.X V0 = state.V a0 = np.array(stages[0])
Lbox = args.Lbox print("Seed = ", Rdm_seed) print("Lbox = %.1f" % Lbox, "Ng = %d" % Ng, "RG = %.2f" % RG) # Choose cosmology # ------------------------------------------- cosmology = nbcosmos.WMAP9 mycosmo = Cosmos(FLRW=True, obj=cosmology) # generate linear density field at z=0 # ------------------------------------------- pm = ParticleMesh(BoxSize=Lbox, Nmesh=[Ng, Ng, Ng]) Q = pm.generate_uniform_particle_grid(shift=0) solver = Solver(pm, cosmology, B=1) wn = solver.whitenoise(seed=Rdm_seed) dlin = solver.linear(wn, lambda k: mycosmo.Pk_lin(k)) dx_field = dlin.c2r( ).value # dx_field is the density contrast field centered at 0 # initialize gsCR object, build xij^{-1} matrix for full 18 constraints # ------------------------------------------- fg = gsCR(mycosmo, Lbox=Lbox, Nmesh=Ng, RG=RG, CONS=['full']) fg.build_Xij_inv_matrix() print("xij^{-1}:") print(fg.xij_tensor_inv) print("*********************************************") # set peak position # ------------------------------------------- if args.xpk_rel[0] != -1:
def func_gal_catalogue(bs, nc, seed, nstep, seed_hod, Omega_m, p_alpha, p_logMin, p_logM1, p_logM0, p_sigma_logM): folder = "L%04d_N%04d_S%04d_%02dstep" % (bs, nc, seed, nstep) # setup initial conditions Omegacdm = Omega_m - 0.049, cosmo = cosmology.Planck15.clone(Omega_cdm=Omegacdm, h=0.6711, Omega_b=0.049) power = cosmology.LinearPower(cosmo, 0) klin = np.logspace(-4, 2, 1000) plin = power(klin) pkfunc = interpolate(klin, plin) # run the simulation pm = ParticleMesh(BoxSize=bs, Nmesh=[nc, nc, nc]) Q = pm.generate_uniform_particle_grid() stages = numpy.linspace(0.1, 1.0, nstep, endpoint=True) solver = Solver(pm, cosmo, B=2) wn = solver.whitenoise(seed) dlin = solver.linear(wn, pkfunc) state = solver.lpt(dlin, Q, stages[0]) state = solver.nbody(state, leapfrog(stages)) # create the catalogue cat = ArrayCatalog( { 'Position': state.X, 'Velocity': state.V, 'Displacement': state.S, 'Density': state.RHO }, BoxSize=pm.BoxSize, Nmesh=pm.Nmesh, M0=Omega_m * 27.75e10 * bs**3 / (nc / 2.0)**3) cat['KDDensity'] = KDDensity(cat).density cat.save('%s/Matter' % (folder), ('Position', 'Velocity', 'Density', 'KDDensity')) # run FOF fof = FOF(cat, linking_length=0.2, nmin=12) fofcat = fof.to_halos(particle_mass=cat.attrs['M0'], cosmo=cosmo, redshift=0.0) fofcat.save('%s/FOF' % (folder), ('Position', 'Velocity', 'Mass', 'Radius')) # run HOD params = { 'alpha': p_alpha, 'logMmin': p_logMin, 'logM1': p_logM1, 'logM0': p_logM0, 'sigma_logM': p_sigma_logM } halos = HaloCatalog(fofcat, cosmo=cosmo, redshift=0.0, mdef='vir') halocat = halos.to_halotools(halos.attrs['BoxSize']) hod = HODCatalog(halocat, seed=seed_hod, **params) hod.save('%s/HOD' % (folder), ('Position', 'Velocity')) return folder, cat, fofcat, hod