def write_bc_vtk(self): """ write node lists to properly formatted VTK files """ print "Creating boundary condition arrays" # perhaps at some other time this class should be extended # to allow obstacles within the lid-driven cavity # obst_array = np.zeros(self.nnodes) # obst_array[list(self.obst_list)] = 100. # # #print type(self.inlet_list) # inlet_array = np.zeros(self.nnodes) # inlet_array[list(self.inlet_list)] = 200. # # outlet_array = np.zeros(self.nnodes) # outlet_array[list(self.outlet_list)] = 300. print "length of lid_list = %d \n"%(len(list(self.lid_list))) lid_array = np.zeros(int(self.nnodes)) lid_array[list(self.lid_list)] = 700. solid_array = np.zeros(int(self.nnodes)) solid_array[list(self.solid_list)] = 500. dims = [int(self.Nx), int(self.Ny), int(self.Nz)] origin = [0., 0., 0.] dx = self.x[1] - self.x[0] spacing = [dx, dx, dx] #uniform lattice print "Writing boundary conditions to VTK files" #writeVTK(inlet_array,'inlet','inlet.vtk',dims,origin,spacing) #writeVTK(outlet_array,'outlet','outlet.vtk',dims,origin,spacing) #writeVTK(obst_array,'obst','obst.vtk',dims,origin,spacing) writeVTK(lid_array,'lid','lid.vtk',dims,origin,spacing) writeVTK(solid_array,'solid','solid.vtk',dims,origin,spacing)
def write_bc_vtk(self): """ write node lists to properly formatted VTK files """ print("Creating boundary condition arrays") # perhaps at some other time this class should be extended # to allow obstacles within the lid-driven cavity # obst_array = np.zeros(self.nnodes) # obst_array[list(self.obst_list)] = 100. # # #print type(self.inlet_list) # inlet_array = np.zeros(self.nnodes) # inlet_array[list(self.inlet_list)] = 200. # # outlet_array = np.zeros(self.nnodes) # outlet_array[list(self.outlet_list)] = 300. print("length of lid_list = %d \n" % (len(list(self.lid_list)))) lid_array = np.zeros(int(self.nnodes)) lid_array[list(self.lid_list)] = 700. solid_array = np.zeros(int(self.nnodes)) solid_array[list(self.solid_list)] = 500. dims = [int(self.Nx), int(self.Ny), int(self.Nz)] origin = [0., 0., 0.] dx = self.x[1] - self.x[0] spacing = [dx, dx, dx] #uniform lattice print("Writing boundary conditions to VTK files") #writeVTK(inlet_array,'inlet','inlet.vtk',dims,origin,spacing) #writeVTK(outlet_array,'outlet','outlet.vtk',dims,origin,spacing) #writeVTK(obst_array,'obst','obst.vtk',dims,origin,spacing) writeVTK(lid_array, 'lid', 'lid.vtk', dims, origin, spacing) writeVTK(solid_array, 'solid', 'solid.vtk', dims, origin, spacing)
def write_vtk(self,file_name = 'partition_pa.vtk'): """ write out a vtk file to allow visualization of the partitioning """ dims = [self.Nx, self.Ny, self.Nz] origin = [0., 0., 0.] spacing = [0.1, 0.1, 0.1] #<-- no need for this to correspond to actual physical spacing writeVTK(self.part_vert,'partitions',file_name,dims,origin,spacing)
def write_vtk(self, file_name='partition_pa.vtk'): """ write out a vtk file to allow visualization of the partitioning """ dims = [self.Nx, self.Ny, self.Nz] origin = [0., 0., 0.] spacing = [ 0.1, 0.1, 0.1 ] #<-- no need for this to correspond to actual physical spacing writeVTK(self.part_vert, 'partitions', file_name, dims, origin, spacing)
def write_bc_vtk(self): """ write node lists to properly formatted VTK files """ print "Creating boundary condition arrays" obst_array = np.zeros(self.nnodes) obst_array[list(self.obst_list)] = 100. #print type(self.inlet_list) inlet_array = np.zeros(self.nnodes) inlet_array[list(self.inlet_list)] = 200. outlet_array = np.zeros(self.nnodes) outlet_array[list(self.outlet_list)] = 300. solid_array = np.zeros(self.nnodes) solid_array[list(self.solid_list)] = 500. dims = [int(self.Nx), int(self.Ny), int(self.Nz)] origin = [0., 0., 0.] dx = self.x[1] - self.x[0] spacing = [dx, dx, dx] #uniform lattice print "Writing boundary conditions to VTK files" writeVTK(inlet_array,'inlet','inlet.vtk',dims,origin,spacing) writeVTK(outlet_array,'outlet','outlet.vtk',dims,origin,spacing) writeVTK(obst_array,'obst','obst.vtk',dims,origin,spacing) writeVTK(solid_array,'solid','solid.vtk',dims,origin,spacing)
def write_bc_vtk(self): """ write node lists to properly formatted VTK files """ print "Creating boundary condition arrays" obst_array = np.zeros(self.nnodes) obst_array[list(self.obst_list)] = 100. #print type(self.inlet_list) inlet_array = np.zeros(self.nnodes) inlet_array[list(self.inlet_list)] = 200. outlet_array = np.zeros(self.nnodes) outlet_array[list(self.outlet_list)] = 300. solid_array = np.zeros(self.nnodes) solid_array[list(self.solid_list)] = 500. dims = [int(self.Nx), int(self.Ny), int(self.Nz)] origin = [0., 0., 0.] dx = self.x[1] - self.x[0] spacing = [dx, dx, dx] #uniform lattice print "Writing boundary conditions to VTK files" writeVTK(inlet_array, 'inlet', 'inlet.vtk', dims, origin, spacing) writeVTK(outlet_array, 'outlet', 'outlet.vtk', dims, origin, spacing) writeVTK(obst_array, 'obst', 'obst.vtk', dims, origin, spacing) writeVTK(solid_array, 'solid', 'solid.vtk', dims, origin, spacing)
def write_bc_vtk(self): """ write node lists to properly formatted VTK files """ print("Creating boundary condition arrays") obst_array = np.zeros(int(self.nnodes)) obst_array[list(self.obst_list)] = 100. #print type(self.inlet_list) inlet_array = np.zeros(int(self.nnodes)) inlet_array[list(self.inlet_list)] = 200. outlet_array = np.zeros(int(self.nnodes)) outlet_array[list(self.outlet_list)] = 300. solid_array = np.zeros(int(self.nnodes)) solid_array[list(self.solid_list)] = 500. dims = [int(self.Nx), int(self.Ny), int(self.Nz)] origin = [0., 0., 0.] dx = self.x[1] - self.x[0] spacing = [dx, dx, dx] #uniform lattice print("Writing boundary conditions to VTK files") writeVTK(inlet_array, 'inlet', 'inlet.vtk', dims, origin, spacing) writeVTK(outlet_array, 'outlet', 'outlet.vtk', dims, origin, spacing) writeVTK(obst_array, 'obst', 'obst.vtk', dims, origin, spacing) writeVTK(solid_array, 'solid', 'solid.vtk', dims, origin, spacing) if len(self.subsetList) > 0: print("Writing subset lists to VTK files") ss_idx = 0 for ss in self.subsetList: print('Writing subset %d to file' % ss_idx) ssNodes = ss.get_members(self.x[:], self.y[:], self.z[:]) ss_array = np.zeros(int(self.nnodes)) ss_array[list(ssNodes)] = ss_idx * 1000. + 1000. ssName = 'subSpace' + str(ss_idx) ssFile = ssName + '.vtk' writeVTK(ss_array, ssName, ssFile, dims, origin, spacing) ss_idx += 1
def write_bc_vtk(self): """ write node lists to properly formatted VTK files """ print "Creating boundary condition arrays" obst_array = np.zeros(int(self.nnodes)) obst_array[list(self.obst_list)] = 100. #print type(self.inlet_list) inlet_array = np.zeros(int(self.nnodes)) inlet_array[list(self.inlet_list)] = 200. outlet_array = np.zeros(int(self.nnodes)) outlet_array[list(self.outlet_list)] = 300. solid_array = np.zeros(int(self.nnodes)) solid_array[list(self.solid_list)] = 500. dims = [int(self.Nx), int(self.Ny), int(self.Nz)] origin = [0., 0., 0.] dx = self.x[1] - self.x[0] spacing = [dx, dx, dx] #uniform lattice print "Writing boundary conditions to VTK files" writeVTK(inlet_array,'inlet','inlet.vtk',dims,origin,spacing) writeVTK(outlet_array,'outlet','outlet.vtk',dims,origin,spacing) writeVTK(obst_array,'obst','obst.vtk',dims,origin,spacing) writeVTK(solid_array,'solid','solid.vtk',dims,origin,spacing) if len(self.subsetList) > 0: print "Writing subset lists to VTK files" ss_idx = 0; for ss in self.subsetList: print 'Writing subset %d to file'%ss_idx ssNodes = ss.get_members(self.x[:],self.y[:],self.z[:]) ss_array = np.zeros(int(self.nnodes)) ss_array[list(ssNodes)] = ss_idx*1000. + 1000. ssName = 'subSpace'+str(ss_idx) ssFile = ssName+'.vtk' writeVTK(ss_array,ssName,ssFile,dims,origin,spacing) ss_idx+=1
# compute the number of data dumps I expect to process nDumps = (Num_ts-Warmup_ts)/plot_freq +1 # Num_ts/plot_freq updates for i in range(rank,nDumps,size): # say something comforting print 'processing data dump number %d of %d. '%(i+1,nDumps) # make this ones-based numbering # filename format rho_fn = 'density'+str(i)+'.b_dat' ux_fn = 'ux'+str(i)+'.b_dat' uy_fn = 'uy'+str(i)+'.b_dat' uz_fn = 'uz'+str(i)+'.b_dat' # at this point, ux, uy and uz are out of order ux = np.fromfile(ux_fn,dtype=np.float32).astype(np.float64) uy = np.fromfile(uy_fn,dtype=np.float32).astype(np.float64) uz = np.fromfile(uz_fn,dtype=np.float32).astype(np.float64) pressure = np.fromfile(rho_fn,dtype=np.float32).astype(np.float64) # convert velocity to physical units ux /= u_conv_fact uy /= u_conv_fact uz /= u_conv_fact pressure /= p_conv_fact # please check this... outfilename = 'velocityAndPressure'+str(i)+'.vtk' dims = (Nx,Ny,Nz) writeVTK(pressure,ux,uy,uz,XX,YY,ZZ,outfilename,dims)
ZZ = np.reshape(Z,numEl) # load the turbineChannel data from *.b_dat files rho_fn = 'density'+str(dump_num)+'.b_dat' ux_fn = 'ux'+str(dump_num)+'.b_dat' uy_fn = 'uy'+str(dump_num)+'.b_dat' uz_fn = 'uz'+str(dump_num)+'.b_dat' ux = np.fromfile(ux_fn,dtype=np.float32) uy = np.fromfile(uy_fn,dtype=np.float32) uz = np.fromfile(uz_fn,dtype=np.float32) pressure = np.fromfile(rho_fn,dtype=np.float32) # convert velocity to physical units ux *= u_conv_fact uy *= u_conv_fact uz *= u_conv_fact pressure *= p_conv_fact # compute differences ux_d = ux - ux_m uy_d = uy - uy_m uz_d = uz - uz_m pressure_d = pressure - pressure_m # write the results to a vtk file outfilename = 'velocityAndPressureDifferences.vtk' dims = (Nx,Ny,Nz) writeVTK(pressure_d,ux_d,uy_d,uz_d,XX,YY,ZZ,outfilename,dims) # pray that things work better next time.
YY = np.reshape(Y, numEl) ZZ = np.reshape(Z, numEl) # load the turbineChannel data from *.b_dat files rho_fn = 'density' + str(dump_num) + '.b_dat' ux_fn = 'ux' + str(dump_num) + '.b_dat' uy_fn = 'uy' + str(dump_num) + '.b_dat' uz_fn = 'uz' + str(dump_num) + '.b_dat' ux = np.fromfile(ux_fn, dtype=np.float32) uy = np.fromfile(uy_fn, dtype=np.float32) uz = np.fromfile(uz_fn, dtype=np.float32) pressure = np.fromfile(rho_fn, dtype=np.float32) # convert velocity to physical units ux *= u_conv_fact uy *= u_conv_fact uz *= u_conv_fact pressure *= p_conv_fact # compute differences ux_d = ux - ux_m uy_d = uy - uy_m uz_d = uz - uz_m pressure_d = pressure - pressure_m # write the results to a vtk file outfilename = 'velocityAndPressureDifferences.vtk' dims = (Nx, Ny, Nz) writeVTK(pressure_d, ux_d, uy_d, uz_d, XX, YY, ZZ, outfilename, dims) # pray that things work better next time.
# compute the number of data dumps I expect to process nDumps = (Num_ts - Warmup_ts ) / plot_freq + 1 # initial data plus Num_ts/plot_freq updates # load obst_file.lbm to get the obstacle. Should also zero out the velocity of # the walls. for i in range(rank, nDumps, size): # say something comforting print 'processing data dump number %d of %d. ' % ( i + 1, nDumps) # make this ones-based numbering # filename format rho_fn = 'density' + str(i) + '.b_dat' ux_fn = 'ux' + str(i) + '.b_dat' uy_fn = 'uy' + str(i) + '.b_dat' uz_fn = 'uz' + str(i) + '.b_dat' ux = np.fromfile(ux_fn, dtype=np.float32).astype(np.float64) uy = np.fromfile(uy_fn, dtype=np.float32).astype(np.float64) uz = np.fromfile(uz_fn, dtype=np.float32).astype(np.float64) pressure = np.fromfile(rho_fn, dtype=np.float32).astype(np.float64) # convert velocity to physical units ux /= u_conv_fact uy /= u_conv_fact uz /= u_conv_fact pressure /= p_conv_fact # please check this... outfilename = 'velocityAndPressure' + str(i) + '.vtk' dims = (Nx, Ny, Nz) writeVTK(pressure, ux, uy, uz, XX, YY, ZZ, outfilename, dims)
print 'total nodes = %d ' % nnodes dims = [Nx,Ny,Nz] origin = [0,0,0] dx = x[1]-x[0]; dy = dx; dz = dx; spacing = [dx,dy,dz] print 'preparing output for vtk' obst_array = np.ones(len(x)); #for i in obst_list: # obst_array[i] = 100.0 #obst_array[obst_list]= 100.0 print 'writing to vtk file' writeVTK(obst_array,'obstacle','obst.vtk',dims,origin,spacing); inlet_list = np.where(z==0) inlet_array = np.ones(len(x)) #inlet_array[inlet_list] = 200.0 #writeVTK(inlet_array,'inlet','inlet.vtk',dims,origin,spacing) outlet_list = np.where(z==Lz_p) outlet_array = np.ones(len(x)) #outlet_array[outlet_list] = 300.0 #writeVTK(outlet_array,'outlet','outlet.vtk',dims,origin,spacing) # make the solid nodes on the x == 0, x == Lx_p, y == 0, and y == Ly_p boundaries # God help us; this appears to be the best way
################################################################## #uncomment when ready for performance testing #print (time.time() - start_time) # write to disk a partition map giving the global point number in order for all partitions filename = 'partMap.b_dat' amode = MPI.MODE_WRONLY | MPI.MODE_CREATE #<- bit mask for file mode fh = MPI.File.Open(comm,filename,amode) offset = intOffset*np.dtype(np.int32).itemsize fh.Write_at_all(offset,myPart) fh.Close() comm.Barrier() # make sure everyone is done # rank 0 load this file and print to screen if rank==0: partMap = np.fromfile(filename,dtype='int32') for i in range(gen): vtkname = "state_" + str(i) + ".vtk" dataName = "data_" + str(i) + ".b_dat" data_i = np.fromfile(dataName,dtype='int32') data = np.zeros_like(data_i) data[partMap] = data_i dims = [Nx, Nx,1] origin = [0,0,0] spacing = [1,1,1] writeVTK(data,'state',vtkname,dims,origin,spacing)
#u_conv_fact = l_conv_fact/t_conv_fact; u_conv_fact = t_conv_fact / l_conv_fact if (rank == 0): print("u_conv_fact = %15.15f \n" % u_conv_fact) nnodes = Nx * Ny * Nz # compute geometric data only once x = np.linspace(0., Lx_p, Nx).astype(np.float64) y = np.linspace(0., Ly_p, Ny).astype(np.float64) z = np.linspace(0., Lz_p, Nz).astype(np.float64) numEl = Nx * Ny * Nz Y, Z, X = np.meshgrid(y, z, x) XX = np.reshape(X, numEl) YY = np.reshape(Y, numEl) ZZ = np.reshape(Z, numEl) if rank == 0: dat_name = 'snl' elif rank == 1: dat_name = 'inl' elif rank == 2: dat_name = 'onl' in_fn = dat_name + '.b_dat' out_fn = dat_name + '.vtk' my_dat = np.fromfile(in_fn, dtype=np.int32) dims = (Nx, Ny, Nz) writeVTK(my_dat, dat_name, XX, YY, ZZ, out_fn, dims)
if(rank == 0): print("u_conv_fact = %15.15f \n"%u_conv_fact) nnodes = Nx*Ny*Nz # compute geometric data only once x = np.linspace(0.,Lx_p,Nx).astype(np.float64); y = np.linspace(0.,Ly_p,Ny).astype(np.float64); z = np.linspace(0.,Lz_p,Nz).astype(np.float64); numEl = Nx*Ny*Nz Y,Z,X = np.meshgrid(y,z,x); XX = np.reshape(X,numEl) YY = np.reshape(Y,numEl) ZZ = np.reshape(Z,numEl) if rank==0: dat_name = 'snl'; elif rank==1: dat_name = 'inl'; elif rank==2: dat_name = 'onl'; in_fn = dat_name + '.b_dat' out_fn = dat_name + '.vtk' my_dat = np.fromfile(in_fn,dtype=np.int32) dims = (Nx,Ny,Nz) writeVTK(my_dat,dat_name,XX,YY,ZZ,out_fn,dims)