6
6
OpenFoam Mesh mesh - typically used in a 3D CFD program.
7
7
8
8
"""
9
- from __future__ import print_function
10
- from __future__ import division
11
9
# =============================================================================
12
10
# Imports
13
11
# =============================================================================
@@ -1137,11 +1135,11 @@ def fixFaceIndexFormat(fileNames):
1137
1135
fIn = open (facesOrig , 'r' )
1138
1136
1139
1137
lines = fIn .readlines ()
1140
- linesAll = '' .join (lines )
1138
+ linesAll = b '' .join (lines )
1141
1139
fIn .close ()
1142
1140
1143
1141
# 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 )
1145
1143
faceDataBlockList = faceDataBlock .group (1 ).split ()
1146
1144
faceDataBlockSplitLines = faceDataBlock .group (1 ).splitlines ()
1147
1145
@@ -1190,7 +1188,7 @@ def fixFaceIndexFormat(fileNames):
1190
1188
for line in lines :
1191
1189
1192
1190
# check if we can start writing the new data
1193
- res = nFaceLine .match (line )
1191
+ res = nFaceLine .match (line . decode () )
1194
1192
if res and dataStart == 0 :
1195
1193
dataStart = 1
1196
1194
fOut .write (line )
@@ -1244,7 +1242,7 @@ def readVolumeMeshPoints(fileNames):
1244
1242
for line in f :
1245
1243
if j >= N :
1246
1244
break
1247
- res = pointLine .match (line )
1245
+ res = pointLine .match (line . decode () )
1248
1246
if res :
1249
1247
k += 1
1250
1248
for idim in range (3 ):
@@ -1287,8 +1285,8 @@ def readFaceInfo(fileNames):
1287
1285
counter = 0
1288
1286
#for j in range(N):
1289
1287
for line in f :
1290
- line = line .replace ('(' , ' ' )
1291
- line = line .replace (')' , ' ' )
1288
+ line = line .replace (b '(' , b ' ' )
1289
+ line = line .replace (b ')' , b ' ' )
1292
1290
aux = line .split ()
1293
1291
nNode = int (aux [0 ])
1294
1292
for k in range (1 , nNode + 1 ):
@@ -1318,7 +1316,11 @@ def readBoundaryInfo(fileNames,faceData):
1318
1316
boundaries = {}
1319
1317
keyword = re .compile (r'\s*([a-zA-Z0-9]{1,100})\s*\n' )
1320
1318
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 )
1322
1324
if res :
1323
1325
boundaryName = line [res .start (1 ):res .end (1 )]
1324
1326
blkData = _readBlock (f )
@@ -1362,7 +1364,11 @@ def readCellInfo(fileNames):
1362
1364
else :
1363
1365
counter = 0
1364
1366
for line in f :
1365
- if ')' in line :
1367
+ try :
1368
+ lineD = line .decode ()
1369
+ except :
1370
+ lineD = line
1371
+ if ')' in lineD :
1366
1372
break
1367
1373
vals = np .fromstring (line , dtype = 'int' ,sep = " " )
1368
1374
#print vals
@@ -1395,7 +1401,11 @@ def readCellInfo(fileNames):
1395
1401
else :
1396
1402
counter = 0
1397
1403
for line in f :
1398
- if ')' in line :
1404
+ try :
1405
+ lineD = line .decode ()
1406
+ except :
1407
+ lineD = line
1408
+ if ')' in lineD :
1399
1409
break
1400
1410
vals = np .fromstring (line , dtype = 'int' ,sep = " " )
1401
1411
#print vals
@@ -1431,7 +1441,11 @@ def _parseFoamHeader(f, nDim=1):
1431
1441
foamDict = {}
1432
1442
1433
1443
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 )
1435
1449
if res :
1436
1450
headerName = line [res .start ():res .end ()]
1437
1451
foamDict [headerName ] = _readBlock (f ,nDim )
@@ -1453,14 +1467,19 @@ def _parseFoamHeader(f, nDim=1):
1453
1467
exitOnNext = False
1454
1468
1455
1469
for line in f :
1470
+ try :
1471
+ lineD = line .decode ()
1472
+ except :
1473
+ lineD = line
1474
+
1456
1475
if exitOnNext :
1457
1476
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 )
1464
1483
1465
1484
if uFieldTest :
1466
1485
foamDict [uFieldTest .group (1 )]= uFieldTest .group (2 )+ ' ' + uFieldTest .group (3 )
@@ -1502,20 +1521,25 @@ def _readBlock(f, nDim=1):
1502
1521
blockOpen = False
1503
1522
blk = {}
1504
1523
for line in f :
1524
+ try :
1525
+ lineD = line .decode ()
1526
+ except :
1527
+ lineD = line
1528
+
1505
1529
if not blockOpen :
1506
- res = openBracket .match (line )
1530
+ res = openBracket .match (lineD )
1507
1531
if res :
1508
1532
blockOpen = True
1509
1533
1510
1534
else :
1511
- res = data .match (line )
1535
+ res = data .match (lineD )
1512
1536
if res :
1513
1537
if 'nonuniform' in res .group (2 ):
1514
1538
field = _readField (f ,nDim )
1515
1539
else :
1516
1540
field = res .group (2 )
1517
1541
blk [res .group (1 )] = field
1518
- if closeBracket .match (line ):
1542
+ if closeBracket .match (lineD ):
1519
1543
break
1520
1544
1521
1545
return blk
@@ -1540,31 +1564,31 @@ def _readField(f, nDim):
1540
1564
for line in f :
1541
1565
if not sizeFound :
1542
1566
# figure out the size of this field block
1543
- sizeTest = numberHeader .search (line )
1567
+ sizeTest = numberHeader .search (line . decode () )
1544
1568
1545
1569
if sizeTest :
1546
1570
field ['size' ] = int (sizeTest .group (1 ))
1547
1571
sizeFound = True
1548
1572
# now also check for a block open in this line
1549
- openTest = openBracket .search (line )
1573
+ openTest = openBracket .search (line . decode () )
1550
1574
if openTest :
1551
1575
blockOpen = True
1552
1576
field ['value' ]= []
1553
1577
# now if size is 0 also check for close bracket
1554
1578
if field ['size' ]== 0 :
1555
- closeTest = closeBracket .search (line )
1579
+ closeTest = closeBracket .search (line . decode () )
1556
1580
if closeTest :
1557
1581
blockOpen = False
1558
1582
return field
1559
1583
1560
1584
elif not blockOpen :
1561
- openTest = openBracket .match (line )
1585
+ openTest = openBracket .match (line . decode () )
1562
1586
if openTest :
1563
1587
blockOpen = True
1564
1588
field ['value' ]= []
1565
1589
1566
1590
else :
1567
- closeTest = closeBracket .search (line )
1591
+ closeTest = closeBracket .search (line . decode () )
1568
1592
if closeTest :
1569
1593
blockOpen = False
1570
1594
return field
@@ -1578,7 +1602,7 @@ def _readField(f, nDim):
1578
1602
else :
1579
1603
raise Error ("nDim >3 not yet supported." )
1580
1604
1581
- res = varLine .match (line )
1605
+ res = varLine .match (line . decode () )
1582
1606
if res :
1583
1607
field ['value' ].append (res .group (1 ))
1584
1608
@@ -1644,7 +1668,7 @@ def readFoamVarFile(fileNames, varName, timeDir,nCells, nDim):
1644
1668
line = f .readline ()
1645
1669
1646
1670
# Now parse the data
1647
- dataLine = dataPack .search (line )
1671
+ dataLine = dataPack .search (line . decode () )
1648
1672
1649
1673
data = line [dataLine .start (0 )+ 1 :dataLine .end (0 )- 2 ]
1650
1674
@@ -1688,7 +1712,7 @@ def readFoamVarFile(fileNames, varName, timeDir,nCells, nDim):
1688
1712
#for j in range(N):
1689
1713
j = 0
1690
1714
for line in f :
1691
- res = varLine .match (line )
1715
+ res = varLine .match (line . decode () )
1692
1716
1693
1717
if res :
1694
1718
k += 1
@@ -1706,7 +1730,7 @@ def readFoamVarFile(fileNames, varName, timeDir,nCells, nDim):
1706
1730
1707
1731
for line in f :
1708
1732
1709
- res = keyword .match (line )
1733
+ res = keyword .match (line . decode () )
1710
1734
if res :
1711
1735
boundaryName = line [res .start (1 ):res .end (1 )]
1712
1736
var ['boundaryName' ]= boundaryName
@@ -1733,13 +1757,13 @@ def _readBoundaryBlock(f,nDim=0):
1733
1757
blk = OrderedDict ()#{}
1734
1758
for line in f :
1735
1759
if not blockOpen :
1736
- res = openBracket .match (line )
1760
+ res = openBracket .match (line . decode () )
1737
1761
if res :
1738
1762
blockOpen = True
1739
1763
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() )
1743
1767
1744
1768
if keywd :
1745
1769
# this is the start of another block, call recursively
@@ -1765,7 +1789,7 @@ def _readBoundaryBlock(f,nDim=0):
1765
1789
#blk[resNSC.group(1)] = field#res.group(2)
1766
1790
1767
1791
1768
- if closeBracket .match (line ):
1792
+ if closeBracket .match (line . decode () ):
1769
1793
break
1770
1794
1771
1795
return blk
@@ -1785,39 +1809,39 @@ def _writeOpenFOAMVolumePoints(fileNames,nodes):
1785
1809
f = open (fileName , 'w' )
1786
1810
1787
1811
# 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 ' )
1806
1830
1807
1831
nodes = nodes .reshape ((int (len (nodes )/ 3 ), 3 ))
1808
1832
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 ' )
1811
1835
for i in range (nPoints ):
1812
1836
if abs (nodes [i , 0 ])< 1e-16 :
1813
1837
nodes [i , 0 ]= 0.0
1814
1838
if abs (nodes [i , 1 ])< 1e-16 :
1815
1839
nodes [i , 1 ]= 0.0
1816
1840
if abs (nodes [i , 2 ])< 1e-16 :
1817
1841
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 ' )
1821
1845
1822
1846
return
1823
1847
0 commit comments