Beispiel #1
0
    def setUp(self):
        self.sheetname = 'greenland'
        self.mmO = icebin.GCMRegridder(args.icebin_in)

        rmO = self.mmO.regrid_matrices(self.sheetname)
        OvI = rmO.matrix('AvI', scale=False, correctA=False)    # WeightedSparse
        _,_,self.wI = OvI()

        with netCDF4.Dataset(args.icebin_in) as nc:
            self.indexingI = ibgrid.Indexing(nc, 'm.greenland.gridI.indexing')
            self.indexingA = ibgrid.Indexing(nc, 'm.gridA.indexing')
            self.indexingHC = ibgrid.Indexing(nc, 'm.indexingHC')
            self.hcdefs = nc.variables['m.hcdefs'][:]
            self.nhc = len(nc.dimensions['m.nhc'])
            indexA_sub = nc.variables['m.gridA.cells.index'][:]
            areaA_sub = nc.variables['m.gridA.cells.native_area'][:]
            nA1 = getattr(nc.variables['m.gridA.info'], 'cells.nfull')

        self.areaA1 = np.zeros((nA1,))
        self.areaA1[indexA_sub] = areaA_sub    # Native area of full grid cell (on sphere)

        self.fcontOp, self.fcontOm = compute_fcontO(self.mmO, self.sheetname)

        # Construct a GCMRegridder_Model to/from the Atmosphere Grid
        self.mmA = self.mmO.to_modele(1.-self.fcontOp, 1.-self.fcontOm)
Beispiel #2
0
    def setUp(self):
        print('BEGIN RegridTests.setUp(): ', ICEBIN_IN)
        self.elevI, self.maskI = giss.pism.read_elevI_maskI(ELEV_MASK)
        self.elevmaskI = self.elevI
        self.elevmaskI[self.maskI] = np.nan

        self.mm = icebin.GCMRegridder(ICEBIN_IN)
        self.rm = self.mm.regrid_matrices(ice_sheet, self.elevmaskI)
        # Smooth 50km in XY direction, 100m in Z direction
        sigma = (50000., 50000., 100.)
        self.wIvE, self.IvE, self.IvEw = self.rm.matrix('IvE',
                                                        scale=True,
                                                        sigma=sigma)()

        self.wAvI, self.AvI, self.AvIw = self.rm.matrix('AvI', scale=True)()
        self.wIvA, self.IvA, self.IvAw = self.rm.matrix('IvA', scale=True)()
        self.wEvI, self.EvI, self.EvIw = self.rm.matrix('EvI', scale=True)()
        self.wIvE, self.IvE, self.IvEw = self.rm.matrix('IvE', scale=True)()
        self.wIvE, self.IvE, self.IvEw = self.rm.matrix('IvE', scale=True)()
        self.wEvA, self.EvA, self.EvAw = self.rm.matrix('EvA', scale=True)()
        self.wAvE, self.AvE, self.AvEw = self.rm.matrix('AvE', scale=True)()

        self.IvE_smooth_x = self.rm.matrix('IvE', scale=True, sigma=sigma)

        with netCDF4.Dataset(ICEBIN_IN) as nc:
            self.indexingA = ibgrid.Indexing(nc, 'm.agridA.indexing')
            self.indexingHC = ibgrid.Indexing(nc, 'm.indexingHC')
            self.indexingI = ibgrid.Indexing(
                nc, 'm.{}.agridI.indexing'.format(ice_sheet))
            self.plotterI = ibplotter.read_nc(nc,
                                              'm.{}.agridI'.format(ice_sheet))
            self.plotterA = ibplotter.read_nc(nc, 'm.agridA')
        self.plotterE = ibplotter.PlotterE(ICEBIN_IN, ice_sheet, IvE=self.IvE)

        print('END RegridTests.setUp()')
Beispiel #3
0
 def setUp(self):
     self.mm = icebin.GCMRegridder(ICEBIN_IN)
     self.rm = self.mm.regrid_matrices(ice_sheet)
     with netCDF4.Dataset(ICEBIN_IN) as nc:
         self.indexingA = ibgrid.Indexing(nc, 'm.gridA.indexing')
         self.indexingHP = ibgrid.Indexing(nc, 'm.indexingHP')
         self.indexingI = ibgrid.Indexing(
             nc, 'm.{}.gridI.indexing'.format(ice_sheet))
         self.plotterI = ibplotter.read_nc(nc,
                                           'm.{}.gridI'.format(ice_sheet))
         self.plotterA = ibplotter.read_nc(nc, 'm.gridA')
Beispiel #4
0
def _Grid_XY_read_plotter(nc, vname) :
    """Reads an plotter out of a netCDF file for a simple Cartesian grid"""

    sproj = nc.variables[vname + '.info'].sproj
    xb2 = nc.variables[vname + '.x_boundaries'][:]
    yb2 = nc.variables[vname + '.y_boundaries'][:]
    indexing = ibgrid.Indexing(nc, vname + '.indexing')
    return giss.plot.ProjXYPlotter(xb2, yb2, sproj, indexing.indices[0] == 0)
Beispiel #5
0
    def setUp(self):
        self.mm = icebin.GCMRegridder(ICEBIN_IN)
        self.rm = self.mm.regrid_matrices(ice_sheet)
        with netCDF4.Dataset(ICEBIN_IN) as nc:
            self.indexingA = ibgrid.Indexing(nc, 'm.gridA.indexing')
            self.indexingHP = ibgrid.Indexing(nc, 'm.indexingHP')
            self.indexingI = ibgrid.Indexing(
                nc, 'm.{}.gridI.indexing'.format(ice_sheet))
            self.plotterI = ibplotter.read_nc(nc,
                                              'm.{}.gridI'.format(ice_sheet))
            self.plotterA = ibplotter.read_nc(nc, 'm.gridA')

        self.elevI, self.maskI = giss.pism.read_elevI_maskI('elev_mask.nc')

        self.AvI, self.wAvI = self.rm.regrid('AvI', scale=True)
        self.IvA, self.wIvA = self.rm.regrid('IvA', scale=True)
        self.EvI, self.wEvI = self.rm.regrid('EvI', scale=True)
        self.IvE, self.wIvE = self.rm.regrid('IvE', scale=True)
        self.EvA, self.wEvA = self.rm.regrid('EvA', scale=True)
        self.AvE, self.wAvE = self.rm.regrid('AvE', scale=True)
Beispiel #6
0
    def setUp(self):
        with netCDF4.Dataset(SEARISE_GRID, 'r') as nc:
            self.plotterA = ibplotter.read_nc(nc, 'grid')
            gridA = ibgrid.read_nc(nc, 'grid')
            self.indexingA = ibgrid.Indexing(nc, 'grid.indexing')

        with netCDF4.Dataset(OVERLAP_FILE, 'r') as nc:
            gridI = ibgrid.read_nc(nc, 'gridI')
            exgrid = ibgrid.read_nc(nc, 'exgrid')


        nA = gridA.cells_nfull
        nI = gridI.vertices_nfull
        AvI,weightsA,weightsI = element_l1.compute_AvI(exgrid, nA, gridI)

        # Diagonal scale matrices based on regrid weights
        scaleA = scipy.sparse.dia_matrix( ([1. / weightsA], [0]), shape=(nA,nA))
        scaleI = scipy.sparse.dia_matrix( ([1. / weightsI], [0]), shape=(nI,nI))

        self.AvI = (scaleA * AvI).tocoo()
        self.IvA = (scaleI * AvI.transpose()).tocoo()
Beispiel #7
0
        for index,w in out_raw:
            out.append((index,w*factor))

        return out
# ==============================================================



# Get the regridding matrices
# (This tells us, among other thing, the mask and the weight of each gridcell)
mm = icebin.GCMRegridder(ICEBIN_IN)
rm = mm.regrid_matrices(ice_sheet)
with netCDF4.Dataset(ICEBIN_IN) as nc:
#    indexingA = ibgrid.Indexing(nc, 'm.gridA.indexing')
#    indexingHP = ibgrid.Indexing(nc, 'm.indexingHP')
    indexingI = ibgrid.Indexing(nc, 'm.{}.gridI.indexing'.format(ice_sheet))
    plotterI = ibplotter.read_nc(nc, 'm.{}.gridI'.format(ice_sheet))
#    plotterA = ibplotter.read_nc(nc, 'm.gridA')

IvE,wIvE = rm.regrid('IvE', scale=True)

wI = wIvE        # Numpy array
nI = len(wI)


# Read the grid
nc = netCDF4.Dataset(ICEBIN_IN, 'r')
pgridI = ibgrid.read_nc(nc, 'm.{}.gridI'.format(ice_sheet))
nc.close()

Beispiel #8
0
def _Grid_LonLat_read_plotter(nc, vname) :
    lonb2 = nc.variables[vname + '.lon_boundaries'][:]
    latb2 = nc.variables[vname + '.lat_boundaries'][:]
    indexing = ibgrid.Indexing(nc, vname + '.indexing')
    return giss.plot.LonLatPlotter(lonb2, latb2, transpose=(indexing.indices[0] == 0), boundaries=True)
Beispiel #9
0
odir = '.'
oTOPO = os.path.join(odir, args.topo+'_EC2-{segment}.nc')
oGIC = os.path.join(odir, args.gic+'_EC2.nc')
print('WRITE: oTOPO = {}'.format(oTOPO))
print('WRITE:  oGIC = {}'.format(oGIC))

# --------------------------------
# 1. Load up IceBin and create the matrix AvE
mm = icebin.GCMRegridder(args.icebin_in)
rm = mm.regrid_matrices('greenland')
wAvE,AvE,_ = rm.matrix('AvE', scale=True)()
wEvI,EvI,_ = rm.matrix('EvI', scale=True)()
wAvI,AvI,_ = rm.matrix('AvI', scale=True)()

with netCDF4.Dataset(args.icebin_in) as nc:
    indexingHC = ibgrid.Indexing(nc, 'm.indexingHC')
    hcdefs_ice = nc.variables['m.hcdefs'][:]
    nhc_ice = len(nc.dimensions['m.nhc'])
    indexA_sub = nc.variables['m.gridA.cells.index'][:]
    areaA_sub = nc.variables['m.gridA.cells.native_area'][:]
    nA1 = getattr(nc.variables['m.gridA.info'], 'cells.nfull')

areaA1 = np.zeros((nA1,))
areaA1[indexA_sub] = areaA_sub    # Native area of full grid cell (on sphere)


# ----------------------------------
# 2. Compute new land surface fractions based on hi-res ice sheet
if args.elev_mask_type == 'pism':
    with netCDF4.Dataset(args.elev_mask) as nc:
        thk = nc.variables['thk'][:]
Beispiel #10
0
import netCDF4
import argparse
#from modele.constants import SHI,LHM,RHOI,RHOS,UI_ICEBIN,UI_NOTHING

# Sample program that tries out IceBin's update_topo() and writes the output to NetCDF.
# The filder ../make_topo must have been run first, for the file z1qx1n_bs1-nogr.nc

file_path = os.environ['MODELE_FILE_PATH'].split(os.pathsep)
TOPOO_IN = giutil.search_file('z1qx1n_bs1-nogr.nc', file_path)
ICEBINO_IN = 'pismsheet_g20_icebin_in.nc'
ELEVMASK_IN = 'pismsheet_elev_mask.nc'

# ---------------------------------------
# Read dimensions
with netCDF4.Dataset(ICEBINO_IN) as nc:
    indexingO = ibgrid.Indexing(nc, 'm.gridA.indexing')
    indexingHC = ibgrid.Indexing(nc, 'm.indexingHC')
    hcdefs_ice = nc.variables['m.hcdefs'][:]
    nhc_ice = len(nc.dimensions['m.nhc'])

imO = indexingO.extent[0]
jmO = indexingO.extent[1]
im = imO // 2    # Indices in alphabetical order
jm = jmO // 2    # /2 to convert Ocean to Atmosphere grid

segments = 'legacy,sealand,ec'
nhc_gcm = nhc_ice + 3
# ---------------------------------------


# Create gcmO and wrap to get gcmA.  Not yet usable, we haven't done