greenspline - Interpolate using Green’s functions for splines in 1-3 dimensions
greenspline [ table ] [ -A[1|2|3|4|5,]gradfile ] [ -C[n|v]cut[/file] ] [ -Dmode ] [ -Ggrdfile ] [ -Ixinc[/yinc[/zinc]] ] [ -L ] [ -Nnodefile ] [ -Qaz|x/y/z ] [ -Rwest/east/south/north[/zmin/zmax][r] ] [ -Sc|l|t|g|p|q[pars] ] [ -Tmaskgrid ] [ -V[level] ] [ -W ] [ -b[i|o][ncol][type][w][+L|+B] ] [ -f[i|o]colinfo ] [ -h[i|o][n][+c][+d][+rremark][+rtitle] ] [ -ocols[,...] ] [ -:[i|o] ]
Note: No space is allowed between the option flag and the associated arguments.
greenspline uses the Green’s function G(x; x’) for the chosen spline and geometry to interpolate data at regular [or arbitrary] output locations. Mathematically, the solution is composed as w(x) = sum {c(i) G(x’; x(i))}, for i = 1, n, the number of data points {x(i), w(i)}. Once the n coefficients c(i) have been found the sum can be evaluated at any output point x. Choose between minimum curvature, regularized, or continuous curvature splines in tension for either 1-D, 2-D, or 3-D Cartesian coordinates or spherical surface coordinates. After first removing a linear or planar trend (Cartesian geometries) or mean value (spherical surface) and normalizing these residuals, the least-squares matrix solution for the spline coefficients c(i) is found by solving the n by n linear system w(j) = sum-over-i {c(i) G(x(j); x(i))}, for j = 1, n; this solution yields an exact interpolation of the supplied data points. Alternatively, you may choose to perform a singular value decomposition (SVD) and eliminate the contribution from the smallest eigenvalues; this approach yields an approximate solution. Trends and scales are restored when evaluating the output.
None.
Specify the domain for an equidistant lattice where output predictions are required. Requires -I and optionally -r.
1-D: Give xmin/xmax, the minimum and maximum x coordinates.
2-D: Give xmin/xmax/ymin/ymax, the minimum and maximum x and y coordinates. These may be Cartesian or geographical. If geographical, then west, east, south, and north specify the Region of interest, and you may specify them in decimal degrees or in [+-]dd:mm[:ss.xxx][W|E|S|N] format. The two shorthands -Rg and -Rd stand for global domain (0/360 and -180/+180 in longitude respectively, with -90/+90 in latitude).
3-D: Give xmin/xmax/ymin/ymax/zmin/zmax, the minimum and maximum x, y and z coordinates. See the 2-D section if your horizontal coordinates are geographical; note the shorthands -Rg and -Rd cannot be used if a 3-D domain is specified.
To resample the x,y Gaussian random data created by gmtmath and stored in 1D.txt, requesting output every 0.1 step from 0 to 10, and using a minimum cubic spline, try
gmt gmtmath -T0/10/1 0 1 NRAND = 1D.txt gmt psxy -R0/10/-5/5 -JX6i/3i -B2f1/1 -Sc0.1 -Gblack 1D.txt -K > 1D.ps gmt greenspline 1D.txt -R0/10 -I0.1 -Sc -V | psxy -R -J -O -Wthin >> 1D.ps
To apply a spline in tension instead, using a tension of 0.7, try
gmt psxy -R0/10/-5/5 -JX6i/3i -B2f1/1 -Sc0.1 -Gblack 1D.txt -K > 1Dt.ps gmt greenspline 1D.txt -R0/10 -I0.1 -St0.7 -V | psxy -R -J -O -Wthin >> 1Dt.ps
To make a uniform grid using the minimum curvature spline for the same Cartesian data set from Davis (1986) that is used in the GMT Technical Reference and Cookbook example 16, try
gmt greenspline table_5.11 -R0/6.5/-0.2/6.5 -I0.1 -Sc -V -D1 -GS1987.nc gmt psxy -R0/6.5/-0.2/6.5 -JX6i -B2f1 -Sc0.1 -Gblack table_5.11 -K > 2D.ps gmt grdcontour -JX6i -B2f1 -O -C25 -A50 S1987.nc >> 2D.ps
To use Cartesian splines in tension but only evaluate the solution where the input mask grid is not NaN, try
gmt greenspline table_5.11 -Tmask.nc -St0.5 -V -D1 -GWB1998.nc
To use Cartesian generalized splines in tension and return the magnitude of the surface slope in the NW direction, try
gmt greenspline table_5.11 -R0/6.5/-0.2/6.5 -I0.1 -Sr0.95 -V -D1 -Q-45 -Gslopes.nc
Finally, to use Cartesian minimum curvature splines in recovering a surface where the input data is a single surface value (pt.d) and the remaining constraints specify only the surface slope and direction (slopes.d), use
gmt greenspline pt.d -R-3.2/3.2/-3.2/3.2 -I0.1 -Sc -V -D1 -A1,slopes.d -Gslopes.nc
To create a uniform 3-D Cartesian grid table based on the data in table_5.23 in Davis (1986) that contains x,y,z locations and a measure of uranium oxide concentrations (in percent), try
gmt greenspline table_5.23 -R5/40/-5/10/5/16 -I0.25 -Sr0.85 -V -D5 -G3D_UO2.txt
To recreate Parker’s [1994] example on a global 1x1 degree grid, assuming the data are in file mag_obs_1990.d, try
greenspline -V -Rg -Sp -D3 -I1 -GP1994.nc mag_obs_1990.d
To do the same problem but applying tension of 0.85, use
greenspline -V -Rg -Sq0.85 -D3 -I1 -GWB2008.nc mag_obs_1990.d
(1) For the Cartesian cases we use the free-space Green functions, hence no boundary conditions are applied at the edges of the specified domain. For most applications this is fine as the region typically is arbitrarily set to reflect the extent of your data. However, if your application requires particular boundary conditions then you may consider using surface instead.
(2) In all cases, the solution is obtained by inverting a n x n double precision matrix for the Green function coefficients, where n is the number of data constraints. Hence, your computer’s memory may place restrictions on how large data sets you can process with greenspline <greenspline.html>. Pre-processing your data with blockmean <blockmean.html>, blockmedian <blockmedian.html>, or blockmode <blockmode.html> is recommended to avoid aliasing and may also control the size of n. For information, if n = 1024 then only 8 Mb memory is needed, but for n = 10240 we need 800 Mb. Note that greenspline <greenspline.html> is fully 64-bit compliant if compiled as such. For spherical data you may consider decimating using gmtspatial <gmtspatial.html> nearest neighbor reduction.
(3) The inversion for coefficients can become numerically unstable when data neighbors are very close compared to the overall span of the data. You can remedy this by pre-processing the data, e.g., by averaging closely spaced neighbors. Alternatively, you can improve stability by using the SVD solution and discard information associated with the smallest eigenvalues (see -C).
(4) The series solution implemented for -Sq was developed by Robert L. Parker, Scripps Institution of Oceanography, which we gratefully acknowledge.
Tension is generally used to suppress spurious oscillations caused by the minimum curvature requirement, in particular when rapid gradient changes are present in the data. The proper amount of tension can only be determined by experimentation. Generally, very smooth data (such as potential fields) do not require much, if any tension, while rougher data (such as topography) will typically interpolate better with moderate tension. Make sure you try a range of values before choosing your final result. Note: the regularized spline in tension is only stable for a finite range of scale values; you must experiment to find the valid range and a useful setting. For more information on tension see the references below.
Davis, J. C., 1986, Statistics and Data Analysis in Geology, 2nd Edition, 646 pp., Wiley, New York,
Mitasova, H., and L. Mitas, 1993, Interpolation by regularized spline with tension: I. Theory and implementation, Math. Geol., 25, 641-655.
Parker, R. L., 1994, Geophysical Inverse Theory, 386 pp., Princeton Univ. Press, Princeton, N.J.
Sandwell, D. T., 1987, Biharmonic spline interpolation of Geos-3 and Seasat altimeter data, Geophys. Res. Lett., 14, 139-142.
Wessel, P., and D. Bercovici, 1998, Interpolation with splines in tension: a Green’s function approach, Math. Geol., 30, 77-93.
Wessel, P., and J. M. Becker, 2008, Interpolation using a generalized Green’s function for a spherical surface spline in tension, Geophys. J. Int, 174, 21-28.
Wessel, P., 2009, A general-purpose Green’s function interpolator, Computers & Geosciences, 35, 1247-1254, doi:10.1016/j.cageo.2008.08.012.
gmt, gmtmath, nearneighbor, psxy, sphtriangulate, surface, triangulate, xyz2grd