2022-05-03 11:53:58 +02:00
import argparse
import gzip
from itertools import starmap
import logging
from multiprocessing import pool
import pathlib
import pickle
from cycler import cycler
import matplotlib . pyplot as plt
import matplotlib . gridspec as gridspec
import numpy as np
from scipy import interpolate
from . olaflow import OFModel
parser = argparse . ArgumentParser ( description = " Post-process olaflow results " )
parser . add_argument ( " -v " , " --verbose " , action = " count " , default = 0 )
parser . add_argument (
" -o " ,
" --output " ,
action = " append " ,
type = pathlib . Path ,
help = " Post-processing directory " ,
required = True ,
)
2022-05-06 11:14:05 +02:00
parser . add_argument (
" -t " ,
" --timestep " ,
type = float ,
help = " Time-step to compare " ,
)
parser . add_argument (
" -f " ,
" --func " ,
type = str ,
help = " Post-process function to compare " ,
default = " graphUniform " ,
)
2022-05-03 11:53:58 +02:00
args = parser . parse_args ( )
logging . basicConfig ( level = max ( ( 10 , 20 - 10 * args . verbose ) ) )
log = logging . getLogger ( " ola_post " )
log . info ( " Plotting comparison of model output " )
def get_pickle ( out ) :
with (
path . open ( " rb " )
if ( path := out . joinpath ( " pickle " ) ) . exists ( )
else gzip . open ( path . with_suffix ( " .gz " ) , " rb " )
) as f :
return pickle . load ( f )
models = list ( map ( get_pickle , args . output ) )
2022-05-06 11:43:58 +02:00
fig , ax = plt . subplots ( len ( models ) , figsize = ( 6 , 1.5 * len ( models ) ) , dpi = 100 , constrained_layout = True )
2022-05-06 11:14:05 +02:00
if args . timestep is None :
for i , ( _ax , _model ) in enumerate ( zip ( ax , models ) ) :
_ax . contour (
_model . t ,
_model . post_fields [ args . func ] [ " x_alpha.water " ] ,
_model . post_fields [ args . func ] [ " alpha.water " ] . T ,
( 0.5 , ) ,
colors = " k " ,
)
_ax . set ( xlabel = " t (s) " , ylabel = " z (m) " , title = f " Case { i } " )
_ax . grid ( )
fig . savefig (
args . output [ 0 ] . joinpath (
f " diff_ { args . func } _ { ' _ ' . join ( [ o . name for o in args . output ] ) } .pdf "
)
2022-05-03 11:53:58 +02:00
)
2022-05-06 11:14:05 +02:00
else :
for i , ( _ax , _model ) in enumerate ( zip ( ax , models ) ) :
_ax . tricontour (
_model . x ,
_model . z ,
_model . fields [ " alpha.water " ] [ np . where ( _model . t == args . timestep ) [ 0 ] ] [ 0 ] ,
levels = ( 0.5 , ) ,
colors = " k " ,
)
2022-05-03 11:53:58 +02:00
2022-05-06 11:14:05 +02:00
_ax . set ( xlabel = " x (m) " , ylabel = " z (m) " , title = f " Case { i } " )
_ax . grid ( )
2022-05-03 11:53:58 +02:00
2022-05-06 11:14:05 +02:00
fig . savefig (
args . output [ 0 ] . joinpath (
f " diff_t { args . timestep } _ { ' _ ' . join ( [ o . name for o in args . output ] ) } .pdf "
)
)