Skip to content

Commit 429d6c2

Browse files
authored
Added support for Python 3.x (#2)
* Added face normals. * Added Python 3.x support.
1 parent 38f3f5f commit 429d6c2

File tree

1 file changed

+82
-58
lines changed

1 file changed

+82
-58
lines changed

python/of_mesh_utils.py

100644100755
+82-58
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
OpenFoam Mesh mesh - typically used in a 3D CFD program.
77
88
"""
9-
from __future__ import print_function
10-
from __future__ import division
119
# =============================================================================
1210
# Imports
1311
# =============================================================================
@@ -1137,11 +1135,11 @@ def fixFaceIndexFormat(fileNames):
11371135
fIn = open(facesOrig, 'r')
11381136

11391137
lines = fIn.readlines()
1140-
linesAll = ''.join(lines)
1138+
linesAll = b''.join(lines)
11411139
fIn.close()
11421140

11431141
# search the face file and get the data block
1144-
faceDataBlock = re.search(r'\s*[0-9]{1,100}\s*\n*\((.*)\)\s*\n*',linesAll,re.DOTALL)
1142+
faceDataBlock = re.search(r'\s*[0-9]{1,100}\s*\n*\((.*)\)\s*\n*',linesAll.decode(),re.DOTALL)
11451143
faceDataBlockList=faceDataBlock.group(1).split()
11461144
faceDataBlockSplitLines = faceDataBlock.group(1).splitlines()
11471145

@@ -1190,7 +1188,7 @@ def fixFaceIndexFormat(fileNames):
11901188
for line in lines:
11911189

11921190
# check if we can start writing the new data
1193-
res = nFaceLine.match(line)
1191+
res = nFaceLine.match(line.decode())
11941192
if res and dataStart ==0:
11951193
dataStart =1
11961194
fOut.write(line)
@@ -1244,7 +1242,7 @@ def readVolumeMeshPoints(fileNames):
12441242
for line in f:
12451243
if j>=N:
12461244
break
1247-
res = pointLine.match(line)
1245+
res = pointLine.match(line.decode())
12481246
if res:
12491247
k += 1
12501248
for idim in range(3):
@@ -1287,8 +1285,8 @@ def readFaceInfo(fileNames):
12871285
counter = 0
12881286
#for j in range(N):
12891287
for line in f:
1290-
line = line.replace('(', ' ')
1291-
line = line.replace(')', ' ')
1288+
line = line.replace(b'(', b' ')
1289+
line = line.replace(b')', b' ')
12921290
aux = line.split()
12931291
nNode = int(aux[0])
12941292
for k in range(1, nNode+1):
@@ -1318,7 +1316,11 @@ def readBoundaryInfo(fileNames,faceData):
13181316
boundaries = {}
13191317
keyword = re.compile(r'\s*([a-zA-Z0-9]{1,100})\s*\n')
13201318
for line in f:
1321-
res = keyword.match(line)
1319+
try:
1320+
lineD=line.decode()
1321+
except:
1322+
lineD=line
1323+
res = keyword.match(lineD)
13221324
if res:
13231325
boundaryName = line[res.start(1):res.end(1)]
13241326
blkData = _readBlock(f)
@@ -1362,7 +1364,11 @@ def readCellInfo(fileNames):
13621364
else:
13631365
counter = 0
13641366
for line in f:
1365-
if ')' in line:
1367+
try:
1368+
lineD=line.decode()
1369+
except:
1370+
lineD=line
1371+
if ')' in lineD:
13661372
break
13671373
vals = np.fromstring(line, dtype='int',sep=" ")
13681374
#print vals
@@ -1395,7 +1401,11 @@ def readCellInfo(fileNames):
13951401
else:
13961402
counter = 0
13971403
for line in f:
1398-
if ')' in line:
1404+
try:
1405+
lineD=line.decode()
1406+
except:
1407+
lineD=line
1408+
if ')' in lineD:
13991409
break
14001410
vals = np.fromstring(line, dtype='int',sep=" ")
14011411
#print vals
@@ -1431,7 +1441,11 @@ def _parseFoamHeader(f, nDim=1):
14311441
foamDict = {}
14321442

14331443
for line in f:
1434-
res = keyword.match(line)
1444+
try:
1445+
lineD=line.decode()
1446+
except:
1447+
lineD=line
1448+
res = keyword.match(lineD)
14351449
if res:
14361450
headerName = line[res.start():res.end()]
14371451
foamDict[headerName] = _readBlock(f,nDim)
@@ -1453,14 +1467,19 @@ def _parseFoamHeader(f, nDim=1):
14531467
exitOnNext = False
14541468

14551469
for line in f:
1470+
try:
1471+
lineD=line.decode()
1472+
except:
1473+
lineD=line
1474+
14561475
if exitOnNext:
14571476
return foamDict, N, oneLineData
1458-
res = numberHeader.match(line)
1459-
resOneLine = numberHeaderOneLine.search(line)
1460-
dataTest = data.match(line)
1461-
fieldTest = nufield.match(line)
1462-
uFieldTest = ufield.match(line)
1463-
uFieldTest3 = ufield3.match(line)
1477+
res = numberHeader.match(lineD)
1478+
resOneLine = numberHeaderOneLine.search(lineD)
1479+
dataTest = data.match(lineD)
1480+
fieldTest = nufield.match(lineD)
1481+
uFieldTest = ufield.match(lineD)
1482+
uFieldTest3 = ufield3.match(lineD)
14641483

14651484
if uFieldTest:
14661485
foamDict[uFieldTest.group(1)]=uFieldTest.group(2)+' '+uFieldTest.group(3)
@@ -1502,20 +1521,25 @@ def _readBlock(f, nDim=1):
15021521
blockOpen = False
15031522
blk = {}
15041523
for line in f:
1524+
try:
1525+
lineD=line.decode()
1526+
except:
1527+
lineD=line
1528+
15051529
if not blockOpen:
1506-
res = openBracket.match(line)
1530+
res = openBracket.match(lineD)
15071531
if res:
15081532
blockOpen = True
15091533

15101534
else:
1511-
res = data.match(line)
1535+
res = data.match(lineD)
15121536
if res:
15131537
if 'nonuniform' in res.group(2):
15141538
field = _readField(f,nDim)
15151539
else:
15161540
field = res.group(2)
15171541
blk[res.group(1)] = field
1518-
if closeBracket.match(line):
1542+
if closeBracket.match(lineD):
15191543
break
15201544

15211545
return blk
@@ -1540,31 +1564,31 @@ def _readField(f, nDim):
15401564
for line in f:
15411565
if not sizeFound:
15421566
# figure out the size of this field block
1543-
sizeTest = numberHeader.search(line)
1567+
sizeTest = numberHeader.search(line.decode())
15441568

15451569
if sizeTest:
15461570
field['size'] = int(sizeTest.group(1))
15471571
sizeFound=True
15481572
# now also check for a block open in this line
1549-
openTest = openBracket.search(line)
1573+
openTest = openBracket.search(line.decode())
15501574
if openTest:
15511575
blockOpen=True
15521576
field['value']=[]
15531577
# now if size is 0 also check for close bracket
15541578
if field['size']==0:
1555-
closeTest = closeBracket.search(line)
1579+
closeTest = closeBracket.search(line.decode())
15561580
if closeTest:
15571581
blockOpen=False
15581582
return field
15591583

15601584
elif not blockOpen:
1561-
openTest = openBracket.match(line)
1585+
openTest = openBracket.match(line.decode())
15621586
if openTest:
15631587
blockOpen=True
15641588
field['value']=[]
15651589

15661590
else:
1567-
closeTest = closeBracket.search(line)
1591+
closeTest = closeBracket.search(line.decode())
15681592
if closeTest:
15691593
blockOpen=False
15701594
return field
@@ -1578,7 +1602,7 @@ def _readField(f, nDim):
15781602
else:
15791603
raise Error("nDim >3 not yet supported.")
15801604

1581-
res = varLine.match(line)
1605+
res = varLine.match(line.decode())
15821606
if res:
15831607
field['value'].append(res.group(1))
15841608

@@ -1644,7 +1668,7 @@ def readFoamVarFile(fileNames, varName, timeDir,nCells, nDim):
16441668
line = f.readline()
16451669

16461670
# Now parse the data
1647-
dataLine = dataPack.search(line)
1671+
dataLine = dataPack.search(line.decode())
16481672

16491673
data = line[dataLine.start(0)+1:dataLine.end(0)-2]
16501674

@@ -1688,7 +1712,7 @@ def readFoamVarFile(fileNames, varName, timeDir,nCells, nDim):
16881712
#for j in range(N):
16891713
j = 0
16901714
for line in f:
1691-
res = varLine.match(line)
1715+
res = varLine.match(line.decode())
16921716

16931717
if res:
16941718
k += 1
@@ -1706,7 +1730,7 @@ def readFoamVarFile(fileNames, varName, timeDir,nCells, nDim):
17061730

17071731
for line in f:
17081732

1709-
res = keyword.match(line)
1733+
res = keyword.match(line.decode())
17101734
if res:
17111735
boundaryName = line[res.start(1):res.end(1)]
17121736
var['boundaryName']=boundaryName
@@ -1733,13 +1757,13 @@ def _readBoundaryBlock(f,nDim=0):
17331757
blk = OrderedDict()#{}
17341758
for line in f:
17351759
if not blockOpen:
1736-
res = openBracket.match(line)
1760+
res = openBracket.match(line.decode())
17371761
if res:
17381762
blockOpen = True
17391763
else:
1740-
keywd = keyword.match(line)
1741-
res = data.match(line)
1742-
# resNSC = dataNSC.match(line)
1764+
keywd = keyword.match(line.decode())
1765+
res = data.match(line.decode())
1766+
# resNSC = dataNSC.match(line.decode())
17431767

17441768
if keywd:
17451769
# this is the start of another block, call recursively
@@ -1765,7 +1789,7 @@ def _readBoundaryBlock(f,nDim=0):
17651789
#blk[resNSC.group(1)] = field#res.group(2)
17661790

17671791

1768-
if closeBracket.match(line):
1792+
if closeBracket.match(line.decode()):
17691793
break
17701794

17711795
return blk
@@ -1785,39 +1809,39 @@ def _writeOpenFOAMVolumePoints(fileNames,nodes):
17851809
f = open(fileName, 'w')
17861810

17871811
# write the file header
1788-
f.write('/*--------------------------------*- C++ -*----------------------------------*\ \n')
1789-
f.write('| ========= | |\n')
1790-
f.write('| \\\\ / F ield | OpenFOAM: The Open Source CFD Toolbox |\n')
1791-
f.write('| \\\\ / O peration | Version: v1812 |\n')
1792-
f.write('| \\\\ / A nd | Web: www.OpenFOAM.org |\n')
1793-
f.write('| \\\\/ M anipulation | |\n')
1794-
f.write('\*---------------------------------------------------------------------------*/\n')
1795-
f.write('FoamFile\n')
1796-
f.write('{\n')
1797-
f.write(' version 2.0;\n')
1798-
f.write(' format ascii;\n')
1799-
f.write(' class vectorField;\n')
1800-
f.write(' location "constant/polyMesh";\n')
1801-
f.write(' object points;\n')
1802-
f.write('}\n')
1803-
f.write('// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //\n')
1804-
f.write('\n')
1805-
f.write('\n')
1812+
f.write(b'/*--------------------------------*- C++ -*----------------------------------*\ \n')
1813+
f.write(b'| ========= | |\n')
1814+
f.write(b'| \\\\ / F ield | OpenFOAM: The Open Source CFD Toolbox |\n')
1815+
f.write(b'| \\\\ / O peration | Version: v1812 |\n')
1816+
f.write(b'| \\\\ / A nd | Web: www.OpenFOAM.org |\n')
1817+
f.write(b'| \\\\/ M anipulation | |\n')
1818+
f.write(b'\*---------------------------------------------------------------------------*/\n')
1819+
f.write(b'FoamFile\n')
1820+
f.write(b'{\n')
1821+
f.write(b' version 2.0;\n')
1822+
f.write(b' format ascii;\n')
1823+
f.write(b' class vectorField;\n')
1824+
f.write(b' location "constant/polyMesh";\n')
1825+
f.write(b' object points;\n')
1826+
f.write(b'}\n')
1827+
f.write(b'// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //\n')
1828+
f.write(b'\n')
1829+
f.write(b'\n')
18061830

18071831
nodes = nodes.reshape((int(len(nodes)/3), 3))
18081832
nPoints = len(nodes)
1809-
f.write('%d\n'% nPoints)
1810-
f.write('(\n')
1833+
f.write(b'%d\n'% nPoints)
1834+
f.write(b'(\n')
18111835
for i in range(nPoints):
18121836
if abs(nodes[i, 0])<1e-16:
18131837
nodes[i, 0]=0.0
18141838
if abs(nodes[i, 1])<1e-16:
18151839
nodes[i, 1]=0.0
18161840
if abs(nodes[i, 2])<1e-16:
18171841
nodes[i, 2]=0.0
1818-
f.write('(%20.15e %20.15e %20.15e)\n'%(nodes[i, 0], nodes[i, 1], nodes[i, 2]))
1819-
f.write(')\n\n\n')
1820-
f.write('// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //\n')
1842+
f.write(b'(%20.15e %20.15e %20.15e)\n'%(nodes[i, 0], nodes[i, 1], nodes[i, 2]))
1843+
f.write(b')\n\n\n')
1844+
f.write(b'// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //\n')
18211845

18221846
return
18231847

0 commit comments

Comments
 (0)