James Orr - 6 November 2014

<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


CFC12 penetration depth: map & zonal means for ORCA025 (G70i) vs. GLODAP

Synopsis: Makes map and zonal means by basin of the CFC12 penetration depth (inventory / surface concentration) for ORCA025 (G70i) and compares those to the GLODAP data.

Install & load ferretmagic extension


In [24]:
%install_ext https://raw.github.com/PBrockmann/ipython-ferretmagic/master/ferretmagic.py
%load_ext ferretmagic


Installed ferretmagic.py. To use it, type:
  %load_ext ferretmagic
The ferretmagic extension is already loaded. To reload it, use:
  %reload_ext ferretmagic

Get DATA and MODEL OUTPUT


In [25]:
#Define environment variable for local main "OCMIP" directory under which the CFC12 observational data is stored
#!export OCMIP_DB=/home/biomac1/geocean/ocmip

In [26]:
%%ferret -q
  can data/all
! use "http://prodn.idris.fr/thredds/dodsC/IDRISPUBFS/rfry451/ORCA025-PIS2DIC/GRID/mask.nc"
  use "/home/biomac2/orr/ORCA025/GRID/mask.nc"
! 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"
  use "http://dods.ipsl.jussieu.fr/cgi-bin/nph-dods/ocmip/phase5/DATA/gridded/glodap/CFC12.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"

Define MYGRID to remove time axis of tmask which is unnecessary and interferes with time_counter axis of model output


In [27]:
%%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

Define proper lat, lon coordinates from MASK and MYGRID


In [28]:
%%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

Make CFC12 inventory maps & zonal means (ORCA025 and data)

Massage CFC12 model output and put on same regular grid as World Ocean Atlas (reference)


In [29]:
%%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

  let cfc12s_glodap = cfc12[k=1,d=CFC12.nc]  ! in pmol/kg
  let cfc12p_glodap  = (cfc12i_glodap / cfc12s_glodap) * 1./1.028e-3 ! in meters

In [52]:
%%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[k=1] * xfac          !Surface concentration only

  let cfci = var[k=@sum]      !Sum vertically, a la OCMIP-2 (more accurate for discrete grid)
  let cfcs = svar
  let cfcp = cfci / cfcs
! list cfci[i=@din,j=@din]    !Global inventory

! Model inventory & penetration on model grid
  let CFC12i_orca025_g70_lsce  = if cfc12m_orca025_g70_lsce[k=1] then cfci
  let CFC12p_orca025_g70_lsce  = if cfc12m_orca025_g70_lsce[k=1] then cfcp
  set var/title="Vertical Integral of CFC-12"/units="mol/m^2" CFC12i_orca025_g70_lsce
  set var/title="Penetration depth of CFC-12"/units="m"       CFC12p_orca025_g70_lsce
! save/file="cfc12_invent.nc"/clobber cfc12i_orca025_g70_lsce
! save/file="cfc12_penz.nc"/clobber   cfc12p_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 invmod  CFC12i_orca025_g70_lsce
  def sym penzmod CFC12p_orca025_g70_lsce
  go mod2datgrid ($invmod)  ref nav_lon[d=4] nav_lat[d=4]
  go mod2datgrid ($penzmod) ref nav_lon[d=4] nav_lat[d=4]
  let ($invmod)_ref  = reshape( ($invmod)_reg - 0*all, all)   !Kluge to avoid loosing values east of 0° on map when shading
  let ($penzmod)_ref = reshape( ($penzmod)_reg - 0*all, all)  !Kluge 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
  set var/title="Penetration depth of CFC-12"/units="m"       CFC12p_orca025_g70_lsce
! sho data 4
!  sho grid ($penzmod)_ref
! stat ($invmod)_ref
! stat ($penzmod)_ref

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)"

Surface maps

Map inventories for data (top) and model (bottom)


In [53]:
%%ferret -q -s 800,400
  set mem/siz=280

! 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,1000,100)(1500,2000,500)(inf)"
  def sym shakeyopts "1, 1, 0.15, 1"
!
! (1) GLODAP CFC12 penetration depth (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) cfc12p_glodap
  go fland " " litegray
  go land
  label 470 -83.5 +1 0 .20 "GLODAP"
!
! (2) ORCA025-G70i CFC12 penetration depth (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) cfc12p_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 blue_darkred
  def sym olevs "(-inf)(-150,150,100)(-500,500,100)(inf)"
  def sym shakeyopts "1, 1, 0.15, 1"
  let diffmd = cfc12p_orca025_g70_lsce_ref - cfc12p_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


Fig. 1. Maps of CFC12 inventory ($\mu$mol m$^{-2}$) for the GLODAP data (top), the ORCA025 G70i simulation (middle), and the simulation minus the data (bottom).

As for inventories, the penetration depths of the ORCA025 G70i simulation have patterns similar to those observed, but tracer penetration is generally deeper in the model. Excess penetration is largest in tropical Atlantic and in the subpolar gyre of North Atlantic.

Zonal means

Get mask files to build zonal means by basin


In [48]:
%%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 [54]:
%%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 (i4)

! Specify y-axis limits & subplot title
  def sym ymin 0 ; def sym ymax 1800 ; def sym yinc 500
  def sym ylims ($ymin):($ymax):($yinc)
  let ysubtitle = `($ymin)` + 0.9*`($ymax) - ($ymin)`

  let cfc12p_g70i = cfc12p_orca025_g70_lsce_ref
! 1) Global
  set view 1
  go margins_set 15 8 13 5
  go zmsurf cfc12p_g70i   glo no "CFC12 Pen. Depth (m)"  -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
  go zmsurf cfc12p_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 cfc12p_g70i   atlarc no no -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
  go zmsurf cfc12p_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 cfc12p_g70i   ind no "CFC12 Pen. Depth (m)"  -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
  go zmsurf cfc12p_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 cfc12p_g70i   pac no no -90 +90 "/nolab/set/col=red/dash/thick=2/hlim=90s:90n:30/vlim=($ylims)/line" firstplt
  go zmsurf cfc12p_glodap pac no no -90 +90 "/nolab/over/col=blue/thick=2/dash=($dotwide)  " over
  label -87 `ysubtitle` -1 0 .20 "Pacific"


Fig. 2. Surface zonal means of CFC12 penetration depth (m) for the GLODAP data (blue) and ORCA025-PISCES (red) over the global ocean as well as the Atlantic, Indian, and Pacific basins.

The ORCA025 G70i simulation generally overestimates GLODAP zonal mean penetration depths for CFC12. Differences in the Southern Ocean are among the largest, with the model up to 40% greater than observed. The prominent discrepancy previously seen in the North Atlantic subpolar gyre (Fig. 1) is not noticable here due to zonal averaging.