idlastro / Math and Statistics: NGP

[Source code]

NAME
NGP
PURPOSE
Interpolate an irregularly sampled field using Nearest Grid Point
EXPLANATION
This function interpolates irregularly gridded points to a
regular grid using Nearest Grid Point.
CATEGORY
Mathematical functions, Interpolation
CALLING SEQUENCE
Result = NGP, VALUE, POSX, NX[, POSY, NY, POSZ, NZ, 
              /AVERAGE, /WRAPAROUND, /NO_MESSAGE]
INPUTS
VALUE: Array of sample weights (field values). For e.g. a
       temperature field this would be the temperature and the
       keyword AVERAGE should be set. For e.g. a density field
       this could be either the particle mass (AVERAGE should
       not be set) or the density (AVERAGE should be set).
POSX:  Array of X coordinates of field samples, unit indices: [0,NX>.
NX:    Desired number of grid points in X-direction.
OPTIONAL INPUTS
POSY: Array of Y coordinates of field samples, unit indices: [0,NY>.
NY:   Desired number of grid points in Y-direction.
POSZ: Array of Z coordinates of field samples, unit indices: [0,NZ>.
NZ:   Desired number of grid points in Z-direction.
KEYWORD PARAMETERS
AVERAGE:    Set this keyword if the nodes contain field samples
            (e.g. a temperature field). The value at each grid
            point will then be the average of all the samples
            allocated to it. If this keyword is not set, the
            value at each grid point will be the sum of all the
            nodes allocated to it (e.g. for a density field from
            a distribution of particles). (D=0). 
WRAPAROUND: Set this keyword if the data is periodic and if you
            want the first grid point to contain samples of both
            sides of the volume (see below). (D=0).
NO_MESSAGE: Suppress informational messages.
Example of default NGP allocation n0=4, *=gridpoint.
0   1   2   3     Index of gridpoints
*   *   *   *     Grid points
--|---|---|---|   Range allocated to gridpoints ([0.0,1.0> --> 0, etc.)
  1   2   3   4   posx
Example of NGP allocation for WRAPAROUND n0=4, *=gridpoint.
0   1   2   3         Index of gridpoints
*   *   *   *         Grid points
|---|---|---|---|-- Range allocated to gridpoints ([0.5,1.5> --> 1, etc.)
0   1   2   3   4=0   posx
OUTPUTS
Prints that a NGP interpolation is being performed of x
samples to y grid points, unless NO_MESSAGE is set. 
RESTRICTIONS
All input arrays must have the same dimensions.
Position coordinates should be in `index units' of the
desired grid: POSX=[0,NX>, etc.
PROCEDURE
Nearest grid point is determined for each sample.
Samples are allocated to nearest grid points.
Grid point values are computed (sum or average of samples).
EXAMPLE
nx = 20
ny = 10
posx = randomu(s,1000)
posy = randomu(s,1000)
value = posx^2+posy^2
field = ngp(value,posx*nx,nx,posy*ny,ny,/average)
surface,field,/lego
NOTES
Use tsc.pro or cic.pro for a higher order interpolation schemes.    A 
standard reference for these interpolation methods is:   R.W. Hockney 
and J.W. Eastwood, Computer Simulations Using Particles (New York: 
McGraw-Hill, 1981).
MODIFICATION HISTORY
Written by Joop Schaye, Feb 1999.
Check for LONG overflow  P. Riley/W. Landsman   December 1999