Skip to content

Instantly share code, notes, and snippets.

@zhulianhua
Last active February 2, 2017 20:46
Show Gist options
  • Save zhulianhua/06a9cb47fe07b9434d1e0a473b06d6f0 to your computer and use it in GitHub Desktop.
Save zhulianhua/06a9cb47fe07b9434d1e0a473b06d6f0 to your computer and use it in GitHub Desktop.
convert a cell centered tecplot block ascii data to a VTK RECTILINEAR_GRID format data
from numpy import *
#filename = "data.txt"
datadir = "Tr0.8_Kn0.1/GH_16_16_16/"
filename = datadir+"creep3d.dat"
NX = 40
NZ = 40
NY = 80
NX1 = NX + 1
NY1 = NY + 1
NZ1 = NZ + 1
datanames = ["X", "Y", "Z", "Rho", "U", "V", "W", "T", "Qx", "Qy", "Qz"]
data = []
num_data = len(datanames)
num_eles = zeros(num_data)
num_eles[:3] = NX1*NY1*NZ1
num_eles[3:] = NX*NY*NZ
for i in range(num_data):
data.append(zeros(num_eles[i]))
count_eles = zeros(num_data)
di = -1
with open(filename) as f:
next(f)
next(f)
# skip two lines
# each variable array start with blank line
for line in f:
if line not in ['\n', '\r\n']:
numbers_float = map(float, line.split())
num_f = len(numbers_float)
data[di][count_eles[di]:count_eles[di]+num_f] = array(numbers_float)
count_eles[di] += num_f
else:
di = di + 1
# vtk DataFile Version 3.0
with open(datadir+"cell.vtk", "w") as f:
f.write("# vtk DataFile Version 3.0\n")
f.write("vtk output\n")
f.write("ASCII\n")
f.write("DATASET RECTILINEAR_GRID\n")
f.write("DIMENSIONS %d %d %d\n"%(NX1, NY1, NZ1))
f.write("X_COORDINATES %d float\n"%(NX1))
for i in range(NX1):
f.write("%.18e\n"%data[0][i])
f.write("Y_COORDINATES %d float\n"%(NY1))
for i in range(NY1):
f.write("%.18e\n"%data[1][i*NX1])
f.write("Z_COORDINATES %d float\n"%(NZ1))
for i in range(NZ1):
f.write("%.18e\n"%data[2][i*NX1*NY1])
f.write("CELL_DATA %d\n"%(NX*NY*NZ))
f.write("SCALARS rho float 1\n")
f.write("LOOKUP_TABLE default")
for i in range(NX*NY*NZ):
f.write("\n%.18e"%data[3][i])
f.write("SCALARS T float 1\n")
f.write("LOOKUP_TABLE default")
for i in range(NX*NY*NZ):
f.write("\n%.18e"%data[7][i])
f.write("\nVECTORS U float")
for i in range(NX*NY*NZ):
f.write("\n%.18e %.18e %.18e"%(data[4][i], data[5][i], data[6][i]))
f.write("\nVECTORS Q float")
for i in range(NX*NY*NZ):
f.write("\n%.18e %.18e %.18e"%(data[8][i], data[9][i], data[10][i]))
@zhulianhua
Copy link
Author

PS: data block entries are separated by a blank line
PS: Data header in creep3d.dat is

VARIABLES = X, Y, Z, RHO, U, V, W, T, Qx, Qy, Qz
ZONE I = 41 J = 81 K = 41 DATAPACKING=BLOCK, VARLOCATION=([4,5,6,7,8,9,10,11]=CELLCENTERED)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment