2022-04-07 10:49:17 +02:00
import argparse
import configparser
from datetime import datetime , time
import logging
import pathlib
import re
from multiprocessing . pool import ThreadPool
import numpy as np
import scipy . io as sio
parser = argparse . ArgumentParser ( description = " Convert swash output to numpy " )
parser . add_argument ( " -v " , " --verbose " , action = " count " , default = 0 )
parser . add_argument ( " -c " , " --config " , default = " config.ini " )
args = parser . parse_args ( )
logging . basicConfig ( level = max ( ( 10 , 20 - 10 * args . verbose ) ) )
log = logging . getLogger ( " sws_npz " )
log . info ( " Starting sws -> npz converter " )
config = configparser . ConfigParser ( )
config . read ( args . config )
sws_out = pathlib . Path ( config . get ( " swash " , " out " ) )
inp = pathlib . Path ( config . get ( " post " , " inp " ) )
inp . mkdir ( parents = True , exist_ok = True )
log . info ( f " Reading swash output from ' { sws_out } ' " )
raw_tsec = sio . loadmat ( sws_out . joinpath ( " tsec.mat " ) )
2022-04-07 11:50:49 +02:00
i = np . fromiter (
( k [ 5 : ] for k in raw_tsec . keys ( ) if re . compile ( r " ^Tsec_ " ) . match ( k ) ) , dtype = " U10 "
)
t = np . fromiter ( ( raw_tsec [ f " Tsec_ { k } " ] [ 0 , 0 ] * 10 * * 3 for k in i ) , dtype = np . uintc )
2022-04-07 10:49:17 +02:00
np . save ( inp . joinpath ( " t " ) , t )
del raw_tsec
raw_xp = sio . loadmat ( sws_out . joinpath ( " xp.mat " ) , variable_names = " Xp " )
x = raw_xp [ " Xp " ] [ 0 ]
np . save ( inp . joinpath ( " x " ) , x )
del raw_xp
raw_botl = sio . loadmat ( sws_out . joinpath ( " botl.mat " ) , variable_names = " Botlev " )
botl = raw_botl [ " Botlev " ] [ 0 ]
np . save ( inp . joinpath ( " botl " ) , botl )
2022-04-07 11:50:49 +02:00
del raw_botl , botl
2022-04-07 10:49:17 +02:00
raw_watl = sio . loadmat ( sws_out . joinpath ( " watl.mat " ) )
2022-04-07 11:50:49 +02:00
watl = np . asarray (
[ raw_watl [ i0 ] [ 0 ] for i0 in np . char . add ( " Watlev_ " , i ) ] , dtype = np . single
)
2022-04-07 10:49:17 +02:00
np . save ( inp . joinpath ( " watl " ) , watl )
2022-04-07 11:50:49 +02:00
del raw_watl , watl
2022-04-07 10:49:17 +02:00
raw_vel = sio . loadmat ( sws_out . joinpath ( " vel.mat " ) )
vel_x = np . asarray ( [ raw_vel [ i0 ] [ 0 ] for i0 in np . char . add ( " vel_x_ " , i ) ] , dtype = np . single )
np . save ( inp . joinpath ( " vel_x " ) , vel_x )
2022-04-07 11:50:49 +02:00
del raw_vel , vel_x
raw_zk = sio . loadmat ( sws_out . joinpath ( " zk.mat " ) )
n_zk = ( len ( raw_zk . keys ( ) ) - 3 ) / / t . size
zk = np . asarray (
[
raw_zk [ i0 ] [ 0 ]
for i0 in np . char . add (
np . char . replace ( " zki_ " , " i " , np . arange ( n_zk ) . astype ( " U1 " ) , count = 1 ) [
None , :
] ,
i [ : , None ] ,
) . reshape ( - 1 )
] ,
dtype = np . single ,
) . reshape ( ( t . size , n_zk , x . size ) )
np . save ( inp . joinpath ( " zk " ) , zk )
del raw_zk , zk