2022-03-15 10:11:21 +01:00
import subprocess
import tempfile
2022-03-02 14:25:53 +01:00
import numpy as np
2022-03-04 10:21:02 +01:00
class ReadSwash :
def __init__ ( self ) :
self . _n_x = None
self . _n_t = None
self . _t = None
self . _x = None
2022-03-15 10:26:25 +01:00
self . _data = { }
2022-03-04 10:21:02 +01:00
@classmethod
def read_nohead ( cls , path ) :
2022-03-15 10:21:09 +01:00
with tempfile . TemporaryFile ( ) as tmpfile :
with open ( path ) as file :
subprocess . run ( ( " tr " , " -d " , " \n " ) , stdin = file , stdout = tmpfile )
tmpfile . seek ( 0 )
2022-03-15 10:11:21 +01:00
return np . loadtxt ( tmpfile )
2022-03-04 10:21:02 +01:00
def read_time ( self , path ) :
self . _t = np . unique ( self . read_nohead ( path ) )
self . _n_t = self . _t . size
2022-03-15 10:11:21 +01:00
return self . t
2022-03-04 10:21:02 +01:00
def read_x ( self , path ) :
self . _x = np . unique ( self . read_nohead ( path ) )
self . _n_x = self . _x . size
2022-03-15 10:11:21 +01:00
return self . x
2022-03-04 10:21:02 +01:00
2022-03-04 10:43:45 +01:00
def read_scalar ( self , path , const = False ) :
if const :
2022-03-15 10:25:13 +01:00
self . _data [ path . stem ] = self . read_nohead ( path ) . reshape (
( self . _n_t , self . _n_x )
) [ 0 , : ]
return
self . _data [ path . stem ] = self . read_nohead ( path ) . reshape (
( self . _n_t , self . _n_x )
)
2022-03-04 10:21:02 +01:00
def read_vector ( self , path ) :
2022-03-15 10:25:13 +01:00
self . _data [ path . stem ] = self . read_nohead ( path ) . reshape (
( self . _n_t , 2 , self . _n_x )
)
2022-03-04 10:21:02 +01:00
def read_scalar_lay ( self , path ) :
2022-03-15 10:25:13 +01:00
self . _data [ path . stem ] = self . read_nohead ( path ) . reshape (
( self . _n_t , - 1 , self . _n_x )
)
2022-03-04 10:21:02 +01:00
def read_vector_lay ( self , path ) :
2022-03-15 10:25:13 +01:00
self . _data [ path . stem ] = self . read_nohead ( path ) . reshape (
( self . _n_t , 2 , - 1 , self . _n_x )
)
2022-03-04 10:21:02 +01:00
@property
def t ( self ) :
return self . _t
@property
def x ( self ) :
return self . _x
2022-03-15 10:25:13 +01:00
@property
def data ( self ) :
return self . _data