Skip to content

paper notes: water masses

Damien Irving edited this page Aug 17, 2021 · 106 revisions

Manuscripts

Sohail T, Irving D, Zika J, Holmes R, Church J (2021). Fifty year trends in global ocean heat content traced to surface heat fluxes in the sub‐polar ocean. Geophysical Research Letters. 48(8), e2020GL091439. doi:10.1029/2020GL091439

Sohail T, Zika J, Irving D, Church J (in prep). Historical changes in fresh water transport from sub-tropical to sub-polar oceans. Nature Geoscience.

Holmes et al (in prep). Observed and Modelled Ocean Heat Content Change in Temperature Coordinates. Geophysical Research Letters.

CMIP6 Data

T and S binned variables

Code

Binning can be done by cloning the code from GitHub and then running the relevant Makefile. For example:

$ git clone https://github.com/DamienIrving/ocean-analysis.git
$ cd ocean-analysis/workflows
$ make sf-raw-exp -f water_mass_analysis.mk MODEL=ACCESS-CM2 EXPERIMENT=historical SF_VAR=wfo BIN_FREQ=mon

(When you first clone the repo you'll need to update the DATA_SCRIPT_DIR and VIZ_SCRIPT_DIR variables at the top of ocean-analysis/workflows/cmip_config.mk so they point to wherever the cloned ocean_analysis/data_processing and ocean-analysis/visualisation directories are on your machine.)

The MODEL and BIN_FREQ variables need to be provided for all targets. Other variables might be required depending on the target. Possible targets are:

  • sf-raw-exp: Surface flux binning for a particular experiment. The EXPERIMENT and SF_VAR variables are required.
  • sf-raw-cntrl: Surface flux binning for the piControl experiment. The SF_VAR variable is required.
  • water-mass-exp: Water mass (i.e. ocean volume) binning for a particular experiment. The EXPERIMENT variable is required.
  • water-mass-cntrl: Water mass (i.e. ocean volume) binning for the piControl experiment.
  • surface-water-mass-exp: Surface water mass (i.e. ocean surface area) binning for a particular experiment. The EXPERIMENT variable is required.
  • surface-water-mass-cntrl: Surface water mass (i.e. ocean surface area) binning for the piControl experiment.

Variables:

  • MODEL can be the models listed in the tables below
  • EXPERIMENT can be historical, hist-GHG or hist-aer
  • SF_VAR can be wfo or hfds
  • BIN_FREQ can be mon (for monthly binning) or yr (for annual)

The workflow is configured for one particular run (e.g. r1i1p1f1) for each model and experiment combination, but you can hack that configuration by overriding the run at the command line (e.g. ACCESS-ESM1-5_EXP_RUN=r12i1p1f1).

Other useful make options:

  • -n: dry run (i.e. show the commands but don't run them)
  • -B: force make (i.e. regenerate the target even if it's up-to-date)

e.g. $ make water-mass-cntrl -B -n -f water_mass_analysis.mk MODEL=CAMS-CSM1-0 BIN_FREQ=mon

File coordinates

The coordinates used in the data files include:

  • year: "year"
  • so: "Sea Water Salinity" or sos: "Sea Surface Salinity"
  • thetao: "Sea Water Potential Temperature" or tos: "Sea Surface Temperature"
  • basin, "Region Selection Index"
    • 11: north_atlantic
    • 12: south_atlantic
    • 13: north_pacific
    • 14: south_pacific
    • 15: indian
    • 16: arctic
    • 17: marginal_seas
    • 18: land
    • 19: globe

(Where the globe includes everything except marginal seas and land.)

File types/contents

(Oyr and Omon in file names denote annual and monthly binning, respectively.)

wfo-tos-sos-binned

  • wfo_tbin(year, tos, basin) "water_flux_into_sea_water_binned_by_temperature"
  • wfo_sbin(year, sos, basin) "water_flux_into_sea_water_binned_by_salinity"
  • wfo_tsbin(year, sos, tos, basin) "water_flux_into_sea_water_binned_by_temperature_and_salinity"

hfds-tos-sos-binned

  • hfds_tbin(year, tos, basin) "surface_downward_heat_flux_in_sea_water_binned_by_temperature"
  • hfds_sbin(year, sos, basin) "surface_downward_heat_flux_in_sea_water_binned_by_salinity"
  • hfds_tsbin(year, sos, tos, basin) "surface_downward_heat_flux_in_sea_water_binned_by_temperature_and_salinity"

surface-water-mass

  • areacello_tbin(year, tos, basin) "cell_area_binned_by_temperature"
  • areacello_sbin(year, sos, basin) "cell_area_binned_by_salinity"
  • areacello_tsbin(year, sos, tos, basin) "cell_area_binned_by_temperature_and_salinity"
  • sos_areacello_tbin(year, tos, basin) "sea_surface_salinity_times_cell_area_binned_by_temperature"
  • sos_areacello_sbin(year, sos, basin) "sea_surface_salinity_times_cell_area_binned_by_salinity"
  • sos_areacello_tsbin(year, sos, tos, basin) "sea_surface_salinity_times_cell_area_binned_by_temperature_and_salinity"
  • tos_areacello_tbin(year, tos, basin) "sea_surface_temperature_times_cell_area_binned_by_temperature"
  • tos_areacello_sbin(year, sos, basin) "sea_surface_temperature_times_cell_area_binned_by_salinity"
  • tos_areacello_tsbin(year, sos, tos, basin) "sea_surface_temperature_times_cell_area_binned_by_temperature_and_salinity"

water-mass

  • volcello_tbin(year, thetao, basin) "ocean_volume_binned_by_temperature"
  • volcello_sbin(year, so, basin) "ocean_volume_binned_by_salinity"
  • volcello_tsbin(year, so, thetao, basin) "ocean_volume_binned_by_temperature_and_salinity"
  • so_volcello_sbin(year, thetao, basin) "sea_water_salinity_times_ocean_volume_binned_by_temperature"
  • so_volcello_sbin(year, so, basin) "sea_water_salinity_times_ocean_volume_binned_by_salinity"
  • so_volcello_tsbin(year, so, thetao, basin) "sea_water_salinity_times_ocean_volume_binned_by_temperature_and_salinity"
  • thetao_volcello_sbin(year, thetao, basin) "sea_water_potential_temperature_times_ocean_volume_binned_by_temperature"
  • thetao_volcello_sbin(year, so, basin) "sea_water_potential_temperature_times_ocean_volume_binned_by_salinity"
  • thetao_volcello_tsbin(year, so, thetao, basin) "sea_water_potential_temperature_times_ocean_volume_binned_by_temperature_and_salinity"

Sea surface and zonal mean salinity (and temperature)

The salinity / freshwater changes paper has a plot showing sea surface salinity trends (with a temperature percentile overlay) as well as the zonal mean depth trends for the Atlantic and Indo-Pacific.

Surface and zonal mean depth data for each CMIP model (remapped to the same grid as the observations) can be generated by cloning the code from GitHub and then running the relevant Makefile. For example:

$ git clone https://github.com/DamienIrving/ocean-analysis.git
$ cd ocean-analysis/workflows
$ make full-depth -f ocean_depth_analysis.mk MODEL=ACCESS-CM2 EXPERIMENT=historical BASIN=atlantic VAR=thetao

(When you first clone the repo you'll need to update the DATA_SCRIPT_DIR and VIZ_SCRIPT_DIR variables at the top of ocean-analysis/workflows/cmip_config.mk so they point to wherever the cloned ocean_analysis/data_processing and ocean-analysis/visualisation directories are on your machine.)

Valid targets are full-depth (for the zonal mean depth changes) and surface (for the sea surface salinity or temperature). The MODEL, EXPERIMENT and VAR (which can be so or thetao) variables need to be provided for both targets, while the full-depth target also requires a BASIN variable which can be set to atlantic, indo-pacific or globe (which excludes the marginal seas).

To remap the corresponding surface heat (hfds) or freshwater (wfo) flux, run the following (the VAR choices are hfds and wfo):

$ make all -f surface_flux_remapping.mk MODEL=ACCESS-CM2 EXPERIMENT=historical VAR=wfo

It will process the control experiment as well as the selected forced EXPERIMENT.

Models

All models listed below have archived the thetao and so variables for both the historical and piControl experiments. The limiting factor on the size of the ensembles for the various papers being written is the availability of the wfo or hfds variable.

  • ✔️ - has been processed
  • ✅ - might be included in the ensemble (the data exists) but not yet processed
  • 🚫 - there's something (prohibitively) wrong with the data
  • ❌ - data doesn't exist
Model wfo hfds branch time problems
ACCESS-CM2 ✔️ ✔️ Control year: 950 (index: 0)
ACCESS-ESM1-5 ✔️ ✔️ Control year: 161 (index: 60)
AWI-CM-1-1-MR 🚫 🚫 no areacello or volcello data
AWI-ESM-1-1-LR 🚫 🚫 no areacello or volcello data
BCC-CSM2-MR
BCC-ESM1
CAMS-CSM1-0 ✔️ Control year: 3025 (index: 125)
CAS-ESM2-0 🚫 🚫 wfo and hfds fluxes way too small and weird spatial pattern
CanESM5 ✔️ ✔️ Control year: 5201 (index: 0)
CanESM5-CanOE** ✔️ ✔️ Control year: 5547 (index: 0)
CESM2 ✔️ Control year: 600 (index: 599)
CESM2-FV2 ✔️ Control year: 30 (index: 29)
CESM2-WACCM-FV2 ✔️ Control year: 30 (index: 29)
CESM2-WACCM ✔️ Control year: 55 (index: 54)
CIESM ✔️ Control year: 1 (index: 0)
CMCC-CM2-SR5** ✔️ Control year: 1850 (index: 0)
CNRM-CM6-1 ✔️ ✔️ Control year: 1850 (index: 0)
CNRM-CM6-1-HR high resolution
CNRM-ESM2-1 ✔️ ✔️ Control year: 1850 (index: 0)
E3SM-1-0* 🚫 🚫 ocean volume problem
E3SM-1-1* 🚫 🚫 ocean volume problem
EC-Earth3 ✔️ ✔️ Control year: 2259 (index: 0)
EC-Earth3-Veg ✔️ ✔️ Control year: 1930 (index: 80)
EC-Earth3-Veg-LR** ✔️ ✔️ Control year: 2300 (index: 0)
FGOALS-f3-L ✔️ 🚫 Control year: 600 (index: 0) Something wrong with hfds data
FGOALS-g3 thetao, historical doesn't exist for r1i1p1f1, missing for other runs
GFDL-CM4 high resolution
GFDL-ESM4 ✔️ Control year: 100 (index: 99)
GISS-E2-1-G* 🚫 ✔️ Control year: 4150 (index: 0) pr dominates wfo
GISS-E2-1-G-CC* 🚫 ✔️ Control year: 1850 (index: 0) pr dominates wfo
GISS-E2-1-H 🚫 Something wrong with the thetao and/or volcello data. Can't figure out quite what.
HadGEM3-GC31-LL ✔️ ✔️ Control year: 1850 (index: 0)
INM-CM4-8
INM-CM5-0
IPSL-CM6A-LR ✔️ ✔️ r1i1p1f1: Control year 1910 (index 60); r9i1p1f1: Control year 2440 (index 7079) Missing control data for hfds (just process 1850-2849 instead of 1850-3849 for that variable)
MCM-UA-1-0 ✔️ Control year: 1 (index: 0)
MIROC-ES2L ✔️ Control year: 1850 (index: 0)
MIROC6
MPI-ESM1-2-HAM* 🚫 ✔️ Control year: 1850 (index: 0) first historical value doesn't match branch time control value, but the branch time seems correct
MPI-ESM1-2-HR* ✔️ ✔️ Control year: 1850 (index: 0)
MPI-ESM1-2-LR* ✔️ ✔️ Control year: 1850 (index: 0)
MRI-ESM2-0 🚫 🚫 ocean volume problem with gn and gr
NESM3 🚫 🚫 no areacello or volcello data
NorCPM1 ✔️ Control year: 1 (index: 0)
NorESM2-LM# ✔️ ✔️ Control year: 1600 (index: 0)
NorESM2-MM# ✔️ ✔️ Control year: 1200 (index: 0)
SAM0-UNICON 🚫 ✔️ Control year: 273 (index: 272) bad wfo - zero values everywhere
UKESM1-0-LL ✔️ ✔️ Control year: 2244 (index: 284)
Total ✔️ 18 30
Total ✅ 2 2

*Ocean mass budget doesn't close after de-drifting
**Haven't checked mass budget closure
#Virtual salt flux

Ocean diagnostics from MOM5 / ACCESS-CM2

The ACCESS-CM2 output is at:
/g/data/p66/cm2704/archive/bi889 (piControl)
/g/data/p66/cm2704/archive/bj594 (historical)
/g/data/p66/cm2704/archive/bu010 (hist-GHG, run 1)
/g/data/p66/cm2704/archive/bu839 (hist-GHG, run 2)
/g/data/p66/cm2704/archive/bu840 (hist-GHG, run 3)
/g/data/p66/cm2704/archive/bw966 (hist-aer, run 1)
/g/data/p66/cm2704/archive/bx128 (hist-aer, run 2)
/g/data/p66/cm2704/archive/bx129 (hist-aer, run 3)
/g/data/p66/cm2704/archive/by350 (hist-nat, run 1)
/g/data/p66/cm2704/archive/by438 (hist-nat, run 2)
/g/data/p66/cm2704/archive/by563 (hist-nat, run 3)

e.g. /g/data/p66/cm2704/archive/bj594/history/ocn/ocean_month.nc-20121231

The data processing involves:

  1. mom_to_cmip_2d.sh and mom_to_cmip_3d.sh to convert files to CMIP6 format.

  2. ocean_diagnostics.mk to do the temperature and salinity binning.

Surface heat fluxes (not including surface volume flux terms)

SFCH = temp_vdiffuse_sbc + sw_heat + frazil_3d + # 3D vars  
       temp_eta_smooth; # 2D vars

Surface heat fluxes from surface volume fluxes

SFCV = temp_rivermix + # 3D vars
       sfc_hflux_pme # 2D vars

Shortwave redistribution

SWR = sw_heat # 3D vars

Vertical mixing

VMIX = temp_vdiffuse_diff_cbt + temp_nonlocal_KPP # 3D vars

Miscellaneous mixing

SMIX = mixdownslope_temp + temp_sigma_diff # 3D vars

Neutral diffusion

RMIX = temp_vdiffuse_k33 + neutral_diffusion_temp # 3D vars

Total tendency

TEN = temp_tendency # 3D vars

Total surface forcing

SFC = SFCH + SFCV

Total internal surface forcing

SFCI = SFC - rho0*Cp*THETA*SVF

where SVF is the accumulated total surface volume flux above the temperature THETA in m3s-1, rho0 = 1035.0 kgm-3 and Cp = 3992.10322329649 J kg-1 degC-1

Total explicit mixing

MIX = VMIX+SMIX+RMIX

Numerical mixing (by residual)

NMIX = dHI/dt - SFCI - MIX

where dHI/dt is the internal heat content tendency (which will have to be calculated from the monthly average heat content as you've already done, although you could also try using TEN above).