-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathReadFlxtblFlowMask.py
More file actions
112 lines (87 loc) · 2.64 KB
/
ReadFlxtblFlowMask.py
File metadata and controls
112 lines (87 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 23 15:18:27 2014
@author: adminGH
"""
"""
Read in material tabl-Used to set up grid and mask non-flow fluids
"""
from numpy import *
from scipy import *
# enter filename
filename = 'model.flxtbl'
fileIN = open(filename, "r")
# set up lists and vars
data, buff, fields, vals = [], [], [], []
idx = 0
for line in fileIN:
if not line.startswith(' '):
# clear buffer array for new input
buff = []
# create list for data in correct place
data.append(line.split())
# create list of names
fields.append(data[idx][0])
vals.append(data[idx][1])
idx += 1
else:
# use current tag to store info in list
buff.extend(line.split())
data[(idx-1)] = buff
fileIN.close()
# Map numerical data to types
data[2] = map(float32,data[2])
data[3] = map(float32,data[3])
data[4] = map(float32,data[4])
data[6] = map(int, data[6])
# Grid dimensions - nodes and elements
Nx = int(vals[2]); Ny = int(vals[3]); Nz = int(vals[4])
Ex = Nx-1; Ey = Ny-1; Ez = Nz-1
# Format elements into matrix
n=0
MatrMap = zeros([Ex,Ey,Ez], dtype=int)
for k in range(Ez):
for j in range(Ey):
for i in range(Ex):
MatrMap[i,j,k] = data[6][n]
n += 1
# Create arrays for Xv, Yv, Zv
Xv = float32(zeros([Nx,Ny,Ez]))
Yv = float32(zeros([Nx,Ny,Ez]))
Zv = float32(zeros([Nx,Ny,Ez]))
# all materials not 'flow material' xvel, yvel, zvel = 0.
flowmat = 'watr'
fmat_index = data[5].index(flowmat) + 1
for k in range(Ez):
for j in range(Ey):
for i in range(Ex):
if (MatrMap[i,j,k] == fmat_index):
Xv[i,j,k] = 0.
Yv[i,j,k] = 0.
Zv[i,j,k] = 1.
# Create a 3D array for last k-index of flow
ZvLast = [Ex, Ey, 1]
ZvLast = Zv[:,:,Ez-1]
# Append to Zv array to prevent no flow at boundary
Zv = dstack((Zv, ZvLast))
# Fortran Format
XvF = Xv.T
YvF = Yv.T
ZvF = Zv.T
# Export flex binary format
Fxdata = open('xvflow.bin', 'wb')
Fydata = open('yvflow.bin', 'wb')
Fzdata = open('zvflow.bin', 'wb')
Fxhdr = open('xvflow.hdr', 'w')
Fyhdr = open('yvflow.hdr', 'w')
Fzhdr = open('zvflow.hdr', 'w')
# Write header files
Fxhdr.write("xvflow 3 %d %d %d float32 \n" % (Nx,Ny,Nz))
Fyhdr.write("yvflow 3 %d %d %d float32 \n" % (Nx,Ny,Nz))
Fzhdr.write("zvflow 3 %d %d %d float32 \n" % (Nx,Ny,Nz))
# Write Data files
XvF.tofile(Fxdata); YvF.tofile(Fydata); ZvF.tofile(Fzdata)
# Close all open files
Fxdata.close(); Fydata.close(); Fzdata.close()
Fxhdr.close(); Fyhdr.close(); Fzhdr.close()
print 'Flow Importation Complete'