
dsgrid3
Interpolates data from an unstructured (randomly-spaced) grid to a 3D grid using inverse distance weighted interpolation.
Prototype
function dsgrid3 ( x [*] : numeric, y [*] : numeric, z [*] : numeric, u : numeric, xo [*] : numeric, yo [*] : numeric, zo [*] : numeric ) return_val [dimsizes(x) * dimsizes(y) * dimsizes(z)] : float or double
Arguments
xA 1D array of length npts containing the X coordinates of the input data.
For lat/lon data, x represents the longitude values.
yA 1D array of length npts containing the Y coordinates of the input data.
For lat/lon data, y represents the latitude values.
zA 1D array of length npts containing the Z coordinates of the input data.
uAn array of any dimensionality (last dimension must be npts) containing the functional values of the input data. Element u(...,i) is the value of the input function at coordinate (x(i), y(i), z(i)) for i = 0, npts - 1).
xoA 1D array of any length (numxout) containing the X coordinates of the output data grid. The values in xo must be increasing, but need not be equally spaced.
yoA 1D array of any length (numyout) containing the Y coordinates of the output data grid. The values in yo must be increasing, but need not be equally spaced.
zoA 1D array of any length (numzout) containing the Z coordinates of the output data grid. The values in zo must be increasing, but need not be equally spaced.
Return value
Returns a floating point array dimensioned as N x numxout x numyout x numzout, where N represents all but the last dimension of u. The return value type is double if u is of type double.
Description
This function interpolates data from an unstructured (randomly-spaced) grid to a 3D grid.
This function requires that desired values for control parameters have been set using the procedure dssetp.
This function is part of the Dsgrid package which implements a simple inverse distance weighted interpolation algorithm. No missing values are allowed.
See Also
dsgrid2, dspnt2, dspnt3, dsgetp, dssetp
Examples
begin NUM = 1000 NX = 21 NY = 21 NZ = 21 RAND_MAX = 32767.0 xi = new((/NUM/), float) yi = new((/NUM/), float) zi = new((/NUM/), float) u = new((/NUM/), float) xo = new((/NX/), float) yo = new((/NY/), float) zo = new((/NZ/), float) xmin = -2.0 ymin = -2.0 zmin = -2.0 xmax = 2.0 ymax = 2.0 zmax = 2.0 ; ; Create random data in three space and define a function. ; rand1 = new((/NUM/), float) rand2 = new((/NUM/), float) rand3 = new((/NUM/), float) srand(1) do i = 0,NUM - 1 rand1(i) = rand rand2(i) = rand rand3(i) = rand end do xi = xmin + (xmax - xmin) * (rand1 / RAND_MAX) yi = ymin + (ymax - ymin) * (rand2 / RAND_MAX) zi = zmin + (zmax - zmin) * (rand3 / RAND_MAX) u = (xi * xi) + (yi * yi) + (zi * zi) ; ; Create the output grid. ; ii = fspan(0, 20.0, 21) xo = xmin + (ii / (NX - 1)) * (xmax - xmin) yo = ymin + (ii / (NY - 1)) * (ymax - ymin) zo = zmin + (ii / (NZ - 1)) * (zmax - zmin) ; ; Interpolate. ; u = dsgrid3(xi, yi, zi, u, xo, yo, zo) end