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)
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()')
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')
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)
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)
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()
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()
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)
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'][:]
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