-
Notifications
You must be signed in to change notification settings - Fork 5
paper notes: water masses
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.
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. TheEXPERIMENT
andSF_VAR
variables are required. -
sf-raw-cntrl
: Surface flux binning for the piControl experiment. TheSF_VAR
variable is required. -
water-mass-exp
: Water mass (i.e. ocean volume) binning for a particular experiment. TheEXPERIMENT
variable is required. -
water-mass-cntrl
: Water mass (i.e. ocean volume) binning for thepiControl
experiment. -
surface-water-mass-exp
: Surface water mass (i.e. ocean surface area) binning for a particular experiment. TheEXPERIMENT
variable is required. -
surface-water-mass-cntrl
: Surface water mass (i.e. ocean surface area) binning for thepiControl
experiment.
Variables:
-
MODEL
can be the models listed in the tables below -
EXPERIMENT
can behistorical
,hist-GHG
orhist-aer
-
SF_VAR
can bewfo
orhfds
-
BIN_FREQ
can bemon
(for monthly binning) oryr
(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
The coordinates used in the data files include:
-
year
: "year" -
so
: "Sea Water Salinity" orsos
: "Sea Surface Salinity" -
thetao
: "Sea Water Potential Temperature" ortos
: "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.)
(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"
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
.
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
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:
-
mom_to_cmip_2d.sh
andmom_to_cmip_3d.sh
to convert files to CMIP6 format. -
ocean_diagnostics.mk
to do the temperature and salinity binning.
SFCH = temp_vdiffuse_sbc + sw_heat + frazil_3d + # 3D vars
temp_eta_smooth; # 2D vars
SFCV = temp_rivermix + # 3D vars
sfc_hflux_pme # 2D vars
SWR = sw_heat # 3D vars
VMIX = temp_vdiffuse_diff_cbt + temp_nonlocal_KPP # 3D vars
SMIX = mixdownslope_temp + temp_sigma_diff # 3D vars
RMIX = temp_vdiffuse_k33 + neutral_diffusion_temp # 3D vars
TEN = temp_tendency # 3D vars
SFC = SFCH + SFCV
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
MIX = VMIX+SMIX+RMIX
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).