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)
def _read(self)
Definition: _aux.py:29