<img align="left" width="40%" src="http://www.lsce.ipsl.fr/Css/img/banniere_LSCE_75.png" >
LSCE/IPSL, CEA-CNRS-UVSQ, Gif-sur-Yvette, France
Synopsis: Makes map and zonal means by basin of the CFC12 inventory (vertical integral of the concentration) and compares those to the GLODAP data.
In [38]:
%install_ext https://raw.github.com/PBrockmann/ipython-ferretmagic/master/ferretmagic.py
%load_ext ferretmagic
In [39]:
#Define environment variable for local main "OCMIP" directory under which the CFC12 observational data is stored
#!export OCMIP_DB=/home/biomac1/geocean/ocmip
In [40]:
%%ferret -q
can data/all
! GLODAP data for CFC12 inventory (calculated from GLODAP gridded data, integrated vertically by J. Orr)
! use "$OCMIP_DB/data/gridded/glodap/cfc12_invent.nc"
use "http://dods.ipsl.jussieu.fr/cgi-bin/nph-dods/ocmip/phase5/DATA/gridded/glodap/cfc12_invent.nc"
! New output from ORCA025-PISC2DIC run (circa September 2014)!
! use "http://prodn.idris.fr/thredds/dodsC/IDRISPUBFS/rfry451/ORCA025-PIS2DIC/MBG/Output/YE/ORCA025-PIS2DIC_19940101_19941231_1Y_CFC12.nc"
use "/home/biomac2/orr/ORCA025/ORCA025-PIS2DIC_19940101_19941231_1Y_CFC12.nc"
! Grid to be used as a reference (1°x1° World Ocean Atlas)
! use "$OCMIP_DB/grids/WOA2001_grid.nc"
use "http://dods.ipsl.jussieu.fr/cgi-bin/nph-dods/ocmip/phase5/DATA/GRID/WOA2001_grid.nc"
In [41]:
%%ferret -q
def grid/x=x/y=y/z=z mygrid
set axis/name=xlon X
set axis/name=ylat Y
set axis/name=zdepth Z
In [42]:
%%ferret
let lon_masked=if TMASK[g=mygrid, d=mask.nc, k=1] eq 1 then nav_lon[d=mask.nc]
let lat_masked=if TMASK[g=mygrid, d=mask.nc, k=1] eq 1 then nav_lat[d=mask.nc]
set variable/units="degrees_east"/title="Longitude" lon_masked
set variable/units="degrees_north"/title="Latitude" lat_masked
Massage CFC12 model output and put on same regular grid as World Ocean Atlas (reference)
In [43]:
%%ferret
! Give memorable names to GLODAP data inventory
! ---------------------------------------------
let cfc12i_glodap = cfc12i[d=cfc12_invent.nc] * 1e+6 !now in umol/m^2
let all = if cfc12i_glodap then 1 else 1
In [48]:
%%ferret -q
! Mask model data & rename
let cfc12m = if cfc12 then cfc12
let cfc12m_orca025_g70_lsce = cfc12m[d=ORCA025-PIS2DIC_19940101_19941231_1Y_CFC12.nc]
! Model specific inventory (mol/m^2)
let xfac = 1.0 !Model output already in mol/m3)
let xfac = 1e+6 !Convert model output to umol/m2
let delz = zbox[g=cfc12m_orca025_g70_lsce]
let var = cfc12m_orca025_g70_lsce * delz * xfac !Concentration * grid-cell thickness
let svar = cfc12m_orca025_g70_lsce * xfac !Surface concentration only
let cfci = var[k=@sum] !Sum vertically, a la OCMIP-2 (more accurate for discrete grid)
! list cfci[i=@din,j=@din] !Global inventory
! Model inventory on model grid
let CFC12i_orca025_g70_lsce = if cfc12m_orca025_g70_lsce[k=1] then cfci
set var/title="Vertical Integral of CFC-12"/units="mol/m^2" CFC12i_orca025_g70_lsce
! save/file="cfc12_invent.nc"/clobber cfc12i_orca025_g70_lsce
! Specify reference field (the grid onto which both the model & the data will be placed)
let ref = mask[d=WOA2001_grid.nc, k=1]
! Regrid model output and data to reference grid (World Ocean Atlas)
def sym datmod CFC12i_orca025_g70_lsce
go mod2datgrid ($datmod) ref nav_lon[d=2] nav_lat[d=2]
! let ($datmod)_ref = ($datmod)_reg
let ($datmod)_ref = reshape( ($datmod)_reg - 0*all, all) !Somehow needed to avoid loosing values east of 0° on map when shading
set var/title="Vertical Integral of CFC-12"/units="mol/m^2" CFC12i_orca025_g70_lsce
Define line patterns
In [45]:
%%ferret -q
def sym dot "(.025,.025,.025,.025)"
def sym dotwide "(.045,.045,.045,.045)"
def sym dashdot "(.1,.05,.025,.05)"
def sym dotwider "(.045,.1,.045,.1)"
Map inventories for data (top) and model (bottom)
In [47]:
%%ferret -q -s 800,400
! go page_new 1 2 5 95 23 95
! set win/clear
! go page_new -i 1 2 5 95 23 95 0 0 bis !To use viewport 2bis for colorbar
go page_new 1 3 5 95 0 100 0 0
set win/clear
go boldf_plattner
! Choose color palette & contour levels (top two plots)
def sym opal nair1_cmyk
def sym olevs "(0.0,7.0,1.0)(0,1,0.2)(1.5,4.5,0.5)(inf)"
def sym shakeyopts "1, 1, 0.15, 1"
!
! (1) GLODAP CFC12 inventory (data)
! ---------------------------------------------------------------------
set view 1
! go ratio_set 2.0 19
! go margins_set 15 8 13 5
go margins_set 15 8 8 10
!
ppl axnmtc 2, 2
ppl axlint 2, 1
ppl labset 0.2,0.16,0.16,0.15
ppl axlsze 0.17, 0.17
ppl axlabp -1, -1
shade/nolab/set/nokey/x=120:480/hlim=120e:-120w:30/pal=gray all[l=1]
! ppl xlab Longitude
ppl ylab Latitude
ppl shade
ppl shakey ($shakeyopts)
contour/fill/line/over/nolab/key/x=120:480/hlim=120e:-120w:30/vlim=90s:90n:30/lev=($olevs)/pal=($opal) cfc12i_glodap
go fland " " litegray
go land
label 470 -83.5 +1 0 .20 "GLODAP"
!
! (2) ORCA025-G70i CFC12 Inventory (model)
! ---------------------------------------------------------------------
set view 2
! go ratio_set 2.0 19
! go margins_set 8 15 13 5
go margins_set 8 15 8 10
! Map of model output on WOA grid (regular 1°x1°)
ppl axnmtc 2, 2
ppl axlint 2, 1
ppl labset 0.2,0.16,0.16,0.15
ppl axlsze 0.17, 0.17
ppl axlabp -1, -1
shade/nolab/set/nokey/x=120:480/hlim=120e:-120w:30/pal=gray all[l=1]
ppl xlab Longitude
ppl ylab Latitude
ppl shade
ppl shakey ($shakeyopts)
contour/fill/line/over/nolab/key/x=120:480/hlim=120e:-120w:30/vlim=90s:90n:30/lev=($olevs)/pal=($opal) cfc12i_orca025_g70_lsce_ref
go fland " " litegray
go land
!
! Map of model output on native model grid (ORCA025)
! go mapmod cfc12i_orca025_g70_lsce lon_masked[($subreg)] lat_masked[($subreg)] no Latitude "/lev=($olevs)/pal=($opal)"
! go mapmodfill cfc12i_orca025_g70_lsce nav_lon[d=2] nav_lat[d=2] no Latitude "/line/lev=($olevs)/pal=($opal)"
label 470 -83.5 +1 0 .20 "ORCA025 (G70i)"
!
! 3) Model - Data difference
set view 3
go margins_set 1 22 8 10
! Choose palette, contour levels, color key options
! def sym opal light_centered
def sym opal blue_darkred
def sym olevs "(-inf)(-2.5,2.5,0.5)(-0.2,0.2,0.4)(inf)"
def sym shakeyopts "1, 1, 0.15, 1"
let diffmd = cfc12i_orca025_g70_lsce_ref - cfc12i_glodap
! let diffmd = reshape(cfc12i_orca025_g70_lsce_ref - cfc12i_glodap, cfc12i_glodap)
go mapdat diffmd Longitude Latitude "/lev=($olevs)/pal=($opal)"
label 470 -83.5 +1 0 .20 "Model - Data"
!
! (3) Make colorbar (legend) below 2nd viewport
! set view 2bis
! go colorbar_put -h 8 97 -12 -5 0.32 /pal=($opal)/lev=($olevs) 1
The inventories in the ORCA025 G70i simulation exhibit similar patterns to those observed, but simulated values are typically higher. Simulated inventories slightly less than observed (lows) do occur in the temperate North Atlantic and in parts of the highest latitudes of the Southern Ocean. Prominent regions where simulated inventories are substantially more than observed include much of the Southern Ocean and the subpolar gyre of North Atlantic.
Get mask files to build zonal means by basin
In [13]:
%%ferret -q
! Get basin masks and reference grid (World Ocean Atlas, 1°x1°)
def sym readbmask "notyet"
go choosebasin glo
Plot zonal means by basin
In [14]:
%%ferret -q -s 800,400
! Make 4 plots: Global, Atlantic, Indian, Pacific
! -----------------------------------------------
go page_new -l 2 2 5 95 10 90 0 0
set win/clear
go boldf_plattner
! Tune plots with a some ferret (PPL) setup commands
ppl color 3 0, 55, 0 !dark green instead of default green (too light)
ppl axlabp -1, -1 !labeled axes on left and bottom
ppl axnmtc 2, 4 !number of minor ticks on x and y axes
ppl axlint 1, 1 !numer of major ticks to label (1 = every, 2 = every other)
def sym yformat (i2)
! Specify y-axis limits & subplot title
def sym ymin 0.0 ; def sym ymax 4.0 ; def sym yinc 1.0
def sym ylims ($ymin):($ymax):($yinc)
let ysubtitle = `($ymin)` + 0.9*`($ymax) - ($ymin)`
let cfc12i_g70i = cfc12i_orca025_g70_lsce_ref
! 1) Global
set view 1
go margins_set 15 8 13 5
go zmsurf cfc12i_g70i glo no "CFC12 invent. (($greek)m($roman)mol m^-^2)" -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
go zmsurf cfc12i_glodap glo no no -90 +90 "/nolab/over/col=blue/thick=2/dash=($dotwide) " over
label -87 `ysubtitle` -1 0 .20 "Global"
! 2) Atlantic
set view 2
go margins_set 15 8 18 0
go zmsurf cfc12i_g70i atlarc no no -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
go zmsurf cfc12i_glodap atlarc no no -90 +90 "/nolab/over/col=blue/thick=2/dash=($dotwide) " over
label -87 `ysubtitle` -1 0 .20 "Atlantic"
! 3) Indian
set view 3
go margins_set 15 8 13 5
go zmsurf cfc12i_g70i ind no "CFC12 invent. (($greek)m($roman)mol m^-^2)" -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
go zmsurf cfc12i_glodap ind no no -90 +90 "/nolab/over/col=blue/thick=2/dash=($dotwide) " over
label -87 `ysubtitle` -1 0 .20 "Indian"
! 4) Pacific
set view 4
go margins_set 15 8 18 0
go zmsurf cfc12i_g70i pac no no -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
go zmsurf cfc12i_glodap pac no no -90 +90 "/nolab/over/col=blue/thick=2/dash=($dotwide) " over
label -87 `ysubtitle` -1 0 .20 "Pacific"
The ORCA025 G70i simulation generally overestimates GLODAP zonal means for CFC12. Differences in the Southern Ocean are among the largest, with the model up to 40% greater than observed.