Skip to content

Files

Latest commit

Jul 18, 2023
4dc3cf0 · Jul 18, 2023

History

History
817 lines (649 loc) · 29.9 KB

ISMIP6.org

File metadata and controls

817 lines (649 loc) · 29.9 KB

Merging Observed & ISMIP6 Freshwater Anomalies

Table of contents

Introduction

Summary

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

Issues

  • {{{WARNING}}} Projections in Antarctica are only grounded ice, not ice shelf calving and melting, which is the majority of the observed mass loss.

Greenland observations

Mankoff 2021

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 and lo years are ± published uncertainty from Mankoff (2021)

{{{SKIPLINE}}}

Greenland observations: code

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'

Greenland observations: table

Head

DateGt/yr
1990-01-01 00:00:00137.6
1991-01-01 00:00:0076.7
1992-01-01 00:00:000
1993-01-01 00:00:003.6
1994-01-01 00:00:00113.8
1995-01-01 00:00:00211.9
1996-01-01 00:00:000
1997-01-01 00:00:000
1998-01-01 00:00:00102
1999-01-01 00:00:0047
2000-01-01 00:00:0077.1
2001-01-01 00:00:0026.1
2002-01-01 00:00:00142.5
2003-01-01 00:00:00167.2
2004-01-01 00:00:00165.8

Tail

DateGt/yr
2005-01-01 00:00:00168.4
2006-01-01 00:00:00239.8
2007-01-01 00:00:00257.3
2008-01-01 00:00:00201.2
2009-01-01 00:00:00243
2010-01-01 00:00:00376.8
2011-01-01 00:00:00336.2
2012-01-01 00:00:00429.3
2013-01-01 00:00:00107.9
2014-01-01 00:00:00184.6
2015-01-01 00:00:00213.9
2016-01-01 00:00:00256
2017-01-01 00:00:00102.6
2018-01-01 00:00:0075.8
2019-01-01 00:00:00426

Greenland observations: plot

./figs_tmp/49456009d9f07ae08928903b21a69e5a2a16c6a6.png

Greenland ISMIP

Load ISMIP SSP 245

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'

Table

Date501783
2020-01-01 00:00:00180014402520
2030-01-01 00:00:00396028805400
2040-01-01 00:00:00648046809000
2050-01-01 00:00:0010080684013320
2060-01-01 00:00:0012960864018000
2070-01-01 00:00:00169201080023760
2080-01-01 00:00:00208801224030600
2090-01-01 00:00:00252001332037800
2100-01-01 00:00:00277201260045720

ISMIP annual contribution

./figs_tmp/bc14fc58f9fba6219ce4f530e9a5a1f3b1442013.png

Greenland merge

Code

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()

Table

Date175083
2010-01-01 00:00:00376.8376.8376.8
2011-01-01 00:00:00336.2336.2336.2
2012-01-01 00:00:00429.3429.3429.3
2013-01-01 00:00:00107.9107.9107.9
2014-01-01 00:00:00184.6184.6184.6
2015-01-01 00:00:00213.9213.9213.9
2016-01-01 00:00:00256256256
2017-01-01 00:00:00102.6102.6102.6
2018-01-01 00:00:0075.875.875.8
2019-01-01 00:00:00426426426
2020-12-31 00:00:00285321357
2021-12-31 00:00:00144216288
2022-12-31 00:00:00144216288
2023-12-31 00:00:00144216288
2024-12-31 00:00:00144216288
2025-12-31 00:00:00144216288
2026-12-31 00:00:00144216288
2027-12-31 00:00:00144216288
2028-12-31 00:00:00144216288
2029-12-31 00:00:00144216288

Plot

./figs_tmp/866f67d1253238697d386b1935d68b24b841e09b.png

Antarctic observations

Data source

  • From Slater (2021)

Load data

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')

Antarctic obs table

\fontsize{4pt}{4}\selectfont

obs_AQ
DateIce Shelf CalvingIce Shelf ThinningAntarcticaTotal
1994-01-01 00:00:00nannannan0
1995-01-01 00:00:0071.3751.659837.17110.205
1996-01-01 00:00:0071.4792-17.361528.7882.8977
1997-01-01 00:00:00126.945-4.8500132.31154.405
1998-01-01 00:00:00126.94638.395922.43187.771
1999-01-01 00:00:00336.40384.781578.73499.915
2000-01-01 00:00:00307.92191.94828.27428.139
2001-01-01 00:00:00332.4676.96720.98430.407
2002-01-01 00:00:00139.388108.55228.99276.93
2003-01-01 00:00:00139.388189.18296.01424.58
2004-01-01 00:00:00139.388269.94578.91488.243
2005-01-01 00:00:00139.387297.3716.89453.647
2006-01-01 00:00:00139.388312.3695.35547.098
2007-01-01 00:00:00139.388332.43207.72679.538
2008-01-01 00:00:00139.388347.33113.88600.598
2009-01-01 00:00:00139.388306.289.15534.738
2010-01-01 00:00:00139.388216.62229.38585.388
2011-01-01 00:00:00139.388129.18147.99416.558
2012-01-01 00:00:00139.38895.05209.4443.838
2013-01-01 00:00:00139.38790.42269.75499.557
2014-01-01 00:00:00139.38855.86261.69456.938
2015-01-01 00:00:00139.387-12.93254.84381.297
2016-01-01 00:00:00139.388-49.2367.02157.178

Antarctic obs plot

./figs_tmp/77d67cba6ddbb200b4efdfa1220b68460ea5a7fd.png

Uncertainty

From Slater (2021) Table 1

ComponentUncertainty [Gt yr-1]
Ice shelf calving36
Ice shelf thinning39
Antarctic land ice24
mean33
sum99
  • Assume these are 1 σ uncertainty
  • lo/mid/hi estimates can use mean (33), max (39) or sum (99)

If fields are random

from uncertainties import unumpy
import numpy as np
np.sum(unumpy.uarray([1,1,1], [36,39,24]))
3.0+/-58.249463516842795

Antarctic ISMIP

Load ISMIP SSP 245

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'

Table

Date501783
2020-01-01 00:00:00216014403240
2030-01-01 00:00:00396025205400
2040-01-01 00:00:00612036008640
2050-01-01 00:00:008640504012600
2060-01-01 00:00:0011520612016920
2070-01-01 00:00:0014580612022680
2080-01-01 00:00:0018000648029221
2090-01-01 00:00:0023760864038581
2100-01-01 00:00:0028800972050040

ISMIP annual contribution

./figs_tmp/4aa248b4c8b8d6f89792a5b0438ca6a73719fc87.png

Antarctic merge

Code

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()

Table

\fontsize{5pt}{5}\selectfont

Date175083
2009-01-01 00:00:00534.738534.738534.738
2010-01-01 00:00:00585.388585.388585.388
2011-01-01 00:00:00416.558416.558416.558
2012-01-01 00:00:00443.838443.838443.838
2013-01-01 00:00:00499.557499.557499.557
2014-01-01 00:00:00456.938456.938456.938
2015-01-01 00:00:00381.297381.297381.297
2016-01-01 00:00:00157.178157.178157.178
2020-12-31 00:00:00132.589168.589186.589
2021-12-31 00:00:00108180216
2022-12-31 00:00:00108180216
2023-12-31 00:00:00108180216
2024-12-31 00:00:00108180216
2025-12-31 00:00:00108180216
2026-12-31 00:00:00108180216
2027-12-31 00:00:00108180216
2028-12-31 00:00:00108180216
2029-12-31 00:00:00108180216
2030-12-31 00:00:00108180216
2031-12-31 00:00:00108216324

Plot

./figs_tmp/6e2e9784d7c14e372215f358e64ba810946c85b9.png

Summary

Output

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')

Questions & To Do

  • [ ] …

Appendix

References

\printbibliography[heading=none]

About This Document

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.

LaTeX Header

Beamer

Title Page

Theme

Other

References

Hyperref

Tweak References

Background Block

Code export

Local Variables