- Introduction
- Greenland observations
- Greenland ISMIP
- Greenland merge
- Antarctic observations
- Antarctic ISMIP
- Antarctic merge
- Summary
- Appendix
- LaTeX Header
- Local Variables
This workbook
- Computes freshwater anomaly from Greenland and Antarctica for the NASA GISS ModelE.
- Anomaly is defined as mass loss from 1990 through 2100
- We use observed anomalies ~1990 through ~2020
- Greenland: 1990 – 2020
- Antarctica: 1994 through 2017; Data from 1990 – 1993 is extrapolated.
- We use ISMIP6 projections from 2020 through 2100
- {{{WARNING}}} Projections in Antarctica are only grounded ice, not ice shelf calving and melting, which is the majority of the observed mass loss.
citet:mankoff_2021 provide main ice sheet mass loss from 1840 through next week.
- Years with mass gain subtracted from following years
all mass change is 0. -
hi
andlo
years arepublished uncertainty from Mankoff (2021)
{{{SKIPLINE}}}
- Paper: https://doi.org/10.5194/essd-13-5001-2021
- Data: https://doi.org/10.22008/FK2/OHI23Z v439
import pandas as pd
obs_GL = pd.read_csv('./out/mass_change_no_gain_greenland.csv',
index_col=0,
parse_dates=True,
comment='#',
delim_whitespace=True,
names=['Gt/yr'])
obs_GL.index.name='Date'
Date | Gt/yr |
---|---|
1990-01-01 00:00:00 | 137.6 |
1991-01-01 00:00:00 | 76.7 |
1992-01-01 00:00:00 | 0 |
1993-01-01 00:00:00 | 3.6 |
1994-01-01 00:00:00 | 113.8 |
1995-01-01 00:00:00 | 211.9 |
1996-01-01 00:00:00 | 0 |
1997-01-01 00:00:00 | 0 |
1998-01-01 00:00:00 | 102 |
1999-01-01 00:00:00 | 47 |
2000-01-01 00:00:00 | 77.1 |
2001-01-01 00:00:00 | 26.1 |
2002-01-01 00:00:00 | 142.5 |
2003-01-01 00:00:00 | 167.2 |
2004-01-01 00:00:00 | 165.8 |
Date | Gt/yr |
---|---|
2005-01-01 00:00:00 | 168.4 |
2006-01-01 00:00:00 | 239.8 |
2007-01-01 00:00:00 | 257.3 |
2008-01-01 00:00:00 | 201.2 |
2009-01-01 00:00:00 | 243 |
2010-01-01 00:00:00 | 376.8 |
2011-01-01 00:00:00 | 336.2 |
2012-01-01 00:00:00 | 429.3 |
2013-01-01 00:00:00 | 107.9 |
2014-01-01 00:00:00 | 184.6 |
2015-01-01 00:00:00 | 213.9 |
2016-01-01 00:00:00 | 256 |
2017-01-01 00:00:00 | 102.6 |
2018-01-01 00:00:00 | 75.8 |
2019-01-01 00:00:00 | 426 |
import xarray as xr
ds = xr.open_dataset('./ISMIP6/emulandiceAIS_GIS_ssp245_globalsl_GT.nc')
ismip_GL = ds['GIS_sea_level_change']\
.to_dataframe()\
.unstack().T
ismip_GL.index = [pd.to_datetime(_[1], format='%Y') for _ in ismip_GL.index]
ismip_GL.index.name = 'Date'
Date | 50 | 17 | 83 |
---|---|---|---|
2020-01-01 00:00:00 | 1800 | 1440 | 2520 |
2030-01-01 00:00:00 | 3960 | 2880 | 5400 |
2040-01-01 00:00:00 | 6480 | 4680 | 9000 |
2050-01-01 00:00:00 | 10080 | 6840 | 13320 |
2060-01-01 00:00:00 | 12960 | 8640 | 18000 |
2070-01-01 00:00:00 | 16920 | 10800 | 23760 |
2080-01-01 00:00:00 | 20880 | 12240 | 30600 |
2090-01-01 00:00:00 | 25200 | 13320 | 37800 |
2100-01-01 00:00:00 | 27720 | 12600 | 45720 |
obs_GL_17_50_83 = pd.concat([obs_GL]*3, axis='columns', ignore_index=True)
obs_GL_17_50_83 = obs_GL_17_50_83.rename(columns={0:17, 1:50, 2:83})
df_GL = pd.concat((obs_GL_17_50_83, ismip_GL_ann)).interpolate()
Date | 17 | 50 | 83 |
---|---|---|---|
2010-01-01 00:00:00 | 376.8 | 376.8 | 376.8 |
2011-01-01 00:00:00 | 336.2 | 336.2 | 336.2 |
2012-01-01 00:00:00 | 429.3 | 429.3 | 429.3 |
2013-01-01 00:00:00 | 107.9 | 107.9 | 107.9 |
2014-01-01 00:00:00 | 184.6 | 184.6 | 184.6 |
2015-01-01 00:00:00 | 213.9 | 213.9 | 213.9 |
2016-01-01 00:00:00 | 256 | 256 | 256 |
2017-01-01 00:00:00 | 102.6 | 102.6 | 102.6 |
2018-01-01 00:00:00 | 75.8 | 75.8 | 75.8 |
2019-01-01 00:00:00 | 426 | 426 | 426 |
2020-12-31 00:00:00 | 285 | 321 | 357 |
2021-12-31 00:00:00 | 144 | 216 | 288 |
2022-12-31 00:00:00 | 144 | 216 | 288 |
2023-12-31 00:00:00 | 144 | 216 | 288 |
2024-12-31 00:00:00 | 144 | 216 | 288 |
2025-12-31 00:00:00 | 144 | 216 | 288 |
2026-12-31 00:00:00 | 144 | 216 | 288 |
2027-12-31 00:00:00 | 144 | 216 | 288 |
2028-12-31 00:00:00 | 144 | 216 | 288 |
2029-12-31 00:00:00 | 144 | 216 | 288 |
- From Slater (2021)
import pandas as pd
S2021_kw = {'parse_dates':True, 'index_col':0}
shelf_calving = pd.read_csv('~/data/Slater_2021/iceshelves_calving_cumul_1994_2017_annual.csv', **S2021_kw)\
.rename(columns={"Cumulative mass change (Gt)":"Ice Shelf Calving"})
shelf_thinning = pd.read_csv('~/data/Slater_2021/iceshelves_thinning_cumul_1994_2017_annual.csv', **S2021_kw)\
.rename(columns={"Cumulative mass change (Gt)":"Ice Shelf Thinning"})
landice_AQ = pd.read_csv('~/data/Slater_2021/AIS_cumul_1994_2017_annual.csv', **S2021_kw)\
.rename(columns={"Cumulative mass change (Gt)":"Antarctica"})
S2021_kw = {'left_index':True, 'right_index':True, 'how':'outer'}
obs_AQ = shelf_calving.merge(shelf_thinning, **S2021_kw)\
.merge(landice_AQ, **S2021_kw)
obs_AQ.index.name = 'Date'
obs_AQ = -1 * obs_AQ.diff()
obs_AQ['Total'] = obs_AQ.sum(axis='columns')
\fontsize{4pt}{4}\selectfont
obs_AQ
Date | Ice Shelf Calving | Ice Shelf Thinning | Antarctica | Total |
---|---|---|---|---|
1994-01-01 00:00:00 | nan | nan | nan | 0 |
1995-01-01 00:00:00 | 71.375 | 1.6598 | 37.17 | 110.205 |
1996-01-01 00:00:00 | 71.4792 | -17.3615 | 28.78 | 82.8977 |
1997-01-01 00:00:00 | 126.945 | -4.85001 | 32.31 | 154.405 |
1998-01-01 00:00:00 | 126.946 | 38.3959 | 22.43 | 187.771 |
1999-01-01 00:00:00 | 336.403 | 84.7815 | 78.73 | 499.915 |
2000-01-01 00:00:00 | 307.921 | 91.948 | 28.27 | 428.139 |
2001-01-01 00:00:00 | 332.46 | 76.967 | 20.98 | 430.407 |
2002-01-01 00:00:00 | 139.388 | 108.552 | 28.99 | 276.93 |
2003-01-01 00:00:00 | 139.388 | 189.182 | 96.01 | 424.58 |
2004-01-01 00:00:00 | 139.388 | 269.945 | 78.91 | 488.243 |
2005-01-01 00:00:00 | 139.387 | 297.37 | 16.89 | 453.647 |
2006-01-01 00:00:00 | 139.388 | 312.36 | 95.35 | 547.098 |
2007-01-01 00:00:00 | 139.388 | 332.43 | 207.72 | 679.538 |
2008-01-01 00:00:00 | 139.388 | 347.33 | 113.88 | 600.598 |
2009-01-01 00:00:00 | 139.388 | 306.2 | 89.15 | 534.738 |
2010-01-01 00:00:00 | 139.388 | 216.62 | 229.38 | 585.388 |
2011-01-01 00:00:00 | 139.388 | 129.18 | 147.99 | 416.558 |
2012-01-01 00:00:00 | 139.388 | 95.05 | 209.4 | 443.838 |
2013-01-01 00:00:00 | 139.387 | 90.42 | 269.75 | 499.557 |
2014-01-01 00:00:00 | 139.388 | 55.86 | 261.69 | 456.938 |
2015-01-01 00:00:00 | 139.387 | -12.93 | 254.84 | 381.297 |
2016-01-01 00:00:00 | 139.388 | -49.23 | 67.02 | 157.178 |
From Slater (2021) Table 1
Component | Uncertainty [Gt yr-1] |
---|---|
Ice shelf calving | 36 |
Ice shelf thinning | 39 |
Antarctic land ice | 24 |
mean | 33 |
sum | 99 |
- Assume these are 1 σ uncertainty
- lo/mid/hi estimates can use mean (33), max (39) or sum (99)
from uncertainties import unumpy
import numpy as np
np.sum(unumpy.uarray([1,1,1], [36,39,24]))
3.0+/-58.249463516842795
import xarray as xr
ds = xr.open_dataset('./ISMIP6/emulandiceAIS_GIS_ssp245_globalsl_GT.nc')
ismip_AQ = ds['AIS_sea_level_change']\
.to_dataframe()\
.unstack().T
ismip_AQ.index = [pd.to_datetime(_[1], format='%Y') for _ in ismip_AQ.index]
ismip_AQ.index.name = 'Date'
Date | 50 | 17 | 83 |
---|---|---|---|
2020-01-01 00:00:00 | 2160 | 1440 | 3240 |
2030-01-01 00:00:00 | 3960 | 2520 | 5400 |
2040-01-01 00:00:00 | 6120 | 3600 | 8640 |
2050-01-01 00:00:00 | 8640 | 5040 | 12600 |
2060-01-01 00:00:00 | 11520 | 6120 | 16920 |
2070-01-01 00:00:00 | 14580 | 6120 | 22680 |
2080-01-01 00:00:00 | 18000 | 6480 | 29221 |
2090-01-01 00:00:00 | 23760 | 8640 | 38581 |
2100-01-01 00:00:00 | 28800 | 9720 | 50040 |
obs_AQ_17_50_83 = pd.concat([obs_AQ['Total']]*3, axis='columns', ignore_index=True)
obs_AQ_17_50_83 = obs_AQ_17_50_83.rename(columns={0:17, 1:50, 2:83})
df_AQ = pd.concat((obs_AQ_17_50_83, ismip_AQ_ann)).interpolate()
\fontsize{5pt}{5}\selectfont
Date | 17 | 50 | 83 |
---|---|---|---|
2009-01-01 00:00:00 | 534.738 | 534.738 | 534.738 |
2010-01-01 00:00:00 | 585.388 | 585.388 | 585.388 |
2011-01-01 00:00:00 | 416.558 | 416.558 | 416.558 |
2012-01-01 00:00:00 | 443.838 | 443.838 | 443.838 |
2013-01-01 00:00:00 | 499.557 | 499.557 | 499.557 |
2014-01-01 00:00:00 | 456.938 | 456.938 | 456.938 |
2015-01-01 00:00:00 | 381.297 | 381.297 | 381.297 |
2016-01-01 00:00:00 | 157.178 | 157.178 | 157.178 |
2020-12-31 00:00:00 | 132.589 | 168.589 | 186.589 |
2021-12-31 00:00:00 | 108 | 180 | 216 |
2022-12-31 00:00:00 | 108 | 180 | 216 |
2023-12-31 00:00:00 | 108 | 180 | 216 |
2024-12-31 00:00:00 | 108 | 180 | 216 |
2025-12-31 00:00:00 | 108 | 180 | 216 |
2026-12-31 00:00:00 | 108 | 180 | 216 |
2027-12-31 00:00:00 | 108 | 180 | 216 |
2028-12-31 00:00:00 | 108 | 180 | 216 |
2029-12-31 00:00:00 | 108 | 180 | 216 |
2030-12-31 00:00:00 | 108 | 180 | 216 |
2031-12-31 00:00:00 | 108 | 216 | 324 |
def writer(da, fname):
dd = da.copy(deep=True)
dd.index = dd.index.year
dd.to_csv(fname, sep='\t', header=False)
writer(df_AQ[17], './out/AQ_17.csv')
writer(df_AQ[50], './out/AQ_50.csv')
writer(df_AQ[83], './out/AQ_83.csv')
writer(df_GL[17], './out/GL_17.csv')
writer(df_GL[50], './out/GL_50.csv')
writer(df_GL[83], './out/GL_83.csv')
- [ ] …
\printbibliography[heading=none]
This document is an Emacs Org Mode plain-text file with code and text embedded. If you are viewing:
- A PDF, HTML, or DOC file, then it was generated by exporting from Org. Not all of the Org parts (code, results, comments, etc.) were exported. The Org source file is available upon request, and may be embedded in the PDF. You can access files embedded in PDF files with from within your PDF viewer.
- A file with an
org
extension in something other than Emacs, then you are seeing the canonical version and the full source, but without any syntax highlighting, document structure, or the ability to execute the code blocks. - An
Org
file within Emacs, then this is the canonical version. You should be able to fully interact and reproduce the contents of this document, although it may require 3rd-party applications (Python, etc.) and a similar Emacs configuration. This is available upon request.