DISPATCH
_aux.py
1
"""
2
Utility to read a single data/run/SSSSS/aux_PPPPP.dat file. Return
3
4
aux.filename ! filename
5
aux.version! ! aux file version
6
aux.vars ! dict with variable_names,variable_values
7
"""
8
from
scipy.io
import
FortranFile
9
import
numpy
as
np
10
import
os
11
12
def
to_str(ii):
13
s=
''
14
for
i
in
ii:
15
if
i != 32:
16
s+=str(chr(i))
17
return
s
18
19
class
aux
():
20
""" aux format file object """
21
def
__init__(self,id=1,io=0,run='',data='../data',file=None,verbose=0):
22
if
os.path.isfile(file):
23
self.
filename
=file
24
else
:
25
self.
filename
=data+
'/'
+run+
'/{:05d}/{:05d}.aux'
.format(io,id)
26
self.
verbose
=verbose
27
self.
_read
()
28
29
def
_read(self):
30
""" read an aux format file """
31
with FortranFile(self.
filename
,
'r') as ff:
32
self.version,self.
id
=ff.read_ints()
# version, id
33
if
self.
verbose
>0:
34
print(
'version {}'
.format(self.version))
35
print(
'patch: {}'
.format(self.
id
))
36
vars={}
37
while
True
:
38
try
:
39
ii=ff.read_record(
'b'
)
# name
40
name=to_str(ii)
41
if
self.
verbose
>1:
42
print(
' name:'
,name)
43
rnk=ff.read_ints()[0]
# shape
44
if
self.
verbose
>2:
45
print(
'rank:'
,rnk)
46
shp=ff.read_ints()
47
if
self.
verbose
>2:
48
print(
'shape:'
,shp)
49
rank=len(shp)
50
ii=ff.read_record(
'b'
)
# type
51
tpe=to_str(ii)
52
if
self.
verbose
>2:
53
print(
' type:'
,tpe)
54
if
tpe[0]==
'r':
55
v=ff.read_reals('<f4'
)
# value
56
else
:
57
v=ff.read_ints(
'<i4'
)
58
v=v.reshape(shp[-1::-1]).transpose()
59
if
self.
verbose
>3:
60
print(
' min: {}\n max: {}'
.format(v.min(),v.max()))
61
vars[name]={
'type'
:tpe,
'name'
:name,
'rank'
:rank,
'shape'
:shp,
'v'
:v}
62
except
:
63
break
64
self.
vars
=vars
65
66
def
var(self,k):
67
return
self.
vars
[k][
'v'
]
68
69
if
__name__==
'__main__'
:
70
with FortranFile(
'test.aux'
,
'w'
)
as
ff:
71
ff.write_record((1,3))
72
73
ff.write_record(
'test1'
)
74
shp=(2,3)
75
ff.write_record(shp)
76
ff.write_record(
'r3'
)
77
v=np.ones(shp,dtype=np.float32)
78
ff.write_record(v)
79
80
ff.write_record(
'test2'
)
81
shp=(2,4,5)
82
ff.write_record(shp)
83
ff.write_record(
'i3'
)
84
v=np.ones(shp,dtype=np.int32)
85
ff.write_record(v)
86
test=
aux
(
'test.aux'
,verbose=4)
dispatch._aux.aux.verbose
verbose
Definition:
_aux.py:26
dispatch._aux.aux.filename
filename
Definition:
_aux.py:23
dispatch._aux.aux.id
id
Definition:
_aux.py:32
dispatch._aux.aux
Definition:
_aux.py:19
dispatch._aux.aux._read
def _read(self)
Definition:
_aux.py:29
dispatch._aux.aux.vars
vars
Definition:
_aux.py:64
utilities
python
dispatch
_aux.py
Generated by
1.8.13