2022-03-15 13:34:15 +01:00
import argparse
import configparser
import logging
import pathlib
import matplotlib . animation as animation
2022-03-16 07:50:44 +01:00
import matplotlib . pyplot as plt
2022-03-15 13:34:15 +01:00
import numpy as np
parser = argparse . ArgumentParser ( description = " Animate swash output " )
parser . add_argument ( " -v " , " --verbose " , action = " count " , default = 0 )
2022-03-29 09:38:11 +02:00
parser . add_argument ( " -c " , " --config " , default = " config.ini " )
2022-03-15 13:34:15 +01:00
args = parser . parse_args ( )
logging . basicConfig ( level = max ( ( 10 , 20 - 10 * args . verbose ) ) )
log = logging . getLogger ( " post " )
log . info ( " Starting post-processing " )
config = configparser . ConfigParser ( )
2022-03-29 09:38:11 +02:00
config . read ( args . config )
2022-03-15 13:34:15 +01:00
inp = pathlib . Path ( config . get ( " post " , " inp " ) )
root = pathlib . Path ( config . get ( " swash " , " out " ) )
2022-03-29 10:48:46 +02:00
out = pathlib . Path ( config . get ( " post " , " out " ) )
2022-03-29 15:34:26 +02:00
out . mkdir ( parents = True , exist_ok = True )
2022-03-15 13:34:15 +01:00
2022-03-29 09:47:45 +02:00
2022-03-15 13:34:15 +01:00
def data ( var ) :
return np . load ( inp . joinpath ( f " { var } .npy " ) )
x = data ( " xp " )
t = data ( " tsec " )
watl = data ( " watl " )
botl = data ( " botl " )
zk = data ( " zk " )
velk = data ( " velk " )
2022-03-16 07:50:44 +01:00
vz = data ( " vz " )
2022-03-15 13:34:15 +01:00
wl = np . maximum ( watl , - botl )
# print(x.size, -np.arange(0, 1 * bathy.hstru.size, 1)[::-1].size)
fig , ax = plt . subplots ( )
2022-03-16 07:50:44 +01:00
# ax.plot(x, -botl, c="k")
2022-03-15 13:34:15 +01:00
# ax.fill_between(
# x, -botl, -data["botl"] + bathy.hstru, color="k", alpha=0.2
# )
2022-03-16 07:50:44 +01:00
n = 0
vk = np . sqrt ( ( velk [ n ] * * 2 ) . sum ( axis = 1 ) )
# print(vk.shape)
# plt.imshow(vk)
# plt.colorbar()
lines = ax . plot ( x , zk [ n ] . T , c = " #0066cc " )
quiv = [ ]
2022-03-30 12:16:19 +02:00
for i in range ( len ( lines ) - 1 ) :
2022-03-16 07:50:44 +01:00
quiv . append (
ax . quiver (
x [ : : 50 ] ,
( zk [ n , i , : : 50 ] + zk [ n , i + 1 , : : 50 ] ) / 2 ,
velk [ n , i , 0 , : : 50 ] ,
vz [ n , i , : : 50 ] ,
units = " dots " ,
width = 2 ,
scale = 0.05 ,
)
)
ax . autoscale ( True , " w " , True )
ax . set_ylim ( top = 15 )
def animate ( k ) :
for i , q in enumerate ( quiv ) :
q . set_UVC (
velk [ k , i , 0 , : : 50 ] ,
vz [ k , i , : : 50 ] ,
)
for i , l in enumerate ( lines ) :
l . set_ydata ( zk [ k , i ] )
2022-03-17 11:57:29 +01:00
return * quiv , * lines
2022-03-16 07:50:44 +01:00
ani = animation . FuncAnimation (
fig , animate , frames = wl [ : , 0 ] . size , interval = 20 , blit = True
)
2022-03-15 13:34:15 +01:00
2022-03-30 12:16:19 +02:00
ani . save ( out . joinpath ( " layers.mp4 " ) )