# dsgrid3s, dsgrid3d

Functions for gridding 3-d data. These routines are part of the Dsgrid package which implements a simple inverse distance weighted interpolation algorithm.

## Synopsis

```    function dsgrid3s(
x[*]  : float,
y[*]  : float,
z[*]  : float,
u[*]  : float,
xo[*] : float,
yo[*] : float,
zo[*] : float
)

function dsgrid3d(
x[*]  : double,
y[*]  : double,
z[*]  : double,
u[*]  : double,
xo[*] : double,
yo[*] : double,
zo[*] : double
)

```

## Arguments

x
1D array of any length (npts) containing the X coordinates of the input data points
y
1D array of length npts containing the Y coordinates of the input data points
z
1D array of length npts containing the Z coordinates of the input data points
u
1D array of length npts containing the functional values of the input data points (u(i) is the value of the input function at coordinate (x(i), y(i), z(i)) for i=1,npts).
xo
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.
yo
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.
zo
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.

## Description

The dsgrid3s and dsgrid3d functions do interpolation from 3D random data to a 3D gridded array dimensioned numxout x numyout x numzout.

dsgrid3s returns an array of float values and dsgrid3d returns an array of double values. Both dsgrid3s and dsgrid3d are called after all of the desired values for control parameters have been set using the procedure dssetp.

dsgrid3s is the single precision version and dsgrid3d is the double precision version.

## Example

```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.,21)
xo = xmin + (ii/(NX-1)) * (xmax-xmin)
yo = ymin + (ii/(NY-1)) * (ymax-ymin)
zo = zmin + (ii/(NZ-1)) * (zmax-zmin)

;
; Interpolate.
;
output = dsgrid3s(xi, yi, zi, u, xo, yo, zo)

end
```

### Reference Manual Control Panel

\$Revision: 1.9 \$ \$Date: 1999/03/12 20:57:35 \$