Commit 4927b213 authored by Kennedy, Joseph H's avatar Kennedy, Joseph H
Browse files

Energy and clouds now work with both CESM and E3SM, smb still CESM only

parent 5837470d
# coding=utf-8
import os
import Ngl
import numpy as np
import numpy.ma as ma
from netCDF4 import Dataset
from livvkit.util import elements as el
describe = """
Average of the annual average sensible heat flux (W m^-2) over Greenland for
every summer (June-July-August; JJA) from 1980--1999 for E3SM (left) and RACMO
2.3 (middle), and the difference between them (right; E3SM - RACMO 2.3). The
black solid lines denote the 0, 1000, 2000, and 3000 meter Greenland ice sheet
elevation contours as seen by the models (E3SM's contours shown in the
difference plot).
"""
title = "Net shortwave radiation"
def make_plot(config, out_path='.'):
# ---------------- Data source in TITAN ------------------------
f_cism = os.path.join(config['cism_data'], 'Greenland_5km_v1.1_SacksRev_c110629.nc')
f_model_lnd_climo_jja = os.path.join(config['model_lnd_climos'],
'IGCLM45_MLI_titan_JJA_climo.nc')
f_racmo_senf_jja = os.path.join(config['racmo_data'],
'racmo23_GRN_monthly.senf.1980-1999.JJA.nc')
f_racmo_senf_jja_remapped = os.path.join(config['racmo_data'],
'racmo23_GRN_monthly.senf.1980-1999.remap2e3sm.JJA.nc')
f_racmo_mask = os.path.join(config['racmo_data'], 'RACMO23_masks_ZGRN11.nc')
# --------------------------------------------------------------
img_list = []
# f_cism get the following, matrixsize[301,561]
# usrf(0,:,:), lat(0,:,:), lon(0,:,:)
# Goal: plot 3 figures, radiation overlaying on elevation usrf
# read f_cism, elevation 5km E3SM
# adding the [:] transform the variable to type numpy.ndarray
ncid0 = Dataset(f_cism)
usrf = ncid0.variables['usrf'][0, :, :]
lat = ncid0.variables['lat'][0, :, :]
lon = ncid0.variables['lon'][0, :, :]
# read f_model_lnd_climo_jja, E3SM varialbes
ncid1 = Dataset(f_model_lnd_climo_jja)
fsh = ncid1.variables['FSH'][0, :, :]
lat1 = ncid1.variables['lat'][:]
lon1 = ncid1.variables['lon'][:]
fsh = -1 * fsh
# use gris as a mask to mask fsa array
gris_mask = ncid1.variables['gris_mask'][0, :, :]
gris_mask = ma.masked_equal(gris_mask, 0)
fsh_mask = ma.masked_array(fsh, mask=gris_mask.mask)
fsh = fsh_mask
# read f_racmo_senf_jja, RACMO variables
ncid2 = Dataset(f_racmo_senf_jja)
senf = ncid2.variables['senf'][0, :, :]
# lat2 = ncid2.variables['lat'][:]
# lon2 = ncid2.variables['lon'][:]
# read f_racmo_mask, the lat/lon for RACMO data
ncid4 = Dataset(f_racmo_mask)
lat4 = ncid4.variables['lat'][:]
lon4 = ncid4.variables['lon'][:]
racmo_elev = ncid4.variables['Topography'][0, 0, :, :]
# Use gris as a mask to mask fsa array.
gris_mask = ncid4.variables['GrIS_mask'][:]
gris_mask = ma.masked_equal(gris_mask, 0)
senf_mask = ma.masked_array(senf, mask=gris_mask.mask)
senf = senf_mask
# read f_racmo_senf_jja_remapped, the remapped RACMO file to calculate difference
ncid3 = Dataset(f_racmo_senf_jja_remapped)
remap_senf = ncid3.variables['senf'][0, :, :]
diff = fsh - remap_senf
# print(np.max(diff))
# print(np.min(diff))
# ------- PLOT --------
# Open a workstation for drawing the plots
wkres = Ngl.Resources()
# wkres.wkOrientation = "portrait" # "portrait" or "landscape"
wks_type = "png"
wks_img = str(os.path.join(out_path, "E3SM_RACMO23_senf_JJA"))
wks = Ngl.open_wks(wks_type, wks_img, wkres)
# --- for the map -------
# Define plotting area, Greenland
mres = Ngl.Resources()
mres.nglDraw = False # Don't draw individual plots
mres.nglFrame = False # Don't advance frame.
mres.pmTickMarkDisplayMode = "Never" # Turn off map tickmarks.
mres.mpGridAndLimbOn = False # Turn off grid and limb lines.
mres.mpProjection = "Aitoff"
mres.mpLimitMode = "LatLon" # limit map via lat/lon, to zoom in
mres.mpCenterLatF = 70. # map area
mres.mpCenterLonF = -44.
mres.mpMinLatF = 57.
mres.mpMaxLatF = 85.
mres.mpMinLonF = -55.
mres.mpMaxLonF = -30.
mres.mpOutlineOn = False
mres.mpFillOn = False
mres.mpPerimOn = True # add box around map
# --- for the senf contour of E3SM -------
res1 = Ngl.Resources()
res1.cnFillPalette = "BlueWhiteOrangeRed"
res1.nglDraw = False # Don't draw individual plots
res1.nglFrame = False # Don't advance frame.
res1.cnLineLabelsOn = False
res1.cnFillOn = True
res1.cnLinesOn = False
res1.cnLineLabelsOn = False
res1.cnFillMode = "RasterFill"
res1.cnLevelSelectionMode = "ExplicitLevels"
res1.cnLevels = np.arange(-40, 40, 10)
res1.lbLabelBarOn = True # Turn on labelbar.
res1.lbLabelFontHeightF = 0.04
res1.sfXArray = lon1
res1.sfYArray = lat1
# --- for the senf contour of RACMO -------
res2 = Ngl.Resources()
res2.cnFillPalette = "BlueWhiteOrangeRed"
res2.nglDraw = False # Don't draw individual plots
res2.nglFrame = False # Don't advance frame.
res2.cnLineLabelsOn = False
res2.cnFillOn = True
res2.cnLinesOn = False
res2.cnLineLabelsOn = False
res2.cnFillMode = "RasterFill"
res2.cnLevelSelectionMode = "ExplicitLevels"
res2.cnLevels = np.arange(-40, 40, 10)
res2.lbLabelBarOn = True # Turn on labelbar.
res2.lbOrientation = "Vertical" # Verticle labelbar
res2.lbLabelFontHeightF = 0.04 # Make fonts smaller.
res2.sfXArray = lon4
res2.sfYArray = lat4
# --- for the senf contour of E3SM-RACMO -------
res3 = Ngl.Resources()
res3.cnFillPalette = "BlueWhiteOrangeRed"
res3.nglDraw = False # Don't draw individual plots
res3.nglFrame = False # Don't advance frame.
res3.cnLineLabelsOn = False
res3.cnFillOn = True
res3.cnLinesOn = False
res3.cnLineLabelsOn = False
res3.cnFillMode = "RasterFill"
res3.cnLevelSelectionMode = "ExplicitLevels"
res3.cnLevels = np.arange(-40, 40, 10)
res3.lbLabelBarOn = True # Turn on labelbar.
res3.lbOrientation = "Vertical" # Verticle labelbar
res3.lbLabelFontHeightF = 0.04 # Make fonts smaller.
res3.sfXArray = lon1
res3.sfYArray = lat1
# ---- for the elevation -------
sres = Ngl.Resources()
sres.nglDraw = False # Don't draw individual plots
sres.nglFrame = False # Don't advance frame.
sres.cnFillOn = False
sres.cnLinesOn = True
sres.cnLineLabelsOn = False
sres.cnLevelSelectionMode = "ExplicitLevels"
sres.cnLevels = [0, 1000, 2000, 3000]
sres.sfXArray = lon
sres.sfYArray = lat
# ---- for the elevation of RACMO -------
sres1 = Ngl.Resources()
sres1.nglDraw = False # Don't draw individual plots
sres1.nglFrame = False # Don't advance frame.
sres1.cnFillOn = False
sres1.cnLinesOn = True
sres1.cnLineLabelsOn = False
sres1.cnLevelSelectionMode = "ExplicitLevels"
sres1.cnLevels = [0, 1000, 2000, 3000]
sres1.sfXArray = lon4
sres1.sfYArray = lat4
# ---- Overlay plots, each one has its own ID
# overlay ice on base map, and then overlay elevation on ice
# usrf is elevation of 5km E3SM, racmo_elev is elevation of RACMO
usrf_plot1 = Ngl.contour(wks, usrf, sres)
usrf_plot2 = Ngl.contour(wks, racmo_elev, sres1)
usrf_plot3 = Ngl.contour(wks, usrf, sres)
fsh_plot = Ngl.contour(wks, fsh, res1)
senf_plot = Ngl.contour(wks, senf, res2)
diff_plot = Ngl.contour(wks, diff, res3)
# diff_plot = Ngl.contour(wks,remap_senf,res1)
# Creat multiple figures and draw, which now contains the elevation and radiation
# "[1,3]" indicates 1 row, 3 columns.
map_title = ["E3SM, SHF", "RACMO, SHF", "E3SM-RACMO, SHF"]
nmap = 3
plot = []
for i in range(nmap):
mres.tiMainString = map_title[i]
plot.append(Ngl.map(wks, mres))
# Overlay everything on the map plot.
Ngl.overlay(plot[0], fsh_plot)
Ngl.overlay(plot[0], usrf_plot1)
Ngl.overlay(plot[1], senf_plot)
Ngl.overlay(plot[1], usrf_plot2)
Ngl.overlay(plot[2], diff_plot)
Ngl.overlay(plot[2], usrf_plot3)
Ngl.panel(wks, plot, [1, nmap])
img_link = os.path.join(os.path.basename(out_path),
os.path.basename(wks_img + '.' + wks_type))
img_elem = el.image(title,
' '.join(describe.split()),
img_link)
img_elem['Height'] = config['image_height']
img_list.append(img_elem)
return img_list
......@@ -13,20 +13,15 @@ from livvkit.util import elements as el
describe = """
Average of the annual average surface mass balance (kg m^-2 a^-1) over Greenland for every
summer (June-July-August; JJA) from 1980--1999 for E3SM (left) and RACMO 2.3 (middle),
and the difference between them (right; E3SM - RACMO 2.3). The black solid lines denote
the 0, 1000, 2000, and 3000 meter Greenland ice sheet elevation contours as seen by
the models (E3SM's contours shown in the difference plot).
summer (June-July-August; JJA) from 1980--1999 for Model (left) and RACMO 2.3 (middle),
and the difference between them (right; Model - RACMO 2.3). The black solid lines denote
the 0, 1000, 2000, and 3000 meter Greenland ice sheet elevation contours (Model's contours shown in the difference plot).
"""
title = "Summer surface mass balance"
def make_plot(config, out_path='.'):
# ---------------- Data source in TITAN ------------------------
f_cism = os.path.join(config['cism_data'], 'Greenland_5km_v1.1_SacksRev_c110629.nc')
f_model_lnd_climo_jja = os.path.join(config['model_lnd_climos'],
'IGCLM45_MLI_titan_JJA_climo.nc')
f_racmo_smb_jja = os.path.join(config['racmo_data'], 'racmo23_GRN_monthly.smb.1980-1999.JJA.nc')
f_racmo_smb_jja_remapped = os.path.join(config['racmo_data'],
'racmo23_GRN_monthly.smb.1980-1999.remap2e3sm.JJA.nc')
......@@ -35,19 +30,12 @@ def make_plot(config, out_path='.'):
img_list = []
# f_cism get the following, matrixsize[301,561]
# usrf(0,:,:), lat(0,:,:), lon(0,:,:)
# Goal: plot 3 figures, radiation overlaying on elevation usrf
# read f_cism, elevation of 5km E3SM
# adding the [:] transform the variable to type numpy.ndarray
ncid0 = Dataset(f_cism)
ncid0 = Dataset(config['glc_surf'])
usrf = ncid0.variables['usrf'][0, :, :]
lat = ncid0.variables['lat'][0, :, :]
lon = ncid0.variables['lon'][0, :, :]
# read f_model_lnd_climo_jja, E3SM variable
ncid1 = Dataset(f_model_lnd_climo_jja)
ncid1 = Dataset(config['lnd_climo'])
smb_model = ncid1.variables['QICE'][0, :, :]
smb_model = smb_model * 3.156e7 # convert from mm/s to kg/m^2/yr
lat1 = ncid1.variables['lat'][:]
......@@ -102,7 +90,7 @@ def make_plot(config, out_path='.'):
wkres.wkColorMap = "BlueWhiteOrangeRed"
# wkres.wkOrientation = "portrait" # "portrait" or "landscape"
wks_type = "png"
wks_img = str(os.path.join(out_path, "E3SM_RACMO23_smb_ANN"))
wks_img = str(os.path.join(out_path, "Model_RACMO23_smb_ANN"))
wks = Ngl.open_wks(wks_type, wks_img, wkres)
# --- for the map -------
......@@ -125,15 +113,15 @@ def make_plot(config, out_path='.'):
mres.mpFillOn = False
mres.mpPerimOn = True # add box around map
# --- for the smbedo contour of E3SM -------
# --- for the smbedo contour of the Model -------
res1 = Ngl.Resources()
res1.nglDraw = False # Don't draw individual plots
res1.nglFrame = False # Don't advance frame.
res1.cnLineLabelsOn = False
res1.cnFillOn = True
res1.cnLinesOn = False
res1.cnLineLabelsOn = False
res1.cnFillMode = "RasterFill"
res1.trGridType = "TriangularMesh"
res1.cnLevelSelectionMode = "ExplicitLevels"
res1.cnLevels = [-4000, -2000, -1000, -700, -500, -300, -200, -100, -50, -20, 20, 50, 100, 200, 300, 500, 700, 1000,
2000, 5000]
......@@ -148,11 +136,11 @@ def make_plot(config, out_path='.'):
res2 = Ngl.Resources()
res2.nglDraw = False # Don't draw individual plots
res2.nglFrame = False # Don't advance frame.
res2.cnLineLabelsOn = False
res2.cnFillOn = True
res2.cnLinesOn = False
res2.cnLineLabelsOn = False
res2.cnFillMode = "RasterFill"
res2.trGridType = "TriangularMesh"
res2.cnLevelSelectionMode = "ExplicitLevels"
res2.cnLevels = [-4000, -2000, -1000, -700, -500, -300, -200, -100, -50, -20, 20, 50, 100, 200, 300, 500, 700, 1000,
2000, 5000]
......@@ -167,15 +155,15 @@ def make_plot(config, out_path='.'):
res2.sfXArray = lon4
res2.sfYArray = lat4
# --- for the smb contour of E3SM-RACMO -------
# --- for the smb contour of Model-RACMO -------
res3 = Ngl.Resources()
res3.nglDraw = False # Don't draw individual plots
res3.nglFrame = False # Don't advance frame.
res3.cnLineLabelsOn = False
res3.cnFillOn = True
res3.cnLinesOn = False
res3.cnLineLabelsOn = False
res3.cnFillMode = "RasterFill"
res3.trGridType = "TriangularMesh"
res3.cnLevelSelectionMode = "ExplicitLevels"
res3.cnLevels = [-4000, -2000, -1000, -700, -500, -300, -200, -100, -50, -20, 20, 50, 100, 200, 300, 500, 700, 1000,
2000, 5000]
......@@ -195,6 +183,7 @@ def make_plot(config, out_path='.'):
sres.cnFillOn = False
sres.cnLinesOn = True
sres.cnLineLabelsOn = False
sres.trGridType = "TriangularMesh"
sres.cnLevelSelectionMode = "ExplicitLevels"
sres.cnLevels = [0, 1000, 2000, 3000]
sres.sfXArray = lon
......@@ -207,6 +196,7 @@ def make_plot(config, out_path='.'):
sres1.cnFillOn = False
sres1.cnLinesOn = True
sres1.cnLineLabelsOn = False
sres1.trGridType = "TriangularMesh"
sres1.cnLevelSelectionMode = "ExplicitLevels"
sres1.cnLevels = [0, 1000, 2000, 3000]
sres1.sfXArray = lon4
......@@ -214,7 +204,6 @@ def make_plot(config, out_path='.'):
# ---- Overlay plots, each one has its own ID
# overlay ice on base map, and then overlay elevation on ice
# usrf is elevation 5km E3SM, racmo_elev is elevation of RACMO
usrf_plot1 = Ngl.contour(wks, usrf, sres)
usrf_plot2 = Ngl.contour(wks, racmo_elev, sres1)
usrf_plot3 = Ngl.contour(wks, usrf, sres)
......@@ -226,7 +215,7 @@ def make_plot(config, out_path='.'):
# Creat multiple figures and draw, which now contains the elevation and radiation
# "[1,3]" indicates 1 row, 3 columns.
map_title = ["E3SM, SMB", "RACMO, SMB", "E3SM-RACMO, SMB"]
map_title = ["Model, SMB", "RACMO, SMB", "Model-RACMO, SMB"]
nmap = 3
plot = []
......
# coding=utf-8
import os
import Ngl
import numpy as np
import numpy.ma as ma
from netCDF4 import Dataset
from livvkit.util import elements as el
describe = """
Average of the annual average surface mass balance (kg m^-2 a^-1) over Greenland for every
summer (June-July-August; JJA) from 1980--1999 for CESM (left) and RACMO 2.3 (middle),
and the difference between them (right; CESM - RACMO 2.3). The black solid lines denote
the 0, 1000, 2000, and 3000 meter Greenland ice sheet elevation contours as seen by
the models (CESM's contours shown in the difference plot).
"""
title = "Summer surface mass balance"
def make_plot(config, out_path='.'):
# ---------------- Data source in TITAN ------------------------
f_cism = os.path.join(config['cism_data'], 'Greenland_5km_v1.1_SacksRev_c110629.nc')
f_model_lnd_climo_jja = os.path.join(config['model_lnd_climos'],
'b.e10.BG20TRCN.f09_g16.002_JJA_climo.nc')
f_racmo_smb_jja = os.path.join(config['racmo_data'], 'racmo23_GRN_monthly.smb.1980-1999.JJA.nc')
f_racmo_smb_jja_remapped = os.path.join(config['racmo_data'],
'racmo23_GRN_monthly.smb.1980-1999.remap2cesm.JJA.nc')
f_racmo_mask = os.path.join(config['racmo_data'], 'RACMO23_masks_ZGRN11.nc')
# --------------------------------------------------------------
img_list = []
# f_cism get the following, matrixsize[301,561]
# usrf(0,:,:), lat(0,:,:), lon(0,:,:)
# Goal: plot 3 figures, radiation overlaying on elevation usrf
# read f_cism, elevation of 5km CESM
# adding the [:] transform the variable to type numpy.ndarray
ncid0 = Dataset(f_cism)
usrf = ncid0.variables['usrf'][0, :, :]
lat = ncid0.variables['lat'][0, :, :]
lon = ncid0.variables['lon'][0, :, :]
# read f_model_lnd_climo_jja, CESM variable
ncid1 = Dataset(f_model_lnd_climo_jja)
smb_model = ncid1.variables['QICE'][0, :, :]
smb_model = smb_model * 3.156e7 # convert from mm/s to kg/m^2/yr
lat1 = ncid1.variables['lat'][:]
lon1 = ncid1.variables['lon'][:]
# use gris as a mask to mask smb array
gris_mask = ncid1.variables['gris_mask'][0, :, :]
gris_mask = ma.masked_equal(gris_mask, 0)
smb_model_mask = ma.masked_array(smb_model, mask=gris_mask.mask)
smb_model = smb_model_mask
# read f_racmo_smb_jja_remapped, the remapped RACMO file to calculate difference
ncid3 = Dataset(f_racmo_smb_jja_remapped)
smb_remap = ncid3.variables['smb'][0, :, :]
smb_remap = smb_remap
smb_remap_mask = ma.masked_array(smb_remap, mask=gris_mask.mask)
smb_remap = smb_remap_mask
# read f_racmo_smb_jja, RACMO variable
ncid2 = Dataset(f_racmo_smb_jja)
smb = ncid2.variables['smb'][0, :, :]
# lat2 = ncid2.variables['lat'][:]
# lon2 = ncid2.variables['lon'][:]
smb = smb
# read f_racmo_mask, the lat/lon for RACMO data
ncid4 = Dataset(f_racmo_mask)
lat4 = ncid4.variables['lat'][:]
lon4 = ncid4.variables['lon'][:]
racmo_elev = ncid4.variables['Topography'][0, 0, :, :]
# Use gris as a mask to mask smb array.
gris_mask = ncid4.variables['GrIS_mask'][:]
gris_mask = ma.masked_equal(gris_mask, 0)
smb_mask = ma.masked_array(smb, mask=gris_mask.mask)
smb = smb_mask
diff = smb_model - smb_remap
# diffmin = (np.min(diff))
# diffmax = (np.max(diff))
# print("Min ANN SMB anomaly: {}".format(diffmin))
# print("Max ANN SMB anomaly: {}".format(diffmax))
# ------- PLOT --------
# Open a workstation for drawing the plots
wkres = Ngl.Resources()
# wkres.wkColorMap = "matlab_jet"
wkres.wkColorMap = "BlueWhiteOrangeRed"
# wkres.wkOrientation = "portrait" # "portrait" or "landscape"
wks_type = "png"
wks_img = str(os.path.join(out_path, "CESM_RACMO23_smb_ANN"))
wks = Ngl.open_wks(wks_type, wks_img, wkres)
# --- for the map -------
# Define plotting area, Greenland
mres = Ngl.Resources()
mres.nglDraw = False # Don't draw individual plots
mres.nglFrame = False # Don't advance frame.
mres.pmTickMarkDisplayMode = "Never" # Turn off map tickmarks.
mres.mpGridAndLimbOn = False # Turn off grid and limb lines.
mres.mpProjection = "Aitoff"
mres.mpLimitMode = "LatLon" # limit map via lat/lon, to zoom in
mres.mpCenterLatF = 70. # map area
mres.mpCenterLonF = -44.
mres.mpMinLatF = 57.
mres.mpMaxLatF = 85.
mres.mpMinLonF = -55.
mres.mpMaxLonF = -30.
mres.mpOutlineOn = False
mres.mpFillOn = False
mres.mpPerimOn = True # add box around map
# --- for the smbedo contour of CESM -------
res1 = Ngl.Resources()
res1.nglDraw = False # Don't draw individual plots
res1.nglFrame = False # Don't advance frame.
res1.cnLineLabelsOn = False
res1.cnFillOn = True
res1.cnLinesOn = False
res1.cnLineLabelsOn = False
res1.cnFillMode = "RasterFill"
res1.cnLevelSelectionMode = "ExplicitLevels"
res1.cnLevels = [-4000, -2000, -1000, -700, -500, -300, -200, -100, -50, -20, 20, 50, 100, 200, 300, 500, 700, 1000,
2000, 5000]
res1.lbLabelBarOn = True # Turn on labelbar.
res1.lbLabelFontHeightF = 0.04
# res1.pmLabelBarOrthogonalPosF = -0.05
res1.sfXArray = lon1
res1.sfYArray = lat1
# --- for the smbedo contour of RACMO -------
res2 = Ngl.Resources()
res2.nglDraw = False # Don't draw individual plots
res2.nglFrame = False # Don't advance frame.
res2.cnLineLabelsOn = False
res2.cnFillOn = True
res2.cnLinesOn = False
res2.cnLineLabelsOn = False
res2.cnFillMode = "RasterFill"
res2.cnLevelSelectionMode = "ExplicitLevels"
res2.cnLevels = [-4000, -2000, -1000, -700, -500, -300, -200, -100, -50, -20, 20, 50, 100, 200, 300, 500, 700, 1000,
2000, 5000]
# res2.cnLevels = [-12800,-6400,-3200,-1600,-800,-400,-200,-50,-25,0,25,50,100,200,400,800,1600,3200,6400]
res2.lbLabelBarOn = True # Turn on labelbar.
res2.lbOrientation = "Vertical" # Verticle labelbar
# res2.pmLabelBarHeightF = 0.5 # Change height of labelbar
# res2.pmLabelBarWidthF = 0.2 # Change width of labelbar
# res2.pmLabelBarOrthogonalPosF = -0.02 # Move labelbar closer to plot
res2.lbLabelFontHeightF = 0.04 # Make fonts smaller.
res2.sfXArray = lon4
res2.sfYArray = lat4
# --- for the smb contour of CESM-RACMO -------
res3 = Ngl.Resources()
res3.nglDraw = False # Don't draw individual plots
res3.nglFrame = False # Don't advance frame.
res3.cnLineLabelsOn = False
res3.cnFillOn = True
res3.cnLinesOn = False
res3.cnLineLabelsOn = False
res3.cnFillMode = "RasterFill"
res3.cnLevelSelectionMode = "ExplicitLevels"
res3.cnLevels = [-4000, -2000, -1000, -700, -500, -300, -200, -100, -50, -20, 20, 50, 100, 200, 300, 500, 700, 1000,
2000, 5000]
# res3.cnLevels = np.arange(-1000, 1000, 200)
res3.lbLabelBarOn = True # Turn on labelbar.
res3.lbOrientation = "Vertical" # Verticle labelbar
res3.lbLabelFontHeightF = 0.04 # Make fonts smaller.
res3.sfXArray = lon1
res3.sfYArray = lat1
# ---- for the elevation -------
sres = Ngl.Resources()
sres.nglDraw = False # Don't draw individual plots
sres.nglFrame = False # Don't advance frame.
sres.cnFillOn = False
sres.cnLinesOn = True
sres.cnLineLabelsOn = False
sres.cnLevelSelectionMode = "ExplicitLevels"
sres.cnLevels = [0, 1000, 2000, 3000]
sres.sfXArray = lon
sres.sfYArray = lat
# ---- for the elevation of RACMO -------
sres1 = Ngl.Resources()
sres1.nglDraw = False # Don't draw individual plots
sres1.nglFrame = False # Don't advance frame.
sres1.cnFillOn = False
sres1.cnLinesOn = True
sres1.cnLineLabelsOn = False
sres1.cnLevelSelectionMode = "ExplicitLevels"
sres1.cnLevels = [0, 1000, 2000, 3000]
sres1.sfXArray = lon4
sres1.sfYArray = lat4
# ---- Overlay plots, each one has its own ID
# overlay ice on base map, and then overlay elevation on ice
# usrf is elevation 5km CESM, racmo_elev is elevation of RACMO
usrf_plot1 = Ngl.contour(wks, usrf, sres)
usrf_plot2 = Ngl.contour(wks, racmo_elev, sres1)