NCL Home> Application examples> Data Analysis || Data files for some examples

Example pages containing: tips | resources | functions/procedures

NCL: Regridding

Regridding is the process of interpolating from a source grid (SRC), to a destination grid (DST). For rectilinear, grids this may be represented as

                 SRC(ys,xs) ==> DST(yd,xd)
where
                 ys,xs rectilinear
There are numerous regridding functions available in NCL. In NCL version 6.1.0, new regridding capabilities available via the use of software from the Earth System Modeling Framework (ESMF) provided high-quality regridding on rectilinear, curvilinear, and unstructured grids, using bilinear, patch, or conservative interpolation.

Of the older regridding routines, some are unique (eg: use of spherical harmonics); conservative remapping (eg, area_conserve_remap and area_conserve_remap_Wrap). Conventional bilinear interpolation is available (eg: linint2 and linint2_Wrap). Some allow regridding from rectilinear grids to curvilinear grids, (eg: rgrid2rcm and rgrid2rcm_Wrap), and curvilinear grids to rectilinear grids (eg: rcm2rgrid and rcm2rgrid_Wrap).

Other functions exist to "fill" existing grids via extrapolation or a Poisson based algorithm. The Grid_Fill and Vertical Interpolation Application pages provide examples.

regrid_1.ncl: An example of using linint2_Wrap, which interpolates from one grid to another using bilinear interpolation, and also retains metadata.
regrid_2.ncl: An example of using g2gsh, which interpolates from one gaussian grid to another using spherical harmonics.

Example: the actual interpolation is conducted using g2gsh_Wrap, a wrapper function that will assign all the appropriate meta data, including the gaussian latitudes, to resulting output.

regrid_3.ncl: An example of using g2fsh_Wrap, which interpolates from one gaussian grid to a fixed grid using spherical harmonics.
regrid_4.ncl: An example of using f2fsh_Wrap, which interpolates from one fixed grid to another using spherical harmonics.
regrid_5.ncl: An example of using f2gsh, which interpolates from a fixed grid to a gaussian grid using spherical harmonics.

Even though this example uses f2gsh_Wrap the coordinate variables could be created manually. See example one for the creation of the longitude array. The resulting gaussian latitude array can be created using latGau.

regrid_6.ncl: An example of using area_conserve_remap_Wrap, to perform an interpolation from a high resolution fixed (regular) grid to a lower resolution fixed grid. The interpolation is globally conservative. This function also retains metadata.

regrid_7.ncl: An example of using area_conserve_remap_Wrap, to perform an interpolation from a high resolution fixed (regular) grid to a lower resolution Gaussian grid. The interpolation is globally conservative. This function also retains metadata.

regrid_8.ncl: An example of using area_conserve_remap_Wrap, to perform an interpolation from a high resolution Gaussian grid to a lower resolution Gaussian grid. The interpolation is globally conservative. This function also retains metadata.

regrid_9.ncl: An example of using area_conserve_remap_Wrap, to perform an interpolation from a high resolution Gaussian grid to a lower resolution fixed grid. The interpolation is globally conservative. This function also retains metadata.

regrid_10.ncl: An example of using area_conserve_remap_Wrap, to perform an interpolation from a high resolution fixed (regular) grid with limited latitudinal extent to a lower resolution fixed grid with approximately the same latitudinal extent. The interpolation is globally conservative. This function also retains metadata.

regrid_11.ncl: An example of using area_conserve_remap_Wrap, to perform an interpolation from a high resolution fixed (regular) grid with limited latitudinal extent to a lower resolution gaussian grid with approximately the same latitudinal extent. The interpolation is not conservative. This function also retains metadata.

regrid_12.ncl: Another simple example of using area_conserve_remap_Wrap to perform an interpolation from a high resolution regular grid to a lower resolution grid. The variable being regridded is surface topography [elevation]. This function also retains metadata.

regrid_13.ncl: Another example of using area_conserve_remap_Wrap to perform an interpolation from a high resolution regular grid to a lower resolution grid. The variable being regridded is surface topography [elevation]. It is demonstrated how one might create a set of lat/lon values that outline Tibet. The user specified variable "zcrit" can be changed as needed. The value "zcrit=1500" corresponds to approximately 850 hPa. "zcrit" values of 2500, 3500 and 4500 would correspond to approxiamtely 750, 650 and 575 hPa, respectively. This function also retains metadata.

regrid_14.ncl: Another example of using linint2_Wrap to perform a bilinear interpolation from a (180,360) regular grid to a slightly different resolution (192,288) grid. The variable being regridded is daily precipitation which (generally) has a highly fractal structure. From point-to-point, the data are not smoothly varying. In fact, they may well be discontinuous at adjacent grid points. Consider a worst case scenario of rain rate (mm/day) at 4 adjacent grid points in the source grid (+)

          100           0
           +            +

                 *

           +            +
           0            0
The interpolated value (*) of the target grid (192,288) would (if it was right in the middle) be

          * (25)  = (100+0+0+0)/4   ; average the source [ + ] gridpoints
This type of thing would occur at all target grid locations. The only exception would be an instance where the source and target grid locations are identical. Hence, in general, source grid maxima & minima are 'lost.'

Now interpolate the target (*) values, which are all weighted averages, back to the original gridded locations (+). In a sense, you are averaging the averages. This reduces the values even more.

**Punch line: interpolation is not reversible.**

Having a smoothly varying variable (eg, temperature, sea-level pressure, ...) minimizes the effect of interpolation but the issue is still there.

Using ESMF conservative interpolation would preserve the global mean prc in both the original interpolation (MVR grid) and the reinterpolated grid ***BUT*** the price would be a smearing out of the local values. The local differences may be even larger.

The linint2_Wrap function also retains metadata.

regrid_15.ncl: Five GRIB2 files are opened via addfiles. The GRIB2 variable containing vertical velocity ("VVEL_P0_L100_GLL0") at 46 pressure levels is imported. A local library [grid2geocircle.ncl] contains the rgrid2geolocation interpolation function. The source 'omega' variable is dimensioned:


   [forecast_time0 | 5] x [lv_ISBL0 | 46] x [lat_0 | 721] x [lon_0 | 881]
The returned variable is dimensioned:

  [forecast_time0 | 5] x [center | 1] x [lv_ISBL0 | 46] x [radius | 17] x [circle | 180]
The radially (azimuthally) averaged variable is dimensioned:

  [forecast_time0 | 5] x [center | 1] x [lv_ISBL0 | 46] x [radius | 17]
The data for this example are on a rectilinear grid. Hence, use of the rgrid2geolocation was appropriate. The library also contains a function appropriate for use with curvilinear grid: rcm2geolocation.

The regrid_15 also illustrates how a netCDF file may be created.

The three figures are:

    (a) original variable at user specified level
    (b) 'radial' interpolated values at locations defined by 'plat' and 'plon'
    (c) 'radial' averaged values at locations each radius

regrid_15_regcm.ncl:

A high resolution RegCM netCDF file is used. The variables are on a rectilinear grid. A local library [grid2geocircle.ncl] contains the rgrid2geolocation interpolation function. The source 'ua' and 'va' variables are used to derive total wind speed. It is dimensioned:


   [time | 1] x [plev | 4] x [lat | 84] x [lon | 228]
The returned variable is dimensioned:

  [time | 1] x [center | 1] x [plev | 4] x [radius | 25] x [circle | 180]
The radially (azimuthally) averaged variable is dimensioned:

  [time | 1] x [center | 1] x [plev | 4] x [radius | 25]
The data for this example are on a rectilinear grid. Hence, use of the rgrid2geolocation was appropriate. The library also contains a function appropriate for use with curvilinear grid: rcm2geolocation.

The regrid_15_regcm also illustrates how a netCDF file may be created.

The three figures are:

    (a) original variable at user specified level
    (b) 'radial' interpolated values at locations defined by 'plat' and 'plon'
    (c) 'radial' averaged values at locations each radius

regrid_16.ncl: (a) Read a TRMM netCDF; (b) Specify two locations; (c) Specify distance [km] from the two locations; (d) use css2c to translate latitude(s) and longitude(s) in the region of the two locations to Cartesian coordinates; center the results about the two locations; (e) plot. The three figures are:

    (a) original variable at user specified region and the two locations are marked
    (b) Centered cartesian plot about the first location
    (c) Centered cartesian plot about the second location

regrid_17.ncl: Similar to regrid_16: (a) Read a TRMM netCDF; (b) Specify two locations; (c) Specify distance [km] from the two locations; (d) Translate the distance in km to degrees; (e) Interpolate the TRMM latitudes and longitudes to 'geocircles' (aximuthal) locations via a local library [grid2geocircle.ncl] which contains the rgrid2geolocation interpolation function. (f) use css2c to translate the geocircle latitude(s) and longitude(s) to Cartesian coordinates; (g) center the results about the two locations; (h) plot. The two figures are:

    (a) Centered cartesian plot for the first location
    (b) Centered cartesian plot for the second location