NAG Library Routine Document

e01saf  (dim2_scat)


    1  Purpose
    7  Accuracy


e01saf generates a two-dimensional surface interpolating a set of scattered data points, using the method of Renka and Cline.


Fortran Interface
Subroutine e01saf ( m, x, y, f, triang, grads, ifail)
Integer, Intent (In):: m
Integer, Intent (Inout):: ifail
Integer, Intent (Out):: triang(7*m)
Real (Kind=nag_wp), Intent (In):: x(m), y(m), f(m)
Real (Kind=nag_wp), Intent (Out):: grads(2,m)
C Header Interface
#include nagmk26.h
void  e01saf_ ( const Integer *m, const double x[], const double y[], const double f[], Integer triang[], double grads[], Integer *ifail)


e01saf constructs an interpolating surface Fx,y through a set of m scattered data points xr,yr,fr, for r=1,2,,m, using a method due to Renka and Cline. In the x,y plane, the data points must be distinct. The constructed surface is continuous and has continuous first derivatives.
The method involves firstly creating a triangulation with all the x,y data points as nodes, the triangulation being as nearly equiangular as possible (see Cline and Renka (1984)). Then gradients in the x- and y-directions are estimated at node r, for r=1,2,,m, as the partial derivatives of a quadratic function of x and y which interpolates the data value fr, and which fits the data values at nearby nodes (those within a certain distance chosen by the algorithm) in a weighted least squares sense. The weights are chosen such that closer nodes have more influence than more distant nodes on derivative estimates at node r. The computed partial derivatives, with the fr values, at the three nodes of each triangle define a piecewise polynomial surface of a certain form which is the interpolant on that triangle. See Renka and Cline (1984) for more detailed information on the algorithm, a development of that by Lawson (1977). The code is derived from Renka (1984).
The interpolant Fx,y can subsequently be evaluated at any point x,y inside or outside the domain of the data by a call to e01sbf. Points outside the domain are evaluated by extrapolation.


Cline A K and Renka R L (1984) A storage-efficient method for construction of a Thiessen triangulation Rocky Mountain J. Math. 14 119–139
Lawson C L (1977) Software for C1 surface interpolation Mathematical Software III (ed J R Rice) 161–194 Academic Press
Renka R L (1984) Algorithm 624: triangulation and interpolation of arbitrarily distributed points in the plane ACM Trans. Math. Software 10 440–442
Renka R L and Cline A K (1984) A triangle-based C1 interpolation method Rocky Mountain J. Math. 14 223–237


1:     m – IntegerInput
On entry: m, the number of data points.
Constraint: m3.
2:     xm – Real (Kind=nag_wp) arrayInput
3:     ym – Real (Kind=nag_wp) arrayInput
4:     fm – Real (Kind=nag_wp) arrayInput
On entry: the coordinates of the rth data point, for r=1,2,,m. The data points are accepted in any order, but see Section 9.
Constraint: the x,y nodes must not all be collinear, and each node must be unique.
5:     triang7×m – Integer arrayOutput
On exit: a data structure defining the computed triangulation, in a form suitable for passing to e01sbf.
6:     grads2m – Real (Kind=nag_wp) arrayOutput
On exit: the estimated partial derivatives at the nodes, in a form suitable for passing to e01sbf. The derivatives at node r with respect to x and y are contained in grads1r and grads2r respectively, for r=1,2,,m.
7:     ifail – IntegerInput/Output
On entry: ifail must be set to 0, -1​ or ​1. If you are unfamiliar with this argument you should refer to Section 3.4 in How to Use the NAG Library and its Documentation for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value -1​ or ​1 is recommended. If the output of error messages is undesirable, then the value 1 is recommended. Otherwise, if you are not familiar with this argument, the recommended value is 0. When the value -1​ or ​1 is used it is essential to test the value of ifail on exit.
On exit: ifail=0 unless the routine detects an error or a warning has been flagged (see Section 6).

Error Indicators and Warnings

If on entry ifail=0 or -1, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
On entry,m<3.
On entry,all the (x,y) pairs are collinear.
On entry,xi,yi=xj,yj for some ij.
An unexpected error has been triggered by this routine. Please contact NAG.
See Section 3.9 in How to Use the NAG Library and its Documentation for further information.
Your licence key may have expired or may not have been installed correctly.
See Section 3.8 in How to Use the NAG Library and its Documentation for further information.
Dynamic memory allocation failed.
See Section 3.7 in How to Use the NAG Library and its Documentation for further information.


On successful exit, the computational errors should be negligible in most situations but you should always check the computed surface for acceptability, by drawing contours for instance. The surface always interpolates the input data exactly.

Parallelism and Performance

e01saf is not threaded in any implementation.

Further Comments

The time taken for a call of e01saf is approximately proportional to the number of data points, m. The routine is more efficient if, before entry, the values in x, y and f are arranged so that the x array is in ascending order.


This example reads in a set of 30 data points and calls e01saf to construct an interpolating surface. It then calls e01sbf to evaluate the interpolant at a sample of points on a rectangular grid.
Note that this example is not typical of a realistic problem: the number of data points would normally be larger, and the interpolant would need to be evaluated on a finer grid to obtain an accurate plot, say.

Program Text

Program Text (e01safe.f90)

Program Data

Program Data (e01safe.d)

Program Results

Program Results (e01safe.r)

© The Numerical Algorithms Group Ltd, Oxford, UK. 2017