Potential Temperature and Salinity biases

%%capture 
# comment above line to see details about the run(s) displayed
from misc import *
%matplotlib inline

Horizontal Mean bias (w.r.t. obs) versus time

nr=1
nc=1
fs=(9,5.5)

Potential temperature

%matplotlib inline
reg_mom = ['Global','SouthernOcean','PacificOcean','IndianOcean','AtlanticOcean','Arctic','LabSea']
matplotlib.rcParams.update({'font.size': 17})
vmax=1.5; vmin=-vmax
for m in reg_mom:
  
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    ds_mom = xr.open_dataset(path+case+'_thetao_drift.nc').sel(time=slice('0001-01-01', end_date))
    splitscale =  [0., -500., -4000]
    dummy_mom = np.ma.masked_invalid(ds_mom.sel(region=m).thetao_drift.values)
    fig, ax = plt.subplots(nrows=nr, ncols=nc, figsize=fs, sharex=False, sharey=True)
    plt.suptitle(str(m)+', Potential Temperature bias [C]', fontsize=14)
    ztplot(dummy_mom, ds_mom.time.values, ds_mom.z_l.values*-1, ignore=np.nan, splitscale=splitscale, 
           contour=True, axis=ax , title=label[i], extend='both', colormap='dunnePM', 
           autocenter=True, tunits='Year', show=False, clim=(vmin, vmax)) 
    plt.subplots_adjust(top = 0.8)
    plt.tight_layout()
_images/ts_biases_5_0.png _images/ts_biases_5_1.png _images/ts_biases_5_2.png _images/ts_biases_5_3.png _images/ts_biases_5_4.png _images/ts_biases_5_5.png _images/ts_biases_5_6.png _images/ts_biases_5_7.png _images/ts_biases_5_8.png _images/ts_biases_5_9.png _images/ts_biases_5_10.png _images/ts_biases_5_11.png _images/ts_biases_5_12.png _images/ts_biases_5_13.png

Salinity

%matplotlib inline
reg_mom = ['Global','SouthernOcean','PacificOcean','IndianOcean','AtlanticOcean','Arctic','LabSea']
matplotlib.rcParams.update({'font.size': 17})
vmax=0.2; vmin=-vmax
for m in reg_mom:
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    ds_mom = xr.open_dataset(path+case+'_so_drift.nc').sel(time=slice('0001-01-01', end_date))
    splitscale =  [0., -500., -4000]
    dummy_mom = np.ma.masked_invalid(ds_mom.sel(region=m).so_drift.values)
    fig, ax = plt.subplots(nrows=nr, ncols=nc, figsize=fs, sharex=False, sharey=True)
    plt.suptitle(str(m)+', Salinity bias [psu]', fontsize=14)
    ztplot(dummy_mom, ds_mom.time.values, ds_mom.z_l.values*-1, ignore=np.nan, splitscale=splitscale, 
           contour=True, axis=ax , title=label[i], extend='both', colormap='dunnePM', 
           autocenter=True, tunits='Year', show=False, clim=(vmin, vmax)) 
    plt.subplots_adjust(top = 0.8)
    plt.tight_layout()
_images/ts_biases_7_0.png _images/ts_biases_7_1.png _images/ts_biases_7_2.png _images/ts_biases_7_3.png _images/ts_biases_7_4.png _images/ts_biases_7_5.png _images/ts_biases_7_6.png _images/ts_biases_7_7.png _images/ts_biases_7_8.png _images/ts_biases_7_9.png _images/ts_biases_7_10.png _images/ts_biases_7_11.png _images/ts_biases_7_12.png _images/ts_biases_7_13.png

T/S bias at selected vertical levels

if 'area_t' in dir(grd[i]):
    area = grd[i].area_t
else:
    area = grd[i].areacello

Potential Temperature

# change k indice to see bias at other depths
levels=[0,1,2,5,10,15,20,25]
tlim=[5,7.5,7.5,5,5,5]

for k,t in zip(levels,tlim):
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    ds_mom_t = xr.open_dataset(path+case+'_thetao_time_mean.nc')
    if 'area_t' in dir(grd[i]):
      area = grd[i].area_t
    else:
      area = grd[i].areacello
    
    fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(12,6.5))
    temp_mom = np.ma.masked_invalid(ds_mom_t.thetao_bias[k,:].values)
  
    plt.suptitle('Temperature bias [C] at depth = {} m (level = {})'.format(ds_mom_t.z_l[k].values, k))
    xyplot(temp_mom, grd[i].geolon, grd[i].geolat, area, title=str(label[i]+' - obs'), axis=ax, 
         clim=(-t,t), nbins=100, colormap=plt.cm.bwr, centerlabels=True)
    plt.subplots_adjust(top = 0.8)
_images/ts_biases_11_0.png _images/ts_biases_11_1.png _images/ts_biases_11_2.png _images/ts_biases_11_3.png _images/ts_biases_11_4.png _images/ts_biases_11_5.png _images/ts_biases_11_6.png _images/ts_biases_11_7.png _images/ts_biases_11_8.png _images/ts_biases_11_9.png _images/ts_biases_11_10.png _images/ts_biases_11_11.png

Salinity

# change k indice to see bias at other depths
levels=[0,5,10,15,20,25]

slim=[5,3,1.5,1.5,1,1]

for k,s in zip(levels,slim):
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    if 'area_t' in dir(grd[i]):
      area = grd[i].area_t
    else:
      area = grd[i].areacello
    
    ds_mom_s = xr.open_dataset(path+case+'_so_time_mean.nc')
    fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(12,6.5))
    salt_mom = np.ma.masked_invalid(ds_mom_s.so_bias[k,:].values)
    
    plt.suptitle('Salinity bias [psu] at depth = {} m (level = {})'.format(ds_mom_s.z_l[k].values, k))
    xyplot(salt_mom, grd[i].geolon, grd[i].geolat, area, title=str(label[i]+' - obs'), axis=ax, 
         clim=(-s,s), nbins=50, colormap=plt.cm.bwr, centerlabels=True)
    plt.subplots_adjust(top = 0.8)
_images/ts_biases_13_0.png _images/ts_biases_13_1.png _images/ts_biases_13_2.png _images/ts_biases_13_3.png _images/ts_biases_13_4.png _images/ts_biases_13_5.png _images/ts_biases_13_6.png _images/ts_biases_13_7.png _images/ts_biases_13_8.png _images/ts_biases_13_9.png _images/ts_biases_13_10.png _images/ts_biases_13_11.png

T/S bias zonal means

Potential temperature

reg = "AtlanticOcean"
var = 'thetao_bias'
units = r'$^o$C'
regions = ['Global','MedSea','Arctic','PacificOcean',
           'AtlanticOcean','IndianOcean','SouthernOcean',
          'LabSea']
ylim_min = [-90, 30, 62, -50, -50, -50, -90, 50]
ylim_max = [ 90, 47, 90,  65,  72,  30, -35, 68 ]

cmap = plt.get_cmap('bwr')  
cmap.set_bad(color='black')  
matplotlib.rcParams.update({'font.size': 16})

for reg, j in zip(regions, range(len(regions))):
  print(reg, j)
  da  = []
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    ds_mom_t = xr.open_dataset(path+case+'_thetao_time_mean.nc')
    atl = basin_code[i].sel(region=reg)
    # Set zero values to NaN
    atl = atl.where(atl != 0, np.nan)
    da.append((ds_mom_t[var] * atl).mean('xh').expand_dims(case=[label[i]]).sel(yh=slice(ylim_min[j], ylim_max[j])))

  combined_da = xr.concat(da, dim="case")
  col = None
  if len(combined_da) > 1:
      col = "case"
  g = combined_da.plot(x="yh", y="z_l", col=col, 
                 yincrease=False, col_wrap=2,
                figsize=(12,4), cmap=cmap, robust=True,
                cbar_kwargs={"label": reg + ', ' + var + ' ({})'.format(units)})
Global 0
MedSea 1
Arctic 2
PacificOcean 3
AtlanticOcean 4
IndianOcean 5
SouthernOcean 6
LabSea 7
_images/ts_biases_16_8.png _images/ts_biases_16_9.png _images/ts_biases_16_10.png _images/ts_biases_16_11.png _images/ts_biases_16_12.png _images/ts_biases_16_13.png _images/ts_biases_16_14.png _images/ts_biases_16_15.png

Salinity

reg = "AtlanticOcean"
var = 'so_bias'
units = 'psu'
regions = ['Global','MedSea','Arctic','PacificOcean',
           'AtlanticOcean','IndianOcean','SouthernOcean',
          'LabSea']
cmap = plt.get_cmap('bwr')  
cmap.set_bad(color='black')  
matplotlib.rcParams.update({'font.size': 16})

for reg, j in zip(regions, range(len(regions))):
  #print(reg)
  da  = []
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    ds_mom_t = xr.open_dataset(path+case+'_so_time_mean.nc')
    atl = basin_code[i].sel(region=reg)
    # Set zero values to NaN
    atl = atl.where(atl != 0, np.nan)
    da.append((ds_mom_t[var] * atl).mean('xh').expand_dims(case=[label[i]]).sel(yh=slice(ylim_min[j], ylim_max[j])))

  combined_da = xr.concat(da, dim="case")
  col = None
  if len(combined_da) > 1:
      col = "case"
  g = combined_da.plot(x="yh", y="z_l", col=col, 
                 yincrease=False, col_wrap=2,
                figsize=(12,4), cmap=cmap, robust=True,
                cbar_kwargs={"label": reg + ', ' + var + ' ({})'.format(units)})
_images/ts_biases_18_0.png _images/ts_biases_18_1.png _images/ts_biases_18_2.png _images/ts_biases_18_3.png _images/ts_biases_18_4.png _images/ts_biases_18_5.png _images/ts_biases_18_6.png _images/ts_biases_18_7.png

T/S bias meridional means

Potential temperature

reg = "AtlanticOcean"
var = 'thetao_bias'
units = r'$^o$C'
regions = ['Global','MedSea','Arctic','PacificOcean',
           'AtlanticOcean','IndianOcean','SouthernOcean',
          'LabSea']
cmap = plt.get_cmap('bwr')  
cmap.set_bad(color='black')  
matplotlib.rcParams.update({'font.size': 16})

for reg in regions:
  #print(reg)
  da  = []
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    ds_mom_t = xr.open_dataset(path+case+'_thetao_time_mean.nc')
    atl = basin_code[i].sel(region=reg)
    # Set zero values to NaN
    atl = atl.where(atl != 0, np.nan)
    da.append((ds_mom_t[var] * atl).mean('yh').expand_dims(case=[label[i]]))

  combined_da = xr.concat(da, dim="case")
  col = None
  if len(combined_da) > 1:
      col = "case"
  g = combined_da.plot(x="xh", y="z_l", col=col, 
                 yincrease=False, col_wrap=2,
                figsize=(12,4), cmap=cmap, robust=True,
                cbar_kwargs={"label": reg + ', ' + var + ' ({})'.format(units)})
_images/ts_biases_20_0.png _images/ts_biases_20_1.png _images/ts_biases_20_2.png _images/ts_biases_20_3.png _images/ts_biases_20_4.png _images/ts_biases_20_5.png _images/ts_biases_20_6.png _images/ts_biases_20_7.png

Salinity

reg = "AtlanticOcean"
var = 'so_bias'
units = 'psu'
regions = ['Global','MedSea','Arctic','PacificOcean',
           'AtlanticOcean','IndianOcean','SouthernOcean',
          'LabSea']
cmap = plt.get_cmap('bwr')  
cmap.set_bad(color='black')  
matplotlib.rcParams.update({'font.size': 16})

for reg in regions:
  #print(reg)
  da  = []
  for path, case, i in zip(ocn_path, casename, range(len(casename))):
    ds_mom_t = xr.open_dataset(path+case+'_so_time_mean.nc')
    atl = basin_code[i].sel(region=reg)
    # Set zero values to NaN
    atl = atl.where(atl != 0, np.nan)
    da.append((ds_mom_t[var] * atl).mean('yh').expand_dims(case=[label[i]]))

  combined_da = xr.concat(da, dim="case")
  col = None
  if len(combined_da) > 1:
      col = "case"
  g = combined_da.plot(x="xh", y="z_l", col=col, 
                 yincrease=False, col_wrap=2,
                figsize=(12,4), cmap=cmap, robust=True,
                cbar_kwargs={"label": reg + ', ' + var + ' ({})'.format(units)})
_images/ts_biases_22_0.png _images/ts_biases_22_1.png _images/ts_biases_22_2.png _images/ts_biases_22_3.png _images/ts_biases_22_4.png _images/ts_biases_22_5.png _images/ts_biases_22_6.png _images/ts_biases_22_7.png