The lterp function performs bi-linear intepolation between two grids. It is a built-in function as of version 2.0 -- in earlier versions it was implemented as a user defined function. The syntax is:
lterp(source,dest)
The data values in the source
expression are interpolated to the grid in the dest
expression. The data values in the dest
expression are ignored. The returned result is on the same grid as dest
.
Works only with gridded data. The source
and dest
expressions must have the same varying dimensions, which may be X, Y, or T. Interpolation is not performed in the Z or E dimension.
The source
and dest
expressions may vary in 1 or 2 dimensions.
If the domain of
source
is larger than the domain of dest
, the returned result will have an expanded grid to cover the requested domain.
For interpolation in the time dimension, you may interpolate (A) between monthly and yearly time axes, or (B) between minute, hourly, and daily time axes.
* This script interpolates a 1-D timeseries of hourly station data to a 3hourly grid
open hourly_station_data.ctl
open 3hourly_grid_data.ctl
set x 1
set y 1
set time 00z1jan 00z1feb
d lterp(s2g1d(var.1(stid=kbwi)),var.2(lon=-77,lat=39))
* This script interpolates 2-D lat/lon grids
'open obs.ctl'
'open model.ctl'
* define the destination grid
'set dfile 1'
'q file'
line5 = sublin(result,5)
ix = subwrd(line5,3)
iy = subwrd(line5,6)
'set x 1 'ix
'set y 1 'iy
'set t 1'
'define grid = obs'
* define the source grid
'set dfile 2'
'q file'
line5 = sublin(result,5)
ix = subwrd(line5,3)
iy = subwrd(line5,6)
'set x 1 'ix
'set y 1 'iy
'set t 1'
'define data = model'
* interpolate model data to obs grid
'd lterp(data,grid)'