tfake-inputtobed.py - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
 (HTM) git clone git://src.adamsgaard.dk/pism
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       tfake-inputtobed.py (1450B)
       ---
            1 #!/usr/bin/env python3
            2 
            3 from PISMNC import PISMDataset as PNC
            4 import numpy as np
            5 from sys import exit
            6 
            7 # Import all necessary modules here so that if it fails, it fails early.
            8 try:
            9     import netCDF4 as NC
           10 except:
           11     print("netCDF4 is not installed!")
           12     sys.exit(1)
           13 
           14 inname = "pismnbreen.nc"
           15 outname = "fakesummerevent.nc"
           16 
           17 try:
           18     innc = NC.Dataset(inname, 'r')
           19 except:
           20     print("file %s not found" % inname)
           21     exit(1)
           22 
           23 try:
           24     nc = PNC(outname, 'w', format='NETCDF3_CLASSIC')
           25 except:
           26     print("can't open file %s for writing" % outname)
           27     exit(1)
           28 
           29 
           30 def get(name):
           31     global innc
           32     return np.squeeze(innc.variables[name][:])
           33 
           34 
           35 x = get('x')
           36 y = get('y')
           37 bmelt = get('basal_melt_rate_grounded')
           38 Mx = len(x)
           39 My = len(y)
           40 zero = np.zeros((My, Mx))
           41 
           42 nc.create_dimensions(x, y, time_dependent=True, use_time_bounds=True)
           43 
           44 
           45 def drainage(t):
           46     """time-dependence of bogus summer runoff event in m/a: a positive wavepacket"""
           47     return np.exp(-(t - 180.0) ** 2 / 80.0) * 20.0 * (np.cos(0.2 * t * 2 * 3.14159) + 1.0)
           48 
           49 
           50 year = 2012
           51 nc.variables['time'].units = "days since %d-1-1" % (year)
           52 
           53 # generate space-time bogus summer runoff event; mask where bmelt > 0
           54 for a in range(1, 366):
           55     nc.append_time(a, (a, a + 1))
           56     inputthisday = (zero + drainage(np.double(a))) * (bmelt > 0)
           57     nc.write("inputtobed", inputthisday, True)
           58 
           59 # Set attributes
           60 inputtobed = nc.variables["inputtobed"]
           61 inputtobed.units = "m / year"
           62 
           63 nc.close()
           64 innc.close()