2022-03-02 10:37:43 +01:00
import numpy as np
2022-03-02 14:42:09 +01:00
def readswash ( filename , nx , nlay ) :
with open ( filename , " r " ) as f :
content = f . readlines ( )
fsurf = [ ]
klay = np . zeros ( ( 7203 , nlay + 1 , nx ) )
brkp = [ ]
Vxfield = np . zeros ( ( 7203 , nlay + 1 , nx ) )
Vyfield = np . zeros ( ( 7203 , nlay + 1 , nx ) )
Vzfield = np . zeros ( ( 7203 , nlay + 1 , nx ) )
ts = [ ]
t = 0
for i in range ( len ( content ) ) :
if (
content [ i ] [ 33 : 93 ]
== " Layer interface k=00 "
) :
layint0 = content [ i + 7 ] . split ( " . " )
layint1 = content [ i + 12 ] . split ( " . " )
surftemp = (
[ float ( layint0 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint0 [ 1 : - 1 ]
+ [ float ( layint1 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint1 [ 1 : - 1 ]
)
j = 0
while j < len ( surftemp ) :
surftemp [ j ] = float ( surftemp [ j ] )
j + = 1
fsurf . append ( np . asarray ( surftemp ) / 10 )
if content [ i ] [ 33 : 56 ] == " Flow velocity per layer " :
k = int ( content [ i ] [ 83 : 85 ] )
layint0 = content [ i + 7 ] . split ( " . " )
layint1 = content [ i + 12 ] . split ( " . " )
vktemp = (
[ float ( layint0 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint0 [ 1 : - 1 ]
+ [ float ( layint1 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint1 [ 1 : - 1 ]
)
j = 0
while j < len ( vktemp ) :
try :
vktemp [ j ] = float ( vktemp [ j ] )
except :
# vktemp[j] = float(vktemp[j][-5:])
vktemp [ j ] = 0
j + = 1
if content [ i ] [ 87 : 88 ] == " X " :
Vxfield [ t , k , : ] = np . asarray ( vktemp ) / 1000
else :
Vyfield [ t , k , : ] = np . asarray ( vktemp ) / 1000
if content [ i ] [ 33 : 56 ] == " Velocity in z-direction " :
k = int ( content [ i ] [ 91 : 93 ] )
layint0 = content [ i + 7 ] . split ( " . " )
layint1 = content [ i + 12 ] . split ( " . " )
vktemp = (
[ float ( layint0 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint0 [ 1 : - 1 ]
+ [ float ( layint1 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint1 [ 1 : - 1 ]
)
j = 0
while j < len ( vktemp ) :
try :
vktemp [ j ] = float ( vktemp [ j ] )
except :
vktemp [ j ] = 0.0
j + = 1
Vzfield [ t , k , : len ( vktemp ) ] = np . asarray ( vktemp ) / 1000
Vzfield [ t , k , len ( vktemp ) : ] = np . zeros ( nx - len ( vktemp ) )
if content [ i ] [ 33 : 48 ] == " Layer interface " :
k = int ( content [ i ] [ 91 : 93 ] )
layint0 = content [ i + 7 ] . split ( " . " )
layint1 = content [ i + 12 ] . split ( " . " )
layktemp = (
[ float ( layint0 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint0 [ 1 : - 1 ]
+ [ float ( layint1 [ 0 ] . split ( ) [ 1 ] ) ]
+ layint1 [ 1 : - 1 ]
)
j = 0
while j < len ( layktemp ) :
layktemp [ j ] = float ( layktemp [ j ] )
j + = 1
klay [ t , k , : ] = np . asarray ( layktemp ) / 10
if content [ i ] [ 33 : 52 ] == " wave breaking point " :
br0 = content [ i + 7 ] . split ( " . " )
br1 = content [ i + 12 ] . split ( " . " )
brtemp = (
[ float ( br0 [ 0 ] . split ( ) [ 1 ] ) ]
+ br0 [ 1 : - 1 ]
+ [ float ( br1 [ 0 ] . split ( ) [ 1 ] ) ]
+ br1 [ 1 : - 1 ]
)
j = 0
while j < len ( brtemp ) :
brtemp [ j ] = float ( brtemp [ j ] )
j + = 1
brkp . append ( np . asarray ( brtemp ) )
if content [ i ] [ 33 : 68 ] == " Time in seconds from reference time " :
ts . append ( float ( content [ i + 1 ] [ 7 : 16 ] ) )
t + = 1
return fsurf , Vxfield , Vyfield , Vzfield , brkp , klay
if __name__ == " __main__ " :
print ( readswash ( " test.txt " , 1250 , 10 ) )