Analysing energy changes at sub-global scales

In CMIP5 climate model simulations, drift can lead to substantial non-closure of the global energy budget (i.e. discrepancies between changes in netTOA flux, ocean surface heat flux and ocean heat storage). Foruntately, it has been shown that in most cases this issue can be remedied (i.e. budget closure can be acheived) by dedriting the netTOA, ocean surface heat flux and OHC data (Hobbs et al 2016; My Anaylsis).

Of course, many analyses are interested in changes to the energy budget at sub-global scales. In general, there are a few different approaches to energy budget analysis at these scales, which I compare and contrast below:

  1. Flux integral
  2. Linear trend
  3. OHC tendency

(I also need to look at the issue of regridding of ocean data.)


In [1]:
import os, sys
import iris
import numpy
import iris.plot as iplt
import matplotlib.pyplot as plt
import seaborn
seaborn.set_context('talk')

cwd = os.getcwd()
repo_dir = '/'
for directory in cwd.split('/')[1:]:
    repo_dir = os.path.join(repo_dir, directory)
    if directory == 'ocean-analysis':
        break

modules_dir = os.path.join(repo_dir, 'modules')
sys.path.append(modules_dir)

import general_io as gio
import timeseries
import convenient_universal as uconv

In [2]:
%matplotlib inline

1. Flux integral approach

On a global scale, the most common approach to analysing changes in the oceanic energy budget is to plot the change in ocean heat content against the cumulative sum of the ocean surface heat flux (i.e. take the temporal integral of the surface flux to get the corresponding change in heat) (e.g. Hobbs et al 2016; my anaylsis). This approach works well, because any non-zero accumulation of ocean surface heat flux (after dedrifting) will be reflected in the (dedrifted) change in OHC, because in a stationary climate the globally integrated ocean surface heat flux will be zero.

(I think this is essentially the approach that Frolicher et al (2015) take.)


In [50]:
def calc_anomaly(cube):
    """Calculate the anomaly."""
    
    anomaly = cube.copy()
    anomaly.data = anomaly.data - anomaly.data[0]
    
    return anomaly


def get_data(model):
    """Get the hfds, ohc and hfbasin data"""

    rndt_file = '/g/data/r87/dbi599/DRSv2/CMIP5/%s/historical/yr/atmos/r1i1p1/rndt/latest/dedrifted/rndt-zonal-sum_Ayr_%s_historical_r1i1p1_cumsum-all.nc' %(model, model)
    hfds_file = '/g/data/r87/dbi599/DRSv2/CMIP5/%s/historical/yr/ocean/r1i1p1/hfds/latest/dedrifted/hfds-zonal-sum_Oyr_%s_historical_r1i1p1_cumsum-all.nc' %(model, model)
    ohc_file = '/g/data/r87/dbi599/DRSv2/CMIP5/%s/historical/yr/ocean/r1i1p1/ohc/latest/dedrifted/ohc-zonal-sum_Oyr_%s_historical_r1i1p1_all.nc' %(model, model)
    hfbasin_file = '/g/data/r87/dbi599/DRSv2/CMIP5/%s/historical/yr/ocean/r1i1p1/hfbasin/latest/dedrifted/hfbasin-global_Oyr_%s_historical_r1i1p1_cumsum-all.nc' %(model, model)
    
    time_constraint = gio.get_time_constraint(['1861-01-01', '2005-12-31'])
    
    rndt_cube = iris.load_cube(rndt_file, 'TOA Incoming Net Radiation' & time_constraint)
    hfds_cube = iris.load_cube(hfds_file, 'surface_downward_heat_flux_in_sea_water' & time_constraint)
    ohc_cube = iris.load_cube(ohc_file, 'ocean heat content' & time_constraint)
    hfbasin_cube = iris.load_cube(hfbasin_file, 'northward_ocean_heat_transport' & time_constraint)
    
    rndt_anomaly = calc_anomaly(rndt_cube)
    hfds_anomaly = calc_anomaly(hfds_cube)
    ohc_anomaly = calc_anomaly(ohc_cube)
    hfbasin_anomaly = calc_anomaly(hfbasin_cube)
    
    ocean_convergence = ohc_anomaly[-1, ::] - hfds_anomaly[-1, ::]
    hfbasin_inferred = ocean_convergence.copy()
    hfbasin_inferred.data = numpy.ma.cumsum(-1 * ocean_convergence.data)
    
    atmos_convergence = hfds_anomaly[-1, ::] - rndt_anomaly[-1, ::]
    hfatmos_inferred = atmos_convergence.copy()
    hfatmos_inferred.data = numpy.ma.cumsum(-1 * atmos_convergence.data)
    
    return rndt_anomaly, hfds_anomaly, ohc_anomaly, hfbasin_anomaly, hfbasin_inferred, hfatmos_inferred

In [47]:
def plot_uptake_storage(ohc_anomaly, hfds_anomaly, rndt_anomaly):
    """Plot the ocean heat uptake and storage"""

    fig, ax = plt.subplots(figsize=[12, 6])

    iplt.plot(ohc_anomaly[-1, ::], color='blue', label='OHC')
    iplt.plot(hfds_anomaly[-1, ::], color='orange', label='hfds')
    iplt.plot(rndt_anomaly[-1, ::], color='red', label='rndt')

    plt.xlabel('latitude')
    plt.ylabel('J')
    plt.xlim(-90, 90)

    plt.axhline(y=0, color='0.5', linestyle='--')

    plt.legend()
    plt.show()

In [48]:
def plot_transport(hfbasin_anomaly_data, hfbasin_anomaly_inferred, hfatmos_anomaly_inferred):
    """Plot the northward ocean heat transport"""

    fig, ax = plt.subplots(figsize=[12, 6])

    iplt.plot(hfbasin_anomaly_data[-1, ::], color='purple', label='northward OHT')
    iplt.plot(hfbasin_anomaly_inferred, color='purple', linestyle='--', label='inferred northward OHT')
    iplt.plot(hfatmos_anomaly_inferred, color='green', linestyle='--', label='inferred northward AHT')

    plt.xlabel('latitude')
    plt.ylabel('J')
    plt.xlim(-90, 90)

    plt.axhline(y=0, color='0.5', linestyle='--')

    plt.legend()
    plt.show()

GISS-E2-R model


In [6]:
hfds_anomaly, ohc_anomaly, hfbasin_anomaly, hfbasin_inferred = get_data('GISS-E2-R')

In [7]:
plot_uptake_storage(ohc_anomaly, hfds_anomaly)



In [8]:
ohc_anomaly[-1, ::].data.sum()


Out[8]:
6.364347690804366e+23

In [9]:
hfds_anomaly[-1, ::].data.sum()


Out[9]:
6.4163868377649319e+23

The OHC and HFDS totals match the corresponding global timeseries.


In [10]:
plot_transport(hfbasin_anomaly, hfbasin_inferred)



In [21]:
hfbasin_anomaly[-1, ::].data.sum()


Out[21]:
7.1188571928101061e+24

In [22]:
hfbasin_inferred.data.sum()


Out[22]:
7.4979635946838421e+24

CSIRO-Mk3-6-0 model


In [13]:
hfds_anomaly, ohc_anomaly, hfbasin_anomaly, hfbasin_inferred = get_data('CSIRO-Mk3-6-0')

In [14]:
plot_uptake_storage(ohc_anomaly, hfds_anomaly)



In [15]:
ohc_anomaly[-1, ::].data.sum()


Out[15]:
2.6108229638745892e+23

In [16]:
hfds_anomaly[-1, ::].data.sum()


Out[16]:
2.5853625604736401e+23

In [34]:
hfds_anomaly.coord('latitude')


Out[34]:
DimCoord(array([-88.19520569, -87.23976898, -86.29711151, -85.35873413,
       -84.4223175 , -83.48703003, -82.55240631, -81.6182251 ,
       -80.68434906, -79.7507019 , -78.81723022, -77.88388824,
       -76.95063782, -76.01745605, -75.08435059, -74.15130615,
       -73.21829224, -72.28531647, -71.35237885, -70.41947174,
       -69.4865799 , -68.55371857, -67.6208725 , -66.68803406,
       -65.75521088, -64.82240295, -63.88960648, -62.95682526,
       -62.02405167, -61.09127808, -60.15851593, -59.22576523,
       -58.29301834, -57.36027145, -56.42753601, -55.49480438,
       -54.56207275, -53.62934494, -52.69662476, -51.76390076,
       -50.83118439, -49.89847183, -48.96576309, -48.03305435,
       -47.10034561, -46.16764069, -45.23493958, -44.30224228,
       -43.36954498, -42.43684769, -41.50415421, -40.57146072,
       -39.63876724, -38.70608139, -37.77339172, -36.84070206,
       -35.9080162 , -34.97533035, -34.0426445 , -33.10995865,
       -32.17728043, -31.2446003 , -30.31191826, -29.37924004,
       -28.44655991, -27.51387787, -26.58119965, -25.64852142,
       -24.71584511, -23.78316879, -22.85049057, -21.91781425,
       -20.98513794, -20.05246353, -19.11978912, -18.18711472,
       -17.25444221, -16.32176781, -15.38909435, -14.45641994,
       -13.52374744, -12.59107494, -11.65840244, -10.72572994,
        -9.7930584 ,  -8.86038685,  -7.92771482,  -6.9950428 ,
        -6.06237173,  -5.12970066,  -4.19702959,  -3.26435828,
        -2.33168721,  -1.39901614,  -0.46634024,   0.46634024,
         1.39901614,   2.33168721,   3.26435828,   4.19702959,
         5.12970066,   6.06237173,   6.9950428 ,   7.92771482,
         8.86038685,   9.7930584 ,  10.72572994,  11.65840244,
        12.59107494,  13.52374744,  14.45641994,  15.38909435,
        16.32176781,  17.25444221,  18.18711472,  19.11978912,
        20.05246353,  20.98513794,  21.91781425,  22.85049057,
        23.78316879,  24.71584511,  25.64852142,  26.58119965,
        27.51387787,  28.44655991,  29.37924004,  30.31191826,
        31.2446003 ,  32.17728043,  33.10995865,  34.0426445 ,
        34.97533035,  35.9080162 ,  36.84070206,  37.77339172,
        38.70608139,  39.63876724,  40.57146072,  41.50415421,
        42.43684769,  43.36954498,  44.30224228,  45.23493958,
        46.16764069,  47.10034561,  48.03305435,  48.96576309,
        49.89847183,  50.83118439,  51.76390076,  52.69662476,
        53.62934494,  54.56207275,  55.49480438,  56.42753601,
        57.36027145,  58.29301834,  59.22576523,  60.15851593,
        61.09127808,  62.02405167,  62.95682526,  63.88960648,
        64.82240295,  65.75521088,  66.68803406,  67.6208725 ,
        68.55371857,  69.4865799 ,  70.41947174,  71.35237885,
        72.28531647,  73.21829224,  74.15130615,  75.08435059,
        76.01745605,  76.95063782,  77.88388824,  78.81723022,
        79.7507019 ,  80.68434906,  81.6182251 ,  82.55240631,
        83.48703003,  84.4223175 ,  85.35873413,  86.29711151,  87.23976898]), bounds=array([[ -9.00000000e+01,  -8.77126160e+01],
       [ -8.77126160e+01,  -8.67669220e+01],
       [ -8.67669220e+01,  -8.58273010e+01],
       [ -8.58273010e+01,  -8.48901672e+01],
       [ -8.48901672e+01,  -8.39544754e+01],
       [ -8.39544754e+01,  -8.30195847e+01],
       [ -8.30195847e+01,  -8.20852280e+01],
       [ -8.20852280e+01,  -8.11512222e+01],
       [ -8.11512222e+01,  -8.02174835e+01],
       [ -8.02174835e+01,  -7.92839279e+01],
       [ -7.92839279e+01,  -7.83505325e+01],
       [ -7.83505325e+01,  -7.74172440e+01],
       [ -7.74172440e+01,  -7.64840317e+01],
       [ -7.64840317e+01,  -7.55508881e+01],
       [ -7.55508881e+01,  -7.46178207e+01],
       [ -7.46178207e+01,  -7.36847916e+01],
       [ -7.36847916e+01,  -7.27518005e+01],
       [ -7.27518005e+01,  -7.18188400e+01],
       [ -7.18188400e+01,  -7.08859253e+01],
       [ -7.08859253e+01,  -6.99530182e+01],
       [ -6.99530182e+01,  -6.90201492e+01],
       [ -6.90201492e+01,  -6.80872955e+01],
       [ -6.80872955e+01,  -6.71544495e+01],
       [ -6.71544495e+01,  -6.62216187e+01],
       [ -6.62216187e+01,  -6.52888107e+01],
       [ -6.52888107e+01,  -6.43560028e+01],
       [ -6.43560028e+01,  -6.34232140e+01],
       [ -6.34232140e+01,  -6.24904366e+01],
       [ -6.24904366e+01,  -6.15576668e+01],
       [ -6.15576668e+01,  -6.06248932e+01],
       [ -6.06248932e+01,  -5.96921425e+01],
       [ -5.96921425e+01,  -5.87593918e+01],
       [ -5.87593918e+01,  -5.78266449e+01],
       [ -5.78266449e+01,  -5.68939018e+01],
       [ -5.68939018e+01,  -5.59611702e+01],
       [ -5.59611702e+01,  -5.50284386e+01],
       [ -5.50284386e+01,  -5.40957069e+01],
       [ -5.40957069e+01,  -5.31629868e+01],
       [ -5.31629868e+01,  -5.22302628e+01],
       [ -5.22302628e+01,  -5.12975426e+01],
       [ -5.12975426e+01,  -5.03648262e+01],
       [ -5.03648262e+01,  -4.94321175e+01],
       [ -4.94321175e+01,  -4.84994087e+01],
       [ -4.84994087e+01,  -4.75667000e+01],
       [ -4.75667000e+01,  -4.66339951e+01],
       [ -4.66339951e+01,  -4.57012901e+01],
       [ -4.57012901e+01,  -4.47685928e+01],
       [ -4.47685928e+01,  -4.38358917e+01],
       [ -4.38358917e+01,  -4.29031982e+01],
       [ -4.29031982e+01,  -4.19705009e+01],
       [ -4.19705009e+01,  -4.10378075e+01],
       [ -4.10378075e+01,  -4.01051140e+01],
       [ -4.01051140e+01,  -3.91724243e+01],
       [ -3.91724243e+01,  -3.82397385e+01],
       [ -3.82397385e+01,  -3.73070488e+01],
       [ -3.73070488e+01,  -3.63743591e+01],
       [ -3.63743591e+01,  -3.54416733e+01],
       [ -3.54416733e+01,  -3.45089874e+01],
       [ -3.45089874e+01,  -3.35763016e+01],
       [ -3.35763016e+01,  -3.26436195e+01],
       [ -3.26436195e+01,  -3.17109413e+01],
       [ -3.17109413e+01,  -3.07782593e+01],
       [ -3.07782593e+01,  -2.98455791e+01],
       [ -2.98455791e+01,  -2.89129009e+01],
       [ -2.89129009e+01,  -2.79802189e+01],
       [ -2.79802189e+01,  -2.70475388e+01],
       [ -2.70475388e+01,  -2.61148605e+01],
       [ -2.61148605e+01,  -2.51821823e+01],
       [ -2.51821823e+01,  -2.42495079e+01],
       [ -2.42495079e+01,  -2.33168297e+01],
       [ -2.33168297e+01,  -2.23841534e+01],
       [ -2.23841534e+01,  -2.14514771e+01],
       [ -2.14514771e+01,  -2.05188007e+01],
       [ -2.05188007e+01,  -1.95861263e+01],
       [ -1.95861263e+01,  -1.86534519e+01],
       [ -1.86534519e+01,  -1.77207794e+01],
       [ -1.77207794e+01,  -1.67881050e+01],
       [ -1.67881050e+01,  -1.58554316e+01],
       [ -1.58554316e+01,  -1.49227571e+01],
       [ -1.49227571e+01,  -1.39900837e+01],
       [ -1.39900837e+01,  -1.30574121e+01],
       [ -1.30574121e+01,  -1.21247387e+01],
       [ -1.21247387e+01,  -1.11920662e+01],
       [ -1.11920662e+01,  -1.02593946e+01],
       [ -1.02593946e+01,  -9.32672310e+00],
       [ -9.32672310e+00,  -8.39405155e+00],
       [ -8.39405155e+00,  -7.46137857e+00],
       [ -7.46137857e+00,  -6.52870750e+00],
       [ -6.52870750e+00,  -5.59603643e+00],
       [ -5.59603643e+00,  -4.66336489e+00],
       [ -4.66336489e+00,  -3.73069406e+00],
       [ -3.73069406e+00,  -2.79802275e+00],
       [ -2.79802275e+00,  -1.86535180e+00],
       [ -1.86535180e+00,  -9.32680488e-01],
       [ -9.32680488e-01,   3.69999924e-08],
       [  3.69999924e-08,   9.32680488e-01],
       [  9.32680488e-01,   1.86535180e+00],
       [  1.86535180e+00,   2.79802275e+00],
       [  2.79802275e+00,   3.73069406e+00],
       [  3.73069406e+00,   4.66336489e+00],
       [  4.66336489e+00,   5.59603643e+00],
       [  5.59603643e+00,   6.52870750e+00],
       [  6.52870750e+00,   7.46137857e+00],
       [  7.46137857e+00,   8.39405155e+00],
       [  8.39405155e+00,   9.32672310e+00],
       [  9.32672310e+00,   1.02593946e+01],
       [  1.02593946e+01,   1.11920662e+01],
       [  1.11920662e+01,   1.21247387e+01],
       [  1.21247387e+01,   1.30574121e+01],
       [  1.30574121e+01,   1.39900837e+01],
       [  1.39900837e+01,   1.49227571e+01],
       [  1.49227571e+01,   1.58554316e+01],
       [  1.58554316e+01,   1.67881050e+01],
       [  1.67881050e+01,   1.77207794e+01],
       [  1.77207794e+01,   1.86534519e+01],
       [  1.86534519e+01,   1.95861263e+01],
       [  1.95861263e+01,   2.05188007e+01],
       [  2.05188007e+01,   2.14514771e+01],
       [  2.14514771e+01,   2.23841534e+01],
       [  2.23841534e+01,   2.33168297e+01],
       [  2.33168297e+01,   2.42495079e+01],
       [  2.42495079e+01,   2.51821823e+01],
       [  2.51821823e+01,   2.61148605e+01],
       [  2.61148605e+01,   2.70475388e+01],
       [  2.70475388e+01,   2.79802189e+01],
       [  2.79802189e+01,   2.89129009e+01],
       [  2.89129009e+01,   2.98455791e+01],
       [  2.98455791e+01,   3.07782593e+01],
       [  3.07782593e+01,   3.17109413e+01],
       [  3.17109413e+01,   3.26436195e+01],
       [  3.26436195e+01,   3.35763016e+01],
       [  3.35763016e+01,   3.45089874e+01],
       [  3.45089874e+01,   3.54416733e+01],
       [  3.54416733e+01,   3.63743591e+01],
       [  3.63743591e+01,   3.73070488e+01],
       [  3.73070488e+01,   3.82397385e+01],
       [  3.82397385e+01,   3.91724243e+01],
       [  3.91724243e+01,   4.01051140e+01],
       [  4.01051140e+01,   4.10378075e+01],
       [  4.10378075e+01,   4.19705009e+01],
       [  4.19705009e+01,   4.29031982e+01],
       [  4.29031982e+01,   4.38358917e+01],
       [  4.38358917e+01,   4.47685928e+01],
       [  4.47685928e+01,   4.57012901e+01],
       [  4.57012901e+01,   4.66339951e+01],
       [  4.66339951e+01,   4.75667000e+01],
       [  4.75667000e+01,   4.84994087e+01],
       [  4.84994087e+01,   4.94321175e+01],
       [  4.94321175e+01,   5.03648262e+01],
       [  5.03648262e+01,   5.12975426e+01],
       [  5.12975426e+01,   5.22302628e+01],
       [  5.22302628e+01,   5.31629868e+01],
       [  5.31629868e+01,   5.40957069e+01],
       [  5.40957069e+01,   5.50284386e+01],
       [  5.50284386e+01,   5.59611702e+01],
       [  5.59611702e+01,   5.68939018e+01],
       [  5.68939018e+01,   5.78266449e+01],
       [  5.78266449e+01,   5.87593918e+01],
       [  5.87593918e+01,   5.96921425e+01],
       [  5.96921425e+01,   6.06248932e+01],
       [  6.06248932e+01,   6.15576668e+01],
       [  6.15576668e+01,   6.24904366e+01],
       [  6.24904366e+01,   6.34232140e+01],
       [  6.34232140e+01,   6.43560028e+01],
       [  6.43560028e+01,   6.52888107e+01],
       [  6.52888107e+01,   6.62216187e+01],
       [  6.62216187e+01,   6.71544495e+01],
       [  6.71544495e+01,   6.80872955e+01],
       [  6.80872955e+01,   6.90201492e+01],
       [  6.90201492e+01,   6.99530182e+01],
       [  6.99530182e+01,   7.08859253e+01],
       [  7.08859253e+01,   7.18188400e+01],
       [  7.18188400e+01,   7.27518005e+01],
       [  7.27518005e+01,   7.36847916e+01],
       [  7.36847916e+01,   7.46178207e+01],
       [  7.46178207e+01,   7.55508881e+01],
       [  7.55508881e+01,   7.64840317e+01],
       [  7.64840317e+01,   7.74172440e+01],
       [  7.74172440e+01,   7.83505325e+01],
       [  7.83505325e+01,   7.92839279e+01],
       [  7.92839279e+01,   8.02174835e+01],
       [  8.02174835e+01,   8.11512222e+01],
       [  8.11512222e+01,   8.20852280e+01],
       [  8.20852280e+01,   8.30195847e+01],
       [  8.30195847e+01,   8.39544754e+01],
       [  8.39544754e+01,   8.48901672e+01],
       [  8.48901672e+01,   8.58273010e+01],
       [  8.58273010e+01,   8.67669220e+01],
       [  8.67669220e+01,   8.77126160e+01]]), standard_name='latitude', units=Unit('degrees'), long_name='latitude', var_name='lat')

In [19]:
data_lat_bounds = hfds_anomaly.coord('latitude').bounds
data_lat_diffs = numpy.apply_along_axis(lambda x: x[1] - x[0], 1, data_lat_bounds)
data_lat_diffs


Out[19]:
array([ 2.28738403,  0.94569397,  0.93962097,  0.93713379,  0.93569183,
        0.93489075,  0.93435669,  0.93400574,  0.93373871,  0.9335556 ,
        0.93339539,  0.93328857,  0.93321228,  0.93314362,  0.93306732,
        0.93302917,  0.93299103,  0.93296051,  0.93291473,  0.9329071 ,
        0.93286896,  0.9328537 ,  0.93284607,  0.93283081,  0.93280792,
        0.93280792,  0.93278885,  0.9327774 ,  0.93276978,  0.93277359,
        0.9327507 ,  0.9327507 ,  0.93274689,  0.93274307,  0.93273163,
        0.93273163,  0.93273163,  0.93272018,  0.932724  ,  0.93272018,
        0.93271637,  0.93270874,  0.93270874,  0.93270874,  0.93270493,
        0.93270493,  0.9326973 ,  0.93270111,  0.93269348,  0.9326973 ,
        0.93269348,  0.93269348,  0.93268967,  0.93268585,  0.93268967,
        0.93268967,  0.93268585,  0.93268585,  0.93268585,  0.93268204,
        0.93267822,  0.93268204,  0.93268013,  0.93267822,  0.93268204,
        0.93268013,  0.93267822,  0.93267822,  0.93267441,  0.93267822,
        0.93267632,  0.93267632,  0.93267632,  0.93267441,  0.93267441,
        0.9326725 ,  0.93267441,  0.93267345,  0.93267441,  0.93267345,
        0.93267155,  0.93267345,  0.9326725 ,  0.93267155,  0.93267155,
        0.93267155,  0.93267298,  0.93267107,  0.93267107,  0.93267155,
        0.93267083,  0.93267131,  0.93267095,  0.93267131,  0.93268052,
        0.93268045,  0.93267131,  0.93267095,  0.93267131,  0.93267083,
        0.93267155,  0.93267107,  0.93267107,  0.93267298,  0.93267155,
        0.93267155,  0.93267155,  0.9326725 ,  0.93267345,  0.93267155,
        0.93267345,  0.93267441,  0.93267345,  0.93267441,  0.9326725 ,
        0.93267441,  0.93267441,  0.93267632,  0.93267632,  0.93267632,
        0.93267822,  0.93267441,  0.93267822,  0.93267822,  0.93268013,
        0.93268204,  0.93267822,  0.93268013,  0.93268204,  0.93267822,
        0.93268204,  0.93268585,  0.93268585,  0.93268585,  0.93268967,
        0.93268967,  0.93268585,  0.93268967,  0.93269348,  0.93269348,
        0.9326973 ,  0.93269348,  0.93270111,  0.9326973 ,  0.93270493,
        0.93270493,  0.93270874,  0.93270874,  0.93270874,  0.93271637,
        0.93272018,  0.932724  ,  0.93272018,  0.93273163,  0.93273163,
        0.93273163,  0.93274307,  0.93274689,  0.9327507 ,  0.9327507 ,
        0.93277359,  0.93276978,  0.9327774 ,  0.93278885,  0.93280792,
        0.93280792,  0.93283081,  0.93284607,  0.9328537 ,  0.93286896,
        0.9329071 ,  0.93291473,  0.93296051,  0.93299103,  0.93302917,
        0.93306732,  0.93314362,  0.93321228,  0.93328857,  0.93339539,
        0.9335556 ,  0.93373871,  0.93400574,  0.93435669,  0.93489075,
        0.93569183,  0.93713379,  0.93962097,  0.94569397])

In [26]:
hfds_scaled = hfds_anomaly / data_lat_diffs

In [37]:
new_points = [('latitude', numpy.arange(-89.25, 90, 1.5))]
hfds_new_grid = hfds_scaled.interpolate(new_points, iris.analysis.Linear())

In [39]:
hfds_new = hfds_new_grid * 1.5

In [40]:
iplt.plot(hfds_new[-1, ::], color='orange', label='hfds')
plt.xlabel('latitude')
plt.ylabel('J')
plt.xlim(-90, 90)

plt.show()



In [41]:
hfds_new[-1, ::].data.sum()


Out[41]:
2.5913421953354298e+23

In [78]:
plot_transport(hfbasin_anomaly, hfbasin_inferred)


NorESM1-M model


In [51]:
rndt_anomaly, hfds_anomaly, ohc_anomaly, hfbasin_anomaly, hfbasin_inferred, hfatmos_inferred = get_data('NorESM1-M')

In [58]:
test = False == hfds_anomaly.coord('latitude')
test


Out[58]:
False

In [52]:
plot_uptake_storage(ohc_anomaly, hfds_anomaly, rndt_anomaly)



In [45]:
ohc_anomaly[-1, ::].data.sum()


Out[45]:
3.4115929043061089e+23

In [46]:
hfds_anomaly[-1, ::].data.sum()


Out[46]:
3.4314595028625567e+23

In [53]:
rndt_anomaly[-1, ::].data.sum()


Out[53]:
2.9997394871957854e+23

The HFDS totals match the corresponding global timeseries, but it seems regridding has wrecked the OHC values (the amplitude has dropped appreciably).


In [54]:
plot_transport(hfbasin_anomaly, hfbasin_inferred, hfatmos_inferred)


2. Linear trend

This is often the approach taken when looking at a single aspect of the energy budget in isolation (e.g. Shi et al, submitted). My preliminary results are presented as linear trends.

3. OHC tendency

This is the approach taken by Nummelin et al (2017). I look at it in some detail here.


In [ ]: