示例#1
0
    open(
        '/n/home04/adiazrivero/conv_powerspec/particle_level/nbar/hbugfix/nbar_%s_%s.txt'
        % (name, numb), 'rb'))
N_part = dicti['N_part']
nbar = dicti['nbar']  #for 600 kpc box

print 'nbar = %.3f' % nbar

#mesh = BigFileMesh('/n/dvorkin_lab/anadr/%s_%s_%s_%s_h0.6909.bigfile' % (name,numb,nmesh,bs),'Field')
meshdir = '/n/dvorkin_lab/anadr/%s_%s_%s_%s_hbugfix.bigfile' % (name, numb,
                                                                nmesh, bs)
mesh = BigFileMesh(meshdir, 'Field')

print 'loaded mesh from %s' % meshdir

one_plus_delta = mesh.paint(mode='real')  #compensate for wrong h before
l = bs / nmesh
V = l**3
n = one_plus_delta.value * nbar
N = n * V

print('input number of particles:%s // recovered number: %s' %
      (N_part, N.sum()))

##################################################
#average map \approx host
##################################################

rho = n * mpart

m_tot = np.sum(rho) * l**2
示例#2
0
def load_TNG_map(TNG_basepath, snapNum, field, pm):

    assert field in ['dm', 'Mstar', 'ne', 'T', 'nHI', 'neVz', 'MstarVz']

    #Try directly loading map. If it does not exist, paint the map and save it for future use.
    address = TNG_basepath + '/snapdir_' + str(snapNum).zfill(
        3) + '/' + field + 'map_Nmesh' + str(pm.Nmesh[0])
    try:
        TNGmap = BigFileMesh(address, dataset='Field').to_real_field()
    except:
        if field == 'dm':
            pos = []
            for mdi in range(3):
                pos.append(
                    load_TNG_data(TNG_basepath=TNG_basepath,
                                  snapNum=snapNum,
                                  partType='dm',
                                  field='Coordinates',
                                  mdi=mdi))
            pos = np.array(pos).T

            mass = 1.0 * pm.Nmesh.prod() / comm.allreduce(len(pos), op=MPI.SUM)
            layout = pm.decompose(pos)
            pos1 = layout.exchange(pos)
            del pos

            TNGmap = pm.create(type="real")
            TNGmap.paint(pos1, mass=mass, layout=None, hold=False)
            del pos1

        elif field == 'Mstar':
            mass = load_TNG_data(TNG_basepath=TNG_basepath,
                                 snapNum=snapNum,
                                 partType='stars',
                                 field='Masses')
            pos = np.zeros((len(mass), 3), dtype=np.float32)
            for mdi in range(3):
                pos[:, mdi] = load_TNG_data(TNG_basepath=TNG_basepath,
                                            snapNum=snapNum,
                                            partType='stars',
                                            field='Coordinates',
                                            mdi=mdi)

            layout = pm.decompose(pos)
            pos1 = layout.exchange(pos)
            del pos
            mass1 = layout.exchange(mass)
            del mass

            TNGmap = pm.create(type="real")
            TNGmap.paint(pos1, mass=mass1, layout=None, hold=False)
            del pos1, mass1

        elif field == 'ne':
            raise NotImplementedError

        elif field == 'T':
            raise NotImplementedError

        elif field == 'nHI':

            def nHI(mass, XHI):
                h = 0.6774
                XH = 0.76
                mp = 1.6726219e-27
                Msun10 = 1.989e40
                BoxSize = 205.
                Mpc_cm = 3.085677581e24
                return Msun10 / h / (BoxSize / args.Nmesh * Mpc_cm /
                                     h)**3 * mass * XH / mp * XHI

            gasmass = load_TNG_data(TNG_basepath=TNG_basepath,
                                    snapNum=snapNum,
                                    partType='gas',
                                    field='Masses')
            XHI = load_TNG_data(TNG_basepath=TNG_basepath,
                                snapNum=snapNum,
                                partType='gas',
                                field='NeutralHydrogenAbundance')
            mass = nHI(gasmass, XHI)
            pos = np.zeros((len(mass), 3), dtype=np.float32)
            for mdi in range(3):
                pos[:, mdi] = load_TNG_data(TNG_basepath=TNG_basepath,
                                            snapNum=snapNum,
                                            partType='gas',
                                            field='Coordinates',
                                            mdi=mdi)

            layout = pm.decompose(pos)
            pos1 = layout.exchange(pos)
            del pos
            mass1 = layout.exchange(mass)
            del mass

            TNGmap = pm.create(type="real")
            TNGmap.paint(pos1, mass=mass1, layout=None, hold=False)
            del pos1, mass1

        elif field == 'ne_vz':
            raise NotImplementedError

        elif field == 'Mstar_vz':
            raise NotImplementedError

        FieldMesh(TNGmap).save(address)

    return TNGmap
示例#3
0
文件: readTNG.py 项目: biweidai/LDL
def load_TNG_map(TNG_basepath, snapNum, field, pm):

    assert field in ['dm', 'Mstar', 'ne', 'nT', 'nHI', 'neVz', 'MstarVz']

    #Try directly loading map. If it does not exist, paint the map and save it for future use.
    address = TNG_basepath + '/snapdir_' + str(snapNum).zfill(
        3) + '/' + field + 'map_Nmesh' + str(pm.Nmesh[0])
    try:
        TNGmap = BigFileMesh(address, dataset='Field').to_real_field()
    except:

        if field == 'dm':
            partType = 'dm'
        elif field in ['Mstar', 'MstarVz']:
            partType = 'stars'
        elif field in ['ne', 'nT', 'nHI', 'neVz']:
            partType = 'gas'

        if field == 'Mstar':
            mass = load_TNG_data(TNG_basepath=TNG_basepath,
                                 snapNum=snapNum,
                                 partType=partType,
                                 field='Masses')

        elif field == 'ne':
            gasmass = load_TNG_data(TNG_basepath=TNG_basepath,
                                    snapNum=snapNum,
                                    partType=partType,
                                    field='Masses')
            Xe = load_TNG_data(TNG_basepath=TNG_basepath,
                               snapNum=snapNum,
                               partType=partType,
                               field='ElectronAbundance')
            a = scalefactor(TNG_basepath, snapNum)
            mass = n_cm3(gasmass, Xe, a, pm.Nmesh[0])
            del gasmass, Xe

        elif field == 'nT':

            def temperature(Xe, u):
                XH = 0.76
                kb = 1.38064852e-23
                mp = 1.6726219e-27
                ufac = 1e6  #u: (km/s)^2 -> (m/s)^2
                mu = 4. / (1. + 3. * XH + 4. * XH * Xe) * mp
                T = 2. / 3. * ufac * u / kb * mu
                return T

            Xe = load_TNG_data(TNG_basepath=TNG_basepath,
                               snapNum=snapNum,
                               partType=partType,
                               field='ElectronAbundance')
            u = load_TNG_data(TNG_basepath=TNG_basepath,
                              snapNum=snapNum,
                              partType=partType,
                              field='InternalEnergy')
            T = temperature(Xe, u)
            del u
            gasmass = load_TNG_data(TNG_basepath=TNG_basepath,
                                    snapNum=snapNum,
                                    partType=partType,
                                    field='Masses')
            a = scalefactor(TNG_basepath, snapNum)
            ne = n_cm3(gasmass, Xe, a, pm.Nmesh[0])
            del gasmass, Xe
            mass = ne * T
            del ne, T

        elif field == 'nHI':
            gasmass = load_TNG_data(TNG_basepath=TNG_basepath,
                                    snapNum=snapNum,
                                    partType=partType,
                                    field='Masses')
            XHI = load_TNG_data(TNG_basepath=TNG_basepath,
                                snapNum=snapNum,
                                partType=partType,
                                field='NeutralHydrogenAbundance')
            a = scalefactor(TNG_basepath, snapNum)
            mass = n_cm3(gasmass, XHI, a, pm.Nmesh[0])
            del gasmass, XHI

        elif field == 'neVz':
            gasmass = load_TNG_data(TNG_basepath=TNG_basepath,
                                    snapNum=snapNum,
                                    partType=partType,
                                    field='Masses')
            Xe = load_TNG_data(TNG_basepath=TNG_basepath,
                               snapNum=snapNum,
                               partType=partType,
                               field='ElectronAbundance')
            a = scalefactor(TNG_basepath, snapNum)
            ne = n_cm3(gasmass, Xe, a, pm.Nmesh[0])
            vz = load_TNG_data(TNG_basepath=TNG_basepath,
                               snapNum=snapNum,
                               partType=partType,
                               field='Velocities',
                               mdi=2) * a**0.5
            mass = ne * vz
            del ne, vz

        elif field == 'MstarVz':
            mass = load_TNG_data(TNG_basepath=TNG_basepath,
                                 snapNum=snapNum,
                                 partType=partType,
                                 field='Masses')
            a = scalefactor(TNG_basepath, snapNum)
            vz = load_TNG_data(TNG_basepath=TNG_basepath,
                               snapNum=snapNum,
                               partType=partType,
                               field='Velocities',
                               mdi=2) * a**0.5
            mass = mass * vz
            del vz

        pos = []
        for mdi in range(3):
            pos.append(
                load_TNG_data(TNG_basepath=TNG_basepath,
                              snapNum=snapNum,
                              partType=partType,
                              field='Coordinates',
                              mdi=mdi))
        pos = np.array(pos).T

        layout = pm.decompose(pos)
        pos1 = layout.exchange(pos)
        if field == 'dm':
            mass1 = 1.0 * pm.Nmesh.prod() / pm.comm.allreduce(len(pos),
                                                              op=MPI.SUM)
        else:
            mass1 = layout.exchange(mass)
            del mass
        del pos

        TNGmap = pm.create(type="real")
        TNGmap.paint(pos1, mass=mass1, layout=None, hold=False)
        del pos1, mass1

        FieldMesh(TNGmap).save(address)

    return TNGmap