123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- #!/usr/bin/env python
- # B a r a K u d a
- #
- # Generate stereographic plot of sea-ice extent at both poles
- #
- # L. Brodeau, 2009
- import sys
- import numpy as nmp
- from netCDF4 import Dataset
- import barakuda_tool as bt
- import barakuda_plot as bp
- venv_needed = {'ORCA','EXP','DIAG_D','MM_FILE','COMP2D','NM_IC_OBS','F_ICE_OBS_12','NN_ICEF_OBS',
- 'NN_ICEF','NN_ICET','FILE_ICE_SUFFIX'}
- vdic = bt.check_env_var(sys.argv[0], venv_needed)
- cexp = vdic['EXP']
- CONFEXP = vdic['ORCA']+'-'+cexp
- path_fig='./'
- fig_type='png'
- cn_obs = vdic['NM_IC_OBS']
- narg = len(sys.argv)
- if narg < 3: print 'Usage: '+sys.argv[0]+' <year1> <year2>'; sys.exit(0)
- cy1 = sys.argv[1] ; cy2=sys.argv[2]; jy1=int(cy1); jy2=int(cy2)
- jy1_clim = jy1 ; jy2_clim = jy2
- print ' => mean on the clim : ', jy1_clim, jy2_clim, '\n'
- # Getting coordinates and mask :
- bt.chck4f(vdic['MM_FILE'])
- id_mm = Dataset(vdic['MM_FILE'])
- xlon = id_mm.variables['nav_lon'][:,:]
- xlat = id_mm.variables['nav_lat'][:,:]
- xmask = id_mm.variables['tmask'][0,0,:,:]
- id_mm.close()
- # Getting obs:
- bt.chck4f(vdic['F_ICE_OBS_12'])
- id_clim = Dataset(vdic['F_ICE_OBS_12'])
- xclim03 = id_clim.variables[vdic['NN_ICEF_OBS']][2,:,:]
- xclim09 = id_clim.variables[vdic['NN_ICEF_OBS']][8,:,:]
- id_clim.close()
- # Getting NEMO mean monthly climatology of sea-ice coverage:
- cf_nemo_mnmc = vdic['DIAG_D']+'/clim/mclim_'+CONFEXP+'_'+cy1+'-'+cy2+'_'+vdic['FILE_ICE_SUFFIX']+'.nc4'
- bt.chck4f(cf_nemo_mnmc)
- id_ice = Dataset(cf_nemo_mnmc)
- xnemo_frac_03 = id_ice.variables[vdic['NN_ICEF']][2,:,:]
- xnemo_frac_09 = id_ice.variables[vdic['NN_ICEF']][8,:,:]
- xnemo_thic_03 = id_ice.variables[vdic['NN_ICET']][2,:,:]
- xnemo_thic_09 = id_ice.variables[vdic['NN_ICET']][8,:,:]
- id_ice.close()
- [ nj, ni ] = xnemo_frac_03.shape ; print ' Shape of sea-ice :', nj, ni, '\n'
- # Extraoplating sea values on continents:
- bt.drown(xnemo_frac_03, xmask, k_ew=2, nb_max_inc=10, nb_smooth=10)
- bt.drown(xnemo_frac_09, xmask, k_ew=2, nb_max_inc=10, nb_smooth=10)
- bt.drown(xnemo_thic_03, xmask, k_ew=2, nb_max_inc=10, nb_smooth=10)
- bt.drown(xnemo_thic_09, xmask, k_ew=2, nb_max_inc=10, nb_smooth=10)
- bt.drown(xclim03, xmask, k_ew=2, nb_max_inc=10, nb_smooth=10)
- bt.drown(xclim09, xmask, k_ew=2, nb_max_inc=10, nb_smooth=10)
- # Time for figures:
- # -----------------
- #
- # Extending to 90S: (from 78 to 90):
- #
- js_ext = 12; nje = nj + js_ext
- xlat0 = nmp.zeros((nje,ni))
- xlon0 = nmp.zeros((nje,ni))
- xnemo_frac_030 = nmp.zeros((nje,ni))
- xnemo_frac_090 = nmp.zeros((nje,ni))
- xnemo_thic_030 = nmp.zeros((nje,ni))
- xnemo_thic_090 = nmp.zeros((nje,ni))
- xclim030 = nmp.zeros((nje,ni))
- xclim090 = nmp.zeros((nje,ni))
- #
- for jj in range(js_ext):
- xlat0[jj,:] = -90. + float(jj)
- xlon0[jj,:] = xlon[0,:]
- xnemo_frac_030[jj,:] = xnemo_frac_03[1,:] #persistence
- xnemo_frac_090[jj,:] = xnemo_frac_09[1,:] #persistence
- xnemo_thic_030[jj,:] = xnemo_thic_03[1,:] #persistence
- xnemo_thic_090[jj,:] = xnemo_thic_09[1,:] #persistence
- xclim030[jj,:] = xclim03[1,:] #persistence
- xclim090[jj,:] = xclim09[1,:] #persistence
- xlat0[js_ext:nje,:] = xlat[:,:]
- xlon0[js_ext:nje,:] = xlon[:,:]
- xnemo_frac_030[js_ext:nje,:] = xnemo_frac_03[:,:]
- xnemo_frac_090[js_ext:nje,:] = xnemo_frac_09[:,:]
- xnemo_thic_030[js_ext:nje,:] = xnemo_thic_03[:,:]
- xnemo_thic_090[js_ext:nje,:] = xnemo_thic_09[:,:]
- xclim030[js_ext:nje,:] = xclim03[:,:]
- xclim090[js_ext:nje,:] = xclim09[:,:]
- ratio = 1.
- #if vdic['COMP2D'] == 'OBS': ratio = 100.
- if xclim03.max()>90.:
- ratio = 100.
- #DEBUG:
- if False:
- bp.plot("nproj")('spstere', 0., 1., 0.1, xlon0, xlat0, xclim090[:,:]/ratio,
- cfignm=path_fig+'sea-ice_SP_sept_obs', cpal='ice', cbunit='(frac.)',
- ctitle='Ice fraction, Sept., "'+cn_obs+'"',
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
-
- bp.plot("nproj")('npol2', 0., 1., 0.1, xlon, xlat, xclim03[:,:]/ratio,
- cfignm=path_fig+'sea-ice_NP_march_obs', cpal='ice', cbunit='(frac.)',
- ctitle='Ice fraction, March, "'+cn_obs+'"',
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- sys.exit(0)
- #DEBUG.
- # September
- # ~~~~~~~~~
- if vdic['COMP2D'] == 'OBS':
- ctit_clim = 'Ice fraction, Sept., "'+cn_obs+'"'
- else:
- ctit_clim = 'Ice fraction, Sept., '+vdic['COMP2D']
- # Nordic Seas:
- bp.plot("nproj")('npol2', 0., 1., 0.1, xlon, xlat, xnemo_frac_09[:,:],
- cfignm=path_fig+'sea-ice_NP_sept_'+CONFEXP, cpal='ice', cbunit='(frac.)',
- ctitle='Ice fraction, Sept., '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- bp.plot("nproj")('npol2', 0., 1., 0.1, xlon, xlat, xclim09[:,:]/ratio,
- cfignm=path_fig+'sea-ice_NP_sept_'+vdic['COMP2D'], cpal='ice', cbunit='(frac.)',
- ctitle=ctit_clim,
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
-
- bp.plot("nproj")('npol2', 0., 10., 0.25, xlon, xlat, xnemo_thic_09[:,:],
- cfignm=path_fig+'sea-ice_thickness_NP_sept_'+CONFEXP, cpal='cubehelix_r', cbunit='(m)',
- ctitle='Ice thickness, Sept., '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type, i_cb_subsamp=2,
- lforce_lim=True)
-
- # September, big South:
- bp.plot("nproj")('spstere', 0., 1., 0.1, xlon0, xlat0, xnemo_frac_090[:,:],
- cfignm=path_fig+'sea-ice_SP_sept_'+CONFEXP, cpal='ice', cbunit='(frac.)',
- ctitle='Ice fraction, Sept., '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- bp.plot("nproj")('spstere', 0., 1., 0.1, xlon0, xlat0, xclim090[:,:]/ratio,
- cfignm=path_fig+'sea-ice_SP_sept_'+vdic['COMP2D'], cpal='ice', cbunit='(frac.)',
- ctitle=ctit_clim,
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- bp.plot("nproj")('spstere', 0., 5., 0.1, xlon0, xlat0, xnemo_thic_090[:,:],
- cfignm=path_fig+'sea-ice_thickness_SP_sept_'+CONFEXP, cpal='cubehelix_r', cbunit='(m)',
- ctitle='Ice thickness, Sept., '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type, i_cb_subsamp=2,
- lforce_lim=True)
- # March:
- # ~~~~~~
- if vdic['COMP2D'] == 'OBS':
- ctit_clim = 'Ice fraction, March, "'+cn_obs+'"'
- else:
- ctit_clim = 'Ice fraction, March, '+vdic['COMP2D']
- # Nordic Seas:
- #print " -- doing stereographic projection of sea-ice fraction / March / N.E."
- bp.plot("nproj")('npol2', 0., 1., 0.1, xlon, xlat, xnemo_frac_03[:,:],
- cfignm=path_fig+'sea-ice_NP_march_'+CONFEXP, cpal='ice', cbunit='(frac.)',
- ctitle='Ice fraction, March, '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- bp.plot("nproj")('npol2', 0., 1., 0.1, xlon, xlat, xclim03[:,:]/ratio,
- cfignm=path_fig+'sea-ice_NP_march_'+vdic['COMP2D'], cpal='ice', cbunit='(frac.)',
- ctitle=ctit_clim,
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- #print " -- doing stereographic projection of sea-ice thickness / March / N.E."
- bp.plot("nproj")('npol2', 0., 10., 0.25, xlon, xlat, xnemo_thic_03[:,:],
- cfignm=path_fig+'sea-ice_thickness_NP_march_'+CONFEXP, cpal='cubehelix_r', cbunit='(m)',
- ctitle='Ice thickness, March, '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type, i_cb_subsamp=2,
- lforce_lim=True)
- # Big south:
- bp.plot("nproj")('spstere', 0., 1., 0.1, xlon0, xlat0, xnemo_frac_030[:,:],
- cfignm=path_fig+'sea-ice_SP_march_'+CONFEXP, cpal='ice', cbunit='(frac.)',
- ctitle='Ice fraction, March, '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- bp.plot("nproj")('spstere', 0., 1., 0.1, xlon0, xlat0, xclim030[:,:]/ratio,
- cfignm=path_fig+'sea-ice_SP_march_'+vdic['COMP2D'], cpal='ice', cbunit='(frac.)',
- ctitle=ctit_clim,
- lkcont=True, cfig_type=fig_type,
- lforce_lim=True)
- bp.plot("nproj")('spstere', 0., 5., 0.1, xlon0, xlat0, xnemo_thic_030[:,:],
- cfignm=path_fig+'sea-ice_thickness_SP_march_'+CONFEXP, cpal='cubehelix_r', cbunit='(m)',
- ctitle='Ice thickness, March, '+cexp+' ('+cy1+'-'+cy2+')',
- lkcont=True, cfig_type=fig_type, i_cb_subsamp=2,
- lforce_lim=True)
- print '\n Bye!'
|