New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 13719 for NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests – NEMO

Ignore:
Timestamp:
2020-11-03T12:02:23+01:00 (4 years ago)
Author:
laurent
Message:

Keep up with trunk r13718 + figure generation for STATION_ASF (ocean & ice).

Location:
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF
Files:
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/launch_sasf.sh

    r13690 r13719  
    1515 
    1616# Atmo + SSX forcing to use and sea-ice support? 
    17 #     => NFORC: name of forcing 
     17#     => FORCING: name of forcing 
    1818#     => i_sea_ice: whether to compute fluxes over sea-ice as well 
    1919#     => SFORC: string sufficient to copy relevant files as in "*${SFORC}*.nc" 
    20 #NFORC="PAPA"         ; i_sea_ice=0 ; SFORC="Station_PAPA_50N-145W" 
    21 #NFORC="ERA5_arctic" ; i_sea_ice=1 ; SFORC="ERA5_arctic_surface_81N_36p75E_1h" ; # "ERA5_arctic" WITH ice/air flux computation 
    22 NFORC="ERA5_arctic" ; i_sea_ice=0 ; SFORC="ERA5_arctic_surface_81N_36p75E_1h" ; # "ERA5_arctic" WITHOUT ice/air flux computation 
     20#FORCING="PAPA"         ; i_sea_ice=0 ; SFORC="Station_PAPA_50N-145W" 
     21FORCING="ERA5_arctic" ; i_sea_ice=1 ; SFORC="ERA5_arctic_surface_81N_36p75E_1h" ; # "ERA5_arctic" WITH ice/air flux computation 
     22#FORCING="ERA5_arctic" ; i_sea_ice=0 ; SFORC="ERA5_arctic_surface_81N_36p75E_1h" ; # "ERA5_arctic" WITHOUT ice/air flux computation 
    2323 
    2424 
     
    8181    LIST_OA_ALGOS="ECMWF" ;          # list of air-sea algorithms to test 
    8282    LIST_IA_ALGOS="LG15 LU12 CSTC" ; # list of air-ice algorithms to test 
    83     DIR_NL=${NFORC}/oce+ice ; # where to fetch the namelists from... 
     83    DIR_NL=${FORCING}/oce+ice ; # where to fetch the namelists from... 
    8484else 
    8585    # Only OPEN-OCEAN/AIR flux computation 
    8686    LIST_OA_ALGOS="NCAR ECMWF COARE3p6 ANDREAS"; # list of air-sea algorithms to test 
    8787    LIST_IA_ALGOS="" 
    88     DIR_NL=${NFORC}/oce ; # where to fetch the namelists from... 
    89 fi 
    90 if [ ! -d ${DIR_NL} ]; then echo " Mhhh, seems like forcing ${NFORC} is not meant to be used with sea-ice/air flux computation !"; exit; fi 
     88    DIR_NL=${FORCING}/oce ; # where to fetch the namelists from... 
     89fi 
     90if [ ! -d ${DIR_NL} ]; then echo " Mhhh, seems like forcing ${FORCING} is not meant to be used with sea-ice/air flux computation !"; exit; fi 
    9191 
    9292 
     
    176176        echo ; echo 
    177177        echo "=======================================================================" 
    178         echo " Going for experiment: ${CASE} bulk param. with ${NFORC} forcing " 
     178        echo " Going for experiment: ${CASE} bulk param. with ${FORCING} forcing " 
    179179        echo "=======================================================================" 
    180180        echo 
     
    205205        # Moving output files: 
    206206        mkdir -p output 
    207         mv -f ${CONFIG}-${CASE}_${NFORC}_*_grid*.nc output/ 
    208         if [ ${i_sea_ice} -eq 1 ]; then mv -f ${CONFIG}-${CASE}_${NFORC}_*_icemod.nc output/; fi 
     207        mv -f ${CONFIG}-${CASE}_${FORCING}_*_grid*.nc output/ 
     208        if [ ${i_sea_ice} -eq 1 ]; then mv -f ${CONFIG}-${CASE}_${FORCING}_*_icemod.nc output/; fi 
    209209 
    210210        # Saving logs: 
    211         mkdir -p ${CASE}_${NFORC}_log 
    212         mv -f *.out *.err ocean.output output.namelist.dyn ${CASE}_${NFORC}_log/ 
     211        mkdir -p ${CASE}_${FORCING}_log 
     212        mv -f *.out *.err ocean.output output.namelist.dyn ${CASE}_${FORCING}_log/ 
    213213 
    214214        # Making 3x3 to 1 ! 
    215215        cd output/ 
    216         list=`\ls ${CONFIG}*${CASE}_${NFORC}_*.nc | grep -v '_restart_'| grep -v '_1p.nc'` 
     216        list=`\ls ${CONFIG}*${CASE}_${FORCING}_*.nc | grep -v '_restart_'| grep -v '_1p.nc'` 
    217217        for ff in ${list}; do 
    218218            echo 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/plot_station_asf_ICE.py

    r13718 r13719  
    1010import sys 
    1111from os import path as path 
    12 import math 
     12import argparse as ap 
     13from math import floor, ceil, copysign, log 
    1314import numpy as nmp 
    1415from netCDF4 import Dataset,num2date 
     
    1819import matplotlib.dates as mdates 
    1920 
    20 CONFIG='STATION_ASF' 
    21  
    22 cforcing = 'PAPA' ; # name of forcing ('PAPA', 'ERA5_arctic', etc...) 
    23  
    24 # (files are: output/3x3/'+CONFIG+'-'+algo+'_1h_'+year+'0101_'+year+'1231_gridT_'+cforcing+'.nc' ) 
    25 cstation = 'ERA5 81N, 36.75E' 
    26  
    27 cy1     = '2018' ; # First year 
    28 cy2     = '2018' ; # Last year 
    29  
    30 jt0 = 0 
    31  
    3221dir_figs='.' 
    33 size_fig=(13,8) 
     22size_fig=(13,8.5) 
    3423size_fig0=(12,10) 
    35 fig_ext='png' 
    3624 
    3725clr_red = '#AD0000' 
    38 clr_sat = '#ffed00' 
    3926clr_mod = '#008ab8' 
    4027 
    4128rDPI=100. 
    4229 
    43 L_ALGOS = [ 'ECMWF-LG15', 'ECMWF-LU12', 'ECMWF-CSTC' ] 
    44 l_color = [  '#ffed00'  , '#008ab8'   ,     '0.4'    ] ; # colors to differentiate algos on the plot 
    45 l_width = [     3       ,      2      ,       1      ] ; # line-width to differentiate algos on the plot 
    46 l_style = [    '-'      ,     '-'     ,      '--'    ] ; # line-style 
    47  
    48  
    49 # Variables to compare for A GIVEN algorithm 
    50 ############################################### 
    51 #L_VNEM0 = [  
    52  
    53  
     30L_ALGOS = [ 'ECMWF-CSTC', 'ECMWF-LG15', 'ECMWF-LU12' ] 
     31l_color = [     '0.4'   ,  '#ffed00'  , '#008ab8'    ] ; # colors to differentiate algos on the plot 
     32l_width = [       3     ,     3       ,      2       ] ; # line-width to differentiate algos on the plot 
     33l_style = [      '--'   ,    '-'      ,     '-'      ] ; # line-style 
     34 
     35nb_algos = len(L_ALGOS) ; print(nb_algos) 
    5436 
    5537# Variables to compare between algorithms 
     
    5941L_VARL = [ r'$C_{D}$', r'$C_{E}$', r'$Q_{lat}$', r'$Q_{sens}$' , r'$Q_{net}$' , r'$Q_{lw}$' , r'$Q_{sw}$' , r'$|\tau|$' ] 
    6042L_VUNT = [     ''    ,     ''    , r'$W/m^2$'  , r'$W/m^2$'    , r'$W/m^2$'   , r'$W/m^2$'  , r'$W/m^2$'  , r'$N/m^2$'  ] 
    61 L_VMAX = [    0.003  ,    0.003  ,     75.     ,     75.       ,    800.      ,    200.     ,    200.     ,    1.2      ] 
    62 L_VMIN = [    0.     ,    0.     ,   -250.     ,   -125.       ,   -400.      ,   -200.     ,      0.     ,    0.       ] 
     43L_BASE = [    0.0005 ,    0.0005 ,      5.     ,     5.        ,     5.       ,    5.       ,     5.      ,    0.05     ] 
     44L_PREC = [     3     ,     3     ,      0     ,      0        ,      0      ,      0        ,     0       ,     2       ] 
    6345L_ANOM = [   False   ,   False   ,   True      ,    True       ,    True      ,    True     ,    True     ,   True      ] 
    6446 
    6547 
    66 nb_algos = len(L_ALGOS) 
    67  
    68 # Getting arguments: 
    69 narg = len(sys.argv) 
    70 if narg != 2: 
    71     print('Usage: '+sys.argv[0]+' <DIR_OUT_SASF>'); sys.exit(0) 
    72 cdir_data = sys.argv[1] 
     48 
     49################## ARGUMENT PARSING / USAGE ################################################################################################ 
     50parser = ap.ArgumentParser(description='Generate pixel maps of a given scalar.') 
     51# 
     52requiredNamed = parser.add_argument_group('required arguments') 
     53requiredNamed.add_argument('-d', '--dirout' , required=True,                 help='Path to (production) directory where STATION_ASF was run') 
     54requiredNamed.add_argument('-f', '--forcing', required=True, default="PAPA", help='Name of forcing (ex: PAPA, ERA5_arctic') 
     55# 
     56parser.add_argument('-C', '--conf',   default="STATION_ASF",  help='specify NEMO config (ex: STATION_ASF)') 
     57parser.add_argument('-s', '--ystart', default="2018",         help='specify first year of experiment (ex: 2018)') 
     58parser.add_argument('-e', '--yend',   default="2018",         help='specify last  year of experiment (ex: 2018)') 
     59# 
     60parser.add_argument('-t', '--itype',   default="png",         help='specify the type of image you want to create (ex: png, svg, etc.)') 
     61#parser.add_argument('-l', '--lev' , type=int, default=0,    help='specify the level to use if 3D field (default: 0 => 2D)') 
     62#parser.add_argument('-I', '--ice' , action='store_true',    help='draw sea-ice concentration layer onto the field') 
     63# 
     64args = parser.parse_args() 
     65# 
     66cdir_data = args.dirout 
     67cforcing  = args.forcing 
     68# 
     69CONF      = args.conf 
     70cy1       = args.ystart 
     71cy2       = args.yend 
     72# 
     73fig_ext   = args.itype 
     74#jk    = args.lev 
     75#lshow_ice = args.ice 
     76# 
     77#print(''); print(' *** cdir_data = ', cdir_data); print(' *** cforcing  = ', cforcing) 
     78#print(' *** CONF = ', CONF); print(' *** cy1 = ', cy1); print(' *** cy2 = ', cy2) 
     79############################################################################################################################################### 
    7380 
    7481 
     
    8390cf_in = [] 
    8491for ja in range(nb_algos): 
    85     cfi = cdir_data+'/output/3x3/'+CONFIG+'-'+L_ALGOS[ja]+'_1h_'+cy1+'0101_'+cy2+'1231_icemod_'+cforcing+'.nc' 
     92    cfi = cdir_data+'/output/'+CONF+'-'+L_ALGOS[ja]+'_'+cforcing+'_1h_'+cy1+'0101_'+cy2+'1231_icemod.nc' 
    8693    chck4f(cfi) 
    8794    cf_in.append(cfi) 
     
    9097#----------------------------------------------------------------- 
    9198 
     99 
     100def round_bounds( x1, x2,  base=5, prec=3 ): 
     101    rmin =  base * round( floor(float(x1)/base), prec ) 
     102    rmax =  base * round(  ceil(float(x2)/base), prec ) 
     103    return rmin, rmax 
     104 
     105 
    92106# Getting time array from the first file: 
    93107id_in = Dataset(cf_in[0]) 
    94 vt = id_in.variables['time_counter'][jt0:] 
     108vt = id_in.variables['time_counter'][:] 
    95109cunit_t = id_in.variables['time_counter'].units ; print(' "time_counter" is in "'+cunit_t+'"') 
    96110id_in.close() 
    97111Nt = len(vt) 
    98112 
    99 vtime = num2date(vt, units=cunit_t) ; # something understandable! 
     113vtime = num2date(vt, units=cunit_t) ; # something human! 
    100114vtime = vtime.astype(dtype='datetime64[D]') 
    101115 
     
    131145        # 
    132146        id_in = Dataset(cf_in[ja]) 
    133         xF[:,ja] = id_in.variables[L_VNEM[jv]][jt0:,1,1] # only the center point of the 3x3 spatial domain! 
     147        xF[:,ja] = id_in.variables[L_VNEM[jv]][:,1,1] # only the center point of the 3x3 spatial domain! 
    134148        if ja == 0: cvar_lnm = id_in.variables[L_VNEM[jv]].long_name 
    135149        id_in.close() 
    136150 
     151    idx_okay = nmp.where( nmp.abs(xF) < 1.e+10 ) 
     152 
    137153    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    138154    fig = plt.figure(num = jv, figsize=size_fig, facecolor='w', edgecolor='k') 
    139     ax1 = plt.axes([0.08, 0.25, 0.9, 0.7]) 
     155    ax1 = plt.axes([0.083, 0.23, 0.9, 0.7]) 
    140156    ax1.set_xticks(vtime[::xticks_d]) 
    141157    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S')) 
     
    143159 
    144160    for ja in range(nb_algos): 
    145         plt.plot(vtime, xF[:,ja], '-', color=l_color[ja], linestyle=l_style[ja], linewidth=l_width[ja], label=L_ALGOS[ja], zorder=10+ja) 
    146  
    147     ax1.set_ylim(L_VMIN[jv], L_VMAX[jv]) ; ax1.set_xlim(vtime[0],vtime[Nt-1]) 
     161        fplot = nmp.ma.masked_where( xF[:,ja]==0., xF[:,ja] ) 
     162        plt.plot(vtime, fplot, '-', color=l_color[ja], \ 
     163                 linestyle=l_style[ja], linewidth=l_width[ja], label=L_ALGOS[ja], zorder=10+ja) 
     164 
     165    fmin, fmax = round_bounds( nmp.min(xF[idx_okay]) , nmp.max(xF[idx_okay]), base=L_BASE[jv], prec=L_PREC[jv]) 
     166    ax1.set_ylim(fmin, fmax) ; ax1.set_xlim(vtime[0],vtime[Nt-1]) 
    148167    plt.ylabel(L_VARL[jv]+' ['+L_VUNT[jv]+']') 
    149168 
    150169    ax1.grid(color='k', linestyle='-', linewidth=0.3) 
    151170    plt.legend(loc='best', ncol=1, shadow=True, fancybox=True) 
    152     ax1.annotate(cvar_lnm+', station: '+cstation, xy=(0.3, 1.), xycoords='axes fraction',  bbox={'facecolor':'w', 'alpha':1., 'pad':10}, zorder=50, **font_inf) 
    153     plt.savefig(L_VARO[jv]+'.'+fig_ext, dpi=int(rDPI), transparent=False) 
     171    ax1.annotate(cvar_lnm+', station: '+cforcing, xy=(0.5, 1.04), xycoords='axes fraction', \ 
     172                 ha='center', bbox={'facecolor':'w', 'alpha':1., 'pad':10}, \ 
     173                 zorder=50, **font_inf) 
     174    plt.savefig(L_VARO[jv]+'_'+cforcing+'.'+fig_ext, dpi=int(rDPI), transparent=False) 
    154175    plt.close(jv) 
    155176    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     177 
     178 
     179 
    156180 
    157181    def symetric_range( pmin, pmax ): 
     
    164188        return frng 
    165189 
    166      
    167190 
    168191    if L_ANOM[jv]: 
     
    180203            #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    181204            fig = plt.figure(num = 10+jv, figsize=size_fig, facecolor='w', edgecolor='k') 
    182             ax1 = plt.axes([0.08, 0.25, 0.9, 0.7]) 
     205            ax1 = plt.axes([0.083, 0.23, 0.9, 0.7]) 
    183206            ax1.set_xticks(vtime[::xticks_d]) 
    184207            ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S')) 
     
    186209 
    187210            for ja in range(nb_algos): 
    188                 plt.plot(vtime, xFa[:,ja], '-', color=l_color[ja], linewidth=l_width[ja], label=L_ALGOS[ja], zorder=10+ja) 
     211                fplot = nmp.ma.masked_where( xF[:,ja]==0., xF[:,ja] ) 
     212                plt.plot(vtime, fplot, '-', color=l_color[ja], linewidth=l_width[ja], \ 
     213                         label=L_ALGOS[ja], zorder=10+ja) 
    189214 
    190215            ax1.set_ylim(-yrng,yrng) ; ax1.set_xlim(vtime[0],vtime[Nt-1]) 
     
    192217            ax1.grid(color='k', linestyle='-', linewidth=0.3) 
    193218            plt.legend(bbox_to_anchor=(0.45, 0.2), ncol=1, shadow=True, fancybox=True) 
    194             ax1.annotate('Anomaly of '+cvar_lnm, xy=(0.3, 0.97), xycoords='axes fraction',  bbox={'facecolor':'w', 'alpha':1., 'pad':10}, zorder=50, **font_inf) 
     219            ax1.annotate('Anomaly of '+cvar_lnm+', station: '+cforcing, xy=(0.5, 1.04), xycoords='axes fraction', \ 
     220                         ha='center', bbox={'facecolor':'w', 'alpha':1., 'pad':10}, \ 
     221                         zorder=50, **font_inf) 
    195222            plt.savefig(L_VARO[jv]+'_anomaly.'+fig_ext, dpi=int(rDPI), transparent=False) 
    196223            plt.close(10+jv) 
    197224            #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    198  
    199  
    200  
    201  
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/plot_station_asf_OCE.py

    r13691 r13719  
    3333l_style = [ '-'       ,    '-'     ,   '-'     , '--'   ] ; # line-style 
    3434 
     35nb_algos = len(L_ALGOS) ; print(nb_algos) 
    3536 
    3637# Variables to compare between algorithms 
    3738############################################ 
    38 L_VNEM  = [   'Cd_oce'  ,   'Ce_oce'  ,   'qla_oce' , 'qsb_oce'     ,     'qt_oce' ,   'qlw_oce' ,  'taum'     ,    'dt_skin'         ] 
    39 L_VARO  = [     'Cd'    ,     'Ce'    ,   'Qlat'    ,    'Qsen'     ,     'Qnet'   ,   'Qlw'     ,  'Tau'      ,    'dT_skin'         ] ; # name of variable on figure 
    40 L_VARL  = [ r'$C_{D}$'  , r'$C_{E}$'  , r'$Q_{lat}$', r'$Q_{sens}$' , r'$Q_{net}$' , r'$Q_{lw}$' , r'$|\tau|$' , r'$\Delta T_{skin}$' ] ; # name of variable in latex mode 
    41 L_VUNT  = [     ''      ,     ''      , r'$W/m^2$'  , r'$W/m^2$'    , r'$W/m^2$'   , r'$W/m^2$'  , r'$N/m^2$'  ,      'K'             ] 
    42 L_BASE  = [    0.005    ,    0.005    ,      5.     ,      5.       ,       5      ,      5.     ,    0.05      ,       0.05           ] 
    43 L_PREC  = [      3      ,      3      ,      0      ,      0        ,       0      ,      0      ,     2       ,        3             ] 
    44 L_ANOM  = [   False     ,   False     ,   True      ,    True       ,    True      ,    True     ,   True      ,      False           ] 
    45  
    46  
    47 nb_algos = len(L_ALGOS) ; print(nb_algos) 
    48  
     39L_VNEM = [   'Cd_oce'  ,   'Ce_oce'  ,   'qla_oce' , 'qsb_oce'     ,     'qt_oce' ,   'qlw_oce' ,  'taum'     ,    'dt_skin'         ] 
     40L_VARO = [     'Cd'    ,     'Ce'    ,   'Qlat'    ,    'Qsen'     ,     'Qnet'   ,   'Qlw'     ,  'Tau'      ,    'dT_skin'         ] ; # name of variable on figure 
     41L_VARL = [ r'$C_{D}$'  , r'$C_{E}$'  , r'$Q_{lat}$', r'$Q_{sens}$' , r'$Q_{net}$' , r'$Q_{lw}$' , r'$|\tau|$' , r'$\Delta T_{skin}$' ] ; # name of variable in latex mode 
     42L_VUNT = [     ''      ,     ''      , r'$W/m^2$'  , r'$W/m^2$'    , r'$W/m^2$'   , r'$W/m^2$'  , r'$N/m^2$'  ,      'K'             ] 
     43L_BASE = [    0.005    ,    0.005    ,      5.     ,      5.       ,       5      ,      5.     ,    0.05      ,       0.05           ] 
     44L_PREC = [      3      ,      3      ,      0      ,      0        ,       0      ,      0      ,     2       ,        3             ] 
     45L_ANOM = [   False     ,   False     ,   True      ,    True       ,    True      ,    True     ,   True      ,      False           ] 
    4946 
    5047 
     
    9188    if not path.exists(cf): print(cmesg) ; sys.exit(0) 
    9289 
    93 ###cf_in = nmp.empty((), dtype="S10") 
    9490cf_in = [] 
    9591for ja in range(nb_algos): 
     
    108104 
    109105 
    110  
    111106# Getting time array from the first file: 
    112107id_in = Dataset(cf_in[0]) 
     
    114109cunit_t = id_in.variables['time_counter'].units ; print(' "time_counter" is in "'+cunit_t+'"') 
    115110id_in.close() 
    116 nbr = len(vt) 
    117  
    118 vtime = num2date(vt, units=cunit_t) ; # something understandable!                                                                  
     111Nt = len(vt) 
     112 
     113vtime = num2date(vt, units=cunit_t) ; # something human! 
    119114vtime = vtime.astype(dtype='datetime64[D]') 
    120115 
    121 ii=nbr/300 
     116ii=Nt/300 
    122117ib=max(ii-ii%10,1) 
    123118xticks_d=int(30*ib) 
    124  
    125119 
    126120rat = 100./float(rDPI) 
     
    140134 
    141135 
    142 # First for each algorithm we compare some input vs out put variables:                                                                        
     136# First for each algorithm we compare some input vs out put variables: 
    143137 
    144138# t_skin 
     
    150144ntemp = len(vtemp_in) 
    151145 
    152 xxx = nmp.zeros((nbr,ntemp)) 
     146xxx = nmp.zeros((Nt,ntemp)) 
    153147 
    154148for ja in range(nb_algos): 
     
    171165    idx_okay = nmp.where( nmp.abs(xxx) < 1.e+10 ) 
    172166    fmin, fmax = round_bounds( nmp.min(xxx[idx_okay]) , nmp.max(xxx[idx_okay]), base=5, prec=0 ) 
    173     ax1.set_ylim(fmin, fmax) ; ax1.set_xlim(vtime[0],vtime[nbr-1]) 
     167    ax1.set_ylim(fmin, fmax) ; ax1.set_xlim(vtime[0],vtime[Nt-1]) 
    174168    plt.ylabel(r'Temperature [$^{\circ}$C]') 
    175169 
     
    189183nb_var = len(L_VNEM) 
    190184 
    191 xF  = nmp.zeros((nbr,nb_algos)) 
    192 xFa = nmp.zeros((nbr,nb_algos)) 
     185xF  = nmp.zeros((Nt,nb_algos)) 
     186xFa = nmp.zeros((Nt,nb_algos)) 
    193187 
    194188 
     
    204198 
    205199    idx_okay = nmp.where( nmp.abs(xF) < 1.e+10 ) 
    206          
     200 
     201    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    207202    fig = plt.figure(num = jv, figsize=size_fig, facecolor='w', edgecolor='k') 
    208     ax1 = plt.axes([0.08, 0.23, 0.9, 0.7]) 
     203    ax1 = plt.axes([0.083, 0.23, 0.9, 0.7]) 
    209204    ax1.set_xticks(vtime[::xticks_d]) 
    210205    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S')) 
     
    212207 
    213208    for ja in range(nb_algos): 
    214         plt.plot(vtime, xF[:,ja], '-', color=l_color[ja], linestyle=l_style[ja], linewidth=l_width[ja], label=L_ALGOS[ja], zorder=10+ja) 
    215          
     209        fplot = nmp.ma.masked_where( xF[:,ja]==0., xF[:,ja] ) 
     210        plt.plot(vtime, fplot, '-', color=l_color[ja], \ 
     211                 linestyle=l_style[ja], linewidth=l_width[ja], label=L_ALGOS[ja], zorder=10+ja) 
     212 
    216213    fmin, fmax = round_bounds( nmp.min(xF[idx_okay]) , nmp.max(xF[idx_okay]), base=L_BASE[jv], prec=L_PREC[jv]) 
    217     #print("LOLO: fmin, fmax =",nmp.min(xF[idx_okay]), nmp.max(xF[idx_okay]) ); print("LOLO: fmin, fmax =",fmin, fmax) ; #sys.exit(0) 
    218      
    219     ax1.set_ylim(fmin, fmax) ; ax1.set_xlim(vtime[0],vtime[nbr-1]) 
     214    ax1.set_ylim(fmin, fmax) ; ax1.set_xlim(vtime[0],vtime[Nt-1]) 
    220215    plt.ylabel(L_VARL[jv]+' ['+L_VUNT[jv]+']') 
    221216 
    222217    ax1.grid(color='k', linestyle='-', linewidth=0.3) 
    223218    plt.legend(loc='best', ncol=1, shadow=True, fancybox=True) 
    224     ax1.annotate(cvar_lnm+', station: '+cforcing, xy=(0.5, 1.04), xycoords='axes fraction', ha='center',  bbox={'facecolor':'w', 'alpha':1., 'pad':10}, \ 
     219    ax1.annotate(cvar_lnm+', station: '+cforcing, xy=(0.5, 1.04), xycoords='axes fraction', \ 
     220                 ha='center', bbox={'facecolor':'w', 'alpha':1., 'pad':10}, \ 
    225221                 zorder=50, **font_inf) 
    226222    plt.savefig(L_VARO[jv]+'_'+cforcing+'.'+fig_ext, dpi=int(rDPI), transparent=False) 
    227223    plt.close(jv) 
     224    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     225 
     226 
     227 
     228 
     229    def symetric_range( pmin, pmax ): 
     230        # Returns a symetric f-range that makes sense for the anomaly of "f" we're looking at... 
     231        from math import floor, copysign, log, ceil 
     232        zmax = max( abs(pmax) , abs(pmin) ) 
     233        romagn = floor(log(zmax, 10)) ; # order of magnitude of the anomaly  we're dealing with 
     234        rmlt = 10.**(int(romagn)) / 2. 
     235        frng = copysign( ceil(abs(zmax)/rmlt)*rmlt , zmax) 
     236        return frng 
     237 
    228238 
    229239    if L_ANOM[jv]: 
     
    231241        for ja in range(nb_algos): xFa[:,ja] = xF[:,ja] - nmp.mean(xF,axis=1) 
    232242 
    233         if nmp.sum(xFa[:,:]) == 0.0: 
     243        if nmp.sum(nmp.abs(xFa[:,:])) == 0.0: 
    234244            print('     Well! Seems that for variable '+L_VARO[jv]+', choice of algo has no impact a all!') 
    235245            print('          ==> skipping anomaly plot...') 
     
    237247        else: 
    238248 
    239             # Want a symetric y-range that makes sense for the anomaly we're looking at: 
    240             rmax = nmp.max(xFa) ; rmin = nmp.min(xFa) 
    241             rmax = max( abs(rmax) , abs(rmin) ) 
    242             romagn = floor(log(rmax, 10)) ; # order of magnitude of the anomaly  we're dealing with 
    243             rmlt = 10.**(int(romagn)) / 2. 
    244             yrng = copysign( ceil(abs(rmax)/rmlt)*rmlt , rmax) 
    245  
     249            yrng = symetric_range( nmp.min(xFa) , nmp.max(xFa) ) 
     250 
     251            #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    246252            fig = plt.figure(num = 10+jv, figsize=size_fig, facecolor='w', edgecolor='k') 
    247             ax1 = plt.axes([0.08, 0.25, 0.9, 0.7]) 
     253            ax1 = plt.axes([0.09, 0.25, 0.9, 0.7]) 
    248254            ax1.set_xticks(vtime[::xticks_d]) 
    249255            ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S')) 
     
    253259                plt.plot(vtime, xFa[:,ja], '-', color=l_color[ja], linewidth=l_width[ja], label=L_ALGOS[ja], zorder=10+ja) 
    254260 
    255             ax1.set_ylim(-yrng,yrng) ; ax1.set_xlim(vtime[0],vtime[nbr-1]) 
     261            ax1.set_ylim(-yrng,yrng) ; ax1.set_xlim(vtime[0],vtime[Nt-1]) 
    256262            plt.ylabel(L_VARL[jv]+' ['+L_VUNT[jv]+']') 
    257263            ax1.grid(color='k', linestyle='-', linewidth=0.3) 
     
    260266            plt.savefig(L_VARO[jv]+'_'+cforcing+'.'+fig_ext, dpi=int(rDPI), transparent=False) 
    261267            plt.close(10+jv) 
    262  
    263  
    264  
    265  
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/sbcblk_sanity_check.sh

    r13690 r13719  
    2525 
    2626# Atmo + SSX forcing to use and sea-ice support? 
    27 NFORC="IDEALIZED" ; i_sea_ice=0 ; SFORC="input_output_VALIDATION_IDEALIZED.nc" 
     27FORCING="IDEALIZED" ; i_sea_ice=0 ; SFORC="input_output_VALIDATION_IDEALIZED.nc" 
    2828 
    2929 
     
    8686 
    8787 
    88 DIR_NL=${NFORC}/oce ; # directory where to find the namelists... 
     88DIR_NL=${FORCING}/oce ; # directory where to find the namelists... 
    8989 
    9090# NEMO executable to use is: 
     
    162162        echo ; echo 
    163163        echo "=======================================================================" 
    164         echo " Going for experiment: ${CASE} bulk param. with ${NFORC} forcing " 
     164        echo " Going for experiment: ${CASE} bulk param. with ${FORCING} forcing " 
    165165        echo "=======================================================================" 
    166166        echo 
     
    187187        # Moving output files: 
    188188        mkdir -p output 
    189         mv -f ${CONFIG}-${CASE}_${NFORC}_*_grid*.nc output/ 
     189        mv -f ${CONFIG}-${CASE}_${FORCING}_*_grid*.nc output/ 
    190190 
    191191        # Saving logs: 
    192         mkdir -p ${CASE}_${NFORC}_log 
    193         mv -f *.out *.err ocean.output output.namelist.dyn ${CASE}_${NFORC}_log/ 
     192        mkdir -p ${CASE}_${FORCING}_log 
     193        mv -f *.out *.err ocean.output output.namelist.dyn ${CASE}_${FORCING}_log/ 
    194194 
    195195done 
Note: See TracChangeset for help on using the changeset viewer.