This repository has been archived on 2025-05-05. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
internship/swash/processing/mat_npz.py

73 lines
2.2 KiB
Python

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"))
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)
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)
del raw_botl, botl
raw_watl = sio.loadmat(sws_out.joinpath("watl.mat"))
watl = np.asarray(
[raw_watl[i0][0] for i0 in np.char.add("Watlev_", i)], dtype=np.single
)
np.save(inp.joinpath("watl"), watl)
del raw_watl, watl
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)
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