def regrid(self, grid, method='auto', mask=True, id=None, long_name=None, **kwargs): """Regrid bathy to another grid""" return regrid2d(self.bathy(mask=mask, id=id, long_name=long_name), grid, method=method, **kwargs)
xco = N.linspace(xi[0], xi[-1], nxo) yco = N.linspace(yi[0], yi[-1], nyo) gridco = rotate_grid((xco, yco), -20) # Interpolate and Plot # - original rc('font', size=8) rc('axes', labelsize=7) kw = dict(show=False, axes_aspect=1, colorbar=False, grid=False) kwg = dict(edges=False, centers=True, markersize=2, alpha=1) ip = 1 plot2d(varri, title='Original rectangular', figure=10, figsize=(7, 7), subplot=(4,3,ip), **kw);ip+=1 plot2d(varci, title='Original curvilinear', subplot=(4,3,ip), **kw);ip+=1 # - nearest varo = regrid2d(varci, gridco, method='nearest', tool='vacumm') plot2d(varo, title='VACUMM / Nearest', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin r2r / vacumm varo = regrid2d(varri, gridro, method='bilinear', tool='vacumm') plot2d(varo, title='VACUMM / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridri, **kwg) # - bilin c2c / vacumm varo = regrid2d(varci, gridco, method='bilinear', tool='vacumm') plot2d(varo, title='VACUMM / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin c2c / emsf varo = regrid2d(varci, gridco, method='bilinear', tool='esmf') plot2d(varo, title='ESMF / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin c2c / libcf
# Création de bathymétries fictives à partir de Smith and Sandwell import cdms2 from vacumm.config import data_sample cdms2.axis.longitude_aliases.append('x') cdms2.axis.latitude_aliases.append('y') f = cdms2.open(data_sample('ETOPO2v2g_flt.grd')) # - large var_large = f('z', lon=(-7, -1), lat=(46, 49)) # - petite var_small = f('z', lon=(-4.5, -.5), lat=(44.5, 46.5)) f.close() # - regrillage de la large vers une grille moins fine from vacumm.misc.grid import regridding, resol, create_grid xr, yr = resol(var_large.getGrid()) grid_large = create_grid((-7., -1, xr * 4.5), (46., 49, yr * 4.5)) var_large = regridding.regrid2d(var_large, grid_large) # On ajoute un traît de côte pour le masquage from vacumm.bathy.bathy import GriddedBathy, GriddedBathyMerger bathy_large = GriddedBathy(var_large, shoreline='i') bathy_small = var_small # Création de la grille finale de résolution intermédiaire final_grid = create_grid((-6., .5, xr * 2.5), (45, 47., yr * 2.5)) # On crée maintenant le merger merger = GriddedBathyMerger(final_grid) # - ajout de la bathy basse resolution en premier (en dessous) merger += bathy_large # - puis ajout de celle haute résolution merger += bathy_small
# -*- coding: utf8 -*- from vacumm.misc.grid.regridding import regrid2d import MV2 from vacumm.misc.grid import create_grid from vacumm.misc.plot import map2 as map import pylab as P gmax=40 ggi = create_grid((0., gmax, 1.), (0., gmax, 1.)) ggo = create_grid((0.01, gmax, .5), (0.01, gmax, .5)) vari = MV2.reshape(MV2.arange(ggi.size(), dtype='f'), ggi.shape) vari.setGrid(ggi) varo = regrid2d(vari, ggo, 'bilinear') map(varo, clabel_glow=True, resolution=None, show=False, savefigs=__file__)
# Affectation de la grille curvilineaire à la variable from vacumm.misc.grid import curv_grid, set_grid cgridi = curv_grid(lon2d, lat2d) hs = set_grid(hs, cgridi) # Rotation de la grid from vacumm.misc.grid import rotate_grid import numpy as N cgrido = rotate_grid(hs.getGrid(), -30) print 'Regrillage' from vacumm.misc.grid.regridding import regrid2d print ' - par natgrid' hs_nat = regrid2d(hs, cgrido, 'nat') print ' - par SCRIP/conservative' hs_scripcons = regrid2d(hs, cgrido, 'conservative') print ' - par SCRIP/bilineaire' hs_scripbilin = regrid2d(hs, cgrido, 'bilinear') print 'Plots' from matplotlib import rcParams ; rcParams['font.size'] = 10 import pylab as P from vacumm.misc.plot import map2, savefigs, xhide, yhide, add_grid P.figure(figsize=(6.5, 5)) P.subplots_adjust(hspace=.28, bottom=.07, left=.08, right=.98) kwplot = dict(show=False, colorbar=False, vmin=hs.min(), vmax=hs.max(), drawparallels_size=8, drawmeridians_size=8, drawmeridians_rotation=45.) m = map2(hs, title='Original', subplot=221, xhide=1,**kwplot)
# -*- coding: utf8 -*- from vacumm.misc.grid.regridding import regrid2d import MV2 from vacumm.misc.grid import create_grid from vacumm.misc.plot import map2 as map import pylab as P gmax=40 ggi = create_grid((0., gmax, 1.), (0., gmax, 1.)) ggo = create_grid((0.01, gmax, .5), (0.01, gmax, .5)) vari = MV2.reshape(MV2.arange(ggi.size(), dtype='f'), ggi.shape) vari.setGrid(ggi) varo = regrid2d(vari, ggo, 'bilinear') map(varo, clabel_glow=True, resolution=None, show=False, savefigs=__file__, close=True)
# Affectation de la grille curvilineaire à la variable from vacumm.misc.grid import curv_grid, set_grid cgridi = curv_grid(lon2d, lat2d) hs = set_grid(hs, cgridi) # Rotation de la grid from vacumm.misc.grid import rotate_grid import numpy as N cgrido = rotate_grid(hs.getGrid(), -30) print 'Regrillage' from vacumm.misc.grid.regridding import regrid2d print ' - par SCRIP/conservative' hs_scripcons = regrid2d(hs, cgrido, 'conservative') print ' - par SCRIP/bilineaire' hs_scripbilin = regrid2d(hs, cgrido, 'bilinear') print 'Plots' from matplotlib import rcParams ; rcParams['font.size'] = 10 import pylab as P from vacumm.misc.plot import map2, savefigs, xhide, yhide, add_grid P.figure(figsize=(4, 7)) P.subplots_adjust(hspace=.28, bottom=.07, left=.08, right=.98) kwplot = dict(show=False, colorbar=False, vmin=hs.min(), vmax=hs.max(), drawparallels_size=8, drawmeridians_size=8, drawmeridians_rotation=45., xhide='auto', yhide='auto') m = map2(hs, title='Original', subplot=311, **kwplot) add_grid(cgrido, lw=.7, alpha=.3)
yco = N.linspace(yi[0], yi[-1], nyo) gridco = rotate_grid((xco, yco), -20) # Interpolate and Plot # - original rc("font", size=8) rc("axes", labelsize=7) kw = dict(show=False, axes_aspect=1, colorbar=False, grid=False, linewidth=0.3) kwg = dict(edges=False, centers=True, markersize=2, alpha=1) ip = 1 plot2d(varri, title="Original rectangular", figure=10, figsize=(7, 7), subplot=(4, 3, ip), **kw) ip += 1 plot2d(varci, title="Original curvilinear", subplot=(4, 3, ip), **kw) ip += 1 # - nearest varo = regrid2d(varci, gridco, method="nearest", tool="vacumm") plot2d(varo, title="VACUMM / Nearest", subplot=(4, 3, ip), **kw) ip += 1 add_grid(gridci, **kwg) # - bilin r2r / vacumm varo = regrid2d(varri, gridro, method="bilinear", tool="vacumm") plot2d(varo, title="VACUMM / Bilinear", subplot=(4, 3, ip), **kw) ip += 1 add_grid(gridri, **kwg) # - bilin c2c / vacumm varo = regrid2d(varci, gridco, method="bilinear", tool="vacumm") plot2d(varo, title="VACUMM / Bilinear", subplot=(4, 3, ip), **kw) ip += 1 add_grid(gridci, **kwg) # - bilin c2c / emsf varo = regrid2d(varci, gridco, method="bilinear", tool="esmf")
# Création de bathymétries fictives à partir de Smith and Sandwell import cdms2 from vacumm.config import data_sample cdms2.axis.longitude_aliases.append('x') cdms2.axis.latitude_aliases.append('y') f = cdms2.open(data_sample('ETOPO2v2g_flt.grd')) # - large var_large = f('z', lon=(-7, -1), lat=(46, 49)) # - petite var_small = f('z', lon=(-4.5, -.5), lat=(44.5, 46.5)) f.close() # - regrillage de la large vers une grille moins fine from vacumm.misc.grid import regridding, resol, create_grid xr, yr = resol(var_large.getGrid()) grid_large = create_grid((-7., -1, xr*4.5), (46., 49, yr*4.5)) var_large = regridding.regrid2d(var_large, grid_large) # On ajoute un traît de côte pour le masquage from vacumm.bathy.bathy import GriddedBathy, GriddedBathyMerger bathy_large = GriddedBathy(var_large, shoreline='i') bathy_small = var_small # Création de la grille finale de résolution intermédiaire final_grid = create_grid((-6., .5, xr*2.5), (45, 47., yr*2.5)) # On crée maintenant le merger merger = GriddedBathyMerger(final_grid) # - ajout de la bathy basse resolution en premier (en dessous) merger += bathy_large # - puis ajout de celle haute résolution merger += bathy_small