forked from oceannimbus/wave-mud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
swan_io_readSpecFile_s1d.py
105 lines (76 loc) · 2.57 KB
/
swan_io_readSpecFile_s1d.py
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
def swan_io_readSpecFile_s1d(filename):
'''
Reads SWAN 1D stationary cartesian coordinates output file
input: file name
Example:
from glob import glob
file_s1d = glob('*.s1d')
df = swan_io_readSpecFile_s1d(file_s1d[0])
author: Saulo Meirelles
email : [email protected]
revision: 0
'''
import pandas as pd
specs = dict()
kw = dict(columns=('Freq [Hz]',
'VaDens [m2/Hz]',
'CDir [deg]',
'Spreading [deg]',
'KReal [rad/m]',
'KImag [rad/m]'))
try:
f = open(filename, 'r')
fd = f.read().split('\n')
header = fd.pop(0)
header = fd.pop(0)
header = fd.pop(0)
header = fd.pop(0)
nloc = int((fd.pop(0).rstrip('\n').split())[0])
xlocs, ylocs = [], []
for k in range(nloc):
l = fd.pop(0).rstrip('\n').split()
xloc, yloc = float(l[0]), float(l[1])
xlocs.append(xloc)
ylocs.append(yloc)
linex = fd.pop(0)
nfreq = int((fd.pop(0).rstrip('\n').split())[0])
freqs = []
for k in range(nfreq):
l = fd.pop(0).rstrip('\n').split()
freq = float(l[0])
freqs.append(freq)
linex = fd.pop(0)
ncols = int((fd.pop(0).rstrip('\n').split())[0])
linex = fd.pop(0)
linex = fd.pop(0)
VaDensExec = float((fd.pop(0).rstrip('\n').split())[0])
linex = fd.pop(0)
linex = fd.pop(0)
CDirExec = float((fd.pop(0).rstrip('\n').split())[0])
linex = fd.pop(0)
linex = fd.pop(0)
DsprExec = float((fd.pop(0).rstrip('\n').split())[0])
linex = fd.pop(0)
linex = fd.pop(0)
KrealExec = float((fd.pop(0).rstrip('\n').split())[0])
linex = fd.pop(0)
linex = fd.pop(0)
KimagExec = float((fd.pop(0).rstrip('\n').split())[0])
cc = 0
while True:
lineloc = fd.pop(0).rstrip('\n').split()
if 'LOCATION' in lineloc:
speclocs = []
for k in range(nfreq):
l = fd.pop(0).rstrip('\n').split()
l.insert(0, freqs[k])
speclocs.append(map(float,l))
spec_dict = {range(nloc)[cc]: pd.DataFrame(speclocs, **kw)}
specs.update(spec_dict)
cc += 1
else:
break
finally:
f.close()
df = pd.concat(specs.values(),keys = specs.keys())
return df