Last active
February 2, 2017 20:46
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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])) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
PS: data block entries are separated by a blank line
PS: Data header in creep3d.dat is