def __init__(self, varfile='particles_stalker.dat', datadir='./data', proc=-1, verbose=False, reduce_to=-1): pdata = pc.read_pdim() setattr(self,'nstalk',pdata.npar_stalk) self.find_no_of_procs(proc=proc,datadir=datadir) self.get_stalkdim(datadir=datadir) self.get_stalktime(datadir=datadir) for proc in self.procdirs: self.read_stalker_data(datadir=datadir,procdir=proc) self.bundle_stalker_data()
def read_class_npvar_red(datadir='./data', pfile='pvar.dat', proc=0, verbose=False, reduce_to=-1, set_reduce=-1): dims = pc.read_dim(datadir,proc) pdims = pc.read_pdim(datadir) npar_loc = read_npar_loc(datadir=datadir,pfile=pfile,proc=proc) # # the Next bit calculates how many particles are written for all but # the last processor. The last processor is assigned a number of particles # to write so that the required number of particles is obtained # if (reduce_to > 0): if (set_reduce <= 0): reductionfactor = float(reduce_to)/float(pdims.npar) npar_red = int(round(npar_loc*reductionfactor)) else: npar_red = set_reduce if (verbose): #print 'reducing '+str(npar_loc)+' to '+str(npar_red)+ ' on proc'+str(proc) print('reducing {} to {} on proc {}'.format( npar_loc, npar_red, proc)) written_parts=npar_red else: written_parts=set_reduce if (verbose): #print npar_loc,' particles on processor: ',proc # Python 2 print(str(npar_loc)+' particles on processor: '+str(proc)) mvars = pdims.mpaux+pdims.mpvar ltot = npar_loc*mvars if (dims.precision == 'S'): REAL = '<f4' else: REAL = '<f8' array_shape= np.dtype([('header','<i4'), ('npar_loc','<i4'), ('footer','<i4'), ('header2','<i4'), ('ipar','<i4',npar_loc), ('footer2','<i4'), ('header3','<i4'), ('fp',REAL,ltot), ('footer3','<i4'), ('header4','<i4'), ('t',REAL), ('x',REAL,dims.mx), ('y',REAL,dims.my), ('z',REAL,dims.mz), ('dx',REAL), ('dy',REAL), ('dz',REAL), ('footer4','<i4')]) p_data = np.fromfile(datadir+'/proc'+str(proc)+'/'+pfile,dtype=array_shape) partpars = np.array(p_data['fp'].reshape(mvars,npar_loc)) if (reduce_to>0): particle_list = map(lambda x: int(x),np.linspace(0.0,npar_loc,num=npar_red,endpoint=False)) red_parts = partpars[:,particle_list] red_shape = np.dtype([('header','<i4'), ('npar_loc','<i4'), ('footer','<i4'), ('header2','<i4'), ('ipar','<i4',(npar_red),), ('footer2','<i4'), ('header3','<i4'), ('fp',REAL,npar_red*mvars), ('footer3','<i4'), ('header4','<i4'), ('t',REAL), ('x',REAL,(dims.mx,)), ('y',REAL,(dims.my,)), ('z',REAL,(dims.mz,)), ('dx',REAL), ('dy',REAL), ('dz',REAL), ('footer4','<i4')]) p_red =np.array([(4, npar_red, 4, (npar_red*4), (np.squeeze(p_data['ipar'][0,:npar_red])), (npar_red*4), (npar_red*mvars*8), (np.squeeze(np.ravel(red_parts))), (npar_red*mvars*8), (p_data['header4'][0]), (p_data['t']), (p_data['x']), (p_data['y']), (p_data['z']), (p_data['dx']), (p_data['dy']), (p_data['dz']), p_data['footer4'][0]) ],dtype=red_shape) p_red.tofile(datadir+'/proc'+str(proc)+'/'+str(reduce_to)+'_'+pfile) ipar = np.squeeze(p_data['ipar'].reshape(p_data['ipar'].size)) return ipar, partpars, written_parts