Source code for issm.PattynSMB

import os
import numpy as  np
[docs]def PattynSMB(md,Tf): """ PATTYNSMB- Compute SMB over Antarctica (from Pattyn 2006, pg. 18, "GRANTISM: An ExcelTM model for Greenland and Antarctic ice-sheet response to climate changes") Usage: md=PattynSMB(md,Tf) where Tf is a background forcing temperature ("an anomalous temperature relative to the present conditions) See also: SETICESHELFBC, SETMARINEICESHEETBC """ # Tma : Mean annual surface temperature in [deg C] # Tms : Mean summer temperature in [deg C] # h : Surface/bedrock elevation (I assume in meters but paper does not specify) # phi : Latitude in degrees SOUTH # lambda : Longitude in degrees WEST # Tf : Background forcing temperature ("an anomalous temperature relative to the present conditions) # ACCdot : Accumulation rate in units of [m/a] ice equivalent # ABLdot : Surface ablation rate in [m/a] ice equivalent #Double check lat and long exist: if np.any(np.isnan(md.mesh.lat)): raise IOError('PattynSMB error message: md.mesh.lat field required') # Calculate mean annual surface temperature, Eqn (11) # Here, -0.012 is the atmospheric Lapse rate from sea level in deg/m. # It is multiplied by surface elevation from sea level Tma = -15.15 - 0.012*md.geometry.surface # Calculate summer temperature, Eqn (12) # No melting at PIG in mean conditions - need about 6 degress Tf to start having a negative yearly SMB Tms = 16.81 - 0.00692*md.geometry.surface - 0.27937*np.abs(md.mesh.lat) + Tf Tms= Tms[0] # Calculate Accumulation perturbation with Tf forcing, Eqn (9) ACCdot = 2.5*2**((Tma+Tf)/10.) - 2.5*2**(Tma/10.) # Calculate Ablation, Eqn (10) (use for both Antarctica & Greenland), max melt is 10m/a ABLdot=0.*np.ones(md.mesh.numberofvertices) pos=np.nonzero(Tms>=0) ABLdot[pos]=np.minimum(1.4*Tms[pos],10) smb=ACCdot-ABLdot return smb[0]