def read(self, real): import bigfile if self.comm.rank == 0: self.logger.info("Reading from Nmesh = %d to Nmesh = %d" % (self.Nmesh, real.Nmesh[0])) if any(real.Nmesh != self.Nmesh): pmread = ParticleMesh(BoxSize=real.BoxSize, Nmesh=(self.Nmesh, self.Nmesh, self.Nmesh), dtype='f4', comm=self.comm) else: pmread = real.pm f = bigfile.BigFileMPI(self.comm, self.path) with f[self.dataset] as ds: if self.isfourier: if self.comm.rank == 0: self.logger.info("reading complex field") complex2 = ComplexField(pmread) assert self.comm.allreduce(complex2.size) == ds.size start = sum( self.comm.allgather(complex2.size)[:self.comm.rank]) end = start + complex2.size complex2.unsort(ds[start:end]) complex2.resample(real) else: if self.comm.rank == 0: self.logger.info("reading real field") real2 = RealField(pmread) start = sum(self.comm.allgather(real2.size)[:self.comm.rank]) end = start + real2.size real2.unsort(ds[start:end]) real2.resample(real)
def read(self, real): import bigfile if self.comm.rank == 0: self.logger.info("Reading from Nmesh = %d to Nmesh = %d" %(self.Nmesh, real.Nmesh[0])) if any(real.Nmesh != self.Nmesh): pmread = ParticleMesh(BoxSize=real.BoxSize, Nmesh=(self.Nmesh, self.Nmesh, self.Nmesh), dtype='f4', comm=self.comm) else: pmread = real.pm f = bigfile.BigFileMPI(self.comm, self.path) with f[self.dataset] as ds: if self.isfourier: if self.comm.rank == 0: self.logger.info("reading complex field") complex2 = ComplexField(pmread) assert self.comm.allreduce(complex2.size) == ds.size start = sum(self.comm.allgather(complex2.size)[:self.comm.rank]) end = start + complex2.size complex2.unsort(ds[start:end]) complex2.resample(real) else: if self.comm.rank == 0: self.logger.info("reading real field") real2 = RealField(pmread) start = sum(self.comm.allgather(real2.size)[:self.comm.rank]) end = start + real2.size real2.unsort(ds[start:end]) real2.resample(real)
def test_cmean(comm): # this tests cmean (collective mean) along with resampling preseves it. pm1 = ParticleMesh(BoxSize=8.0, Nmesh=[8, 8], comm=comm, dtype='f8') pm2 = ParticleMesh(BoxSize=8.0, Nmesh=[4, 4], comm=comm, dtype='f8') complex1 = ComplexField(pm1) complex2 = ComplexField(pm2) real2 = RealField(pm2) real1 = RealField(pm1) for i, kk, slab in zip(complex1.slabs.i, complex1.slabs.x, complex1.slabs): slab[...] = sum([k**2 for k in kk])**0.5 complex1.c2r(real1) real1.resample(real2) assert_almost_equal(real1.cmean(), real2.cmean())
def test_cmean(comm): # this tests cmean (collective mean) along with resampling preseves it. pm1 = ParticleMesh(BoxSize=8.0, Nmesh=[8, 8], comm=comm, dtype='f8') pm2 = ParticleMesh(BoxSize=8.0, Nmesh=[4, 4], comm=comm, dtype='f8') complex1 = ComplexField(pm1) complex2 = ComplexField(pm2) real2 = RealField(pm2) real1 = RealField(pm1) for i, kk, slab in zip(complex1.slabs.i, complex1.slabs.x, complex1.slabs): slab[...] = sum([k**2 for k in kk]) **0.5 complex1.c2r(real1) real1.resample(real2) assert_almost_equal(real1.cmean(), real2.cmean())