Variable density 3-d nodes for RBF computations
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Variable density 3-d nodes for RBF computations

This is a collection of Matlab routines for distributing nodes (discrete sets) with variable density. The nodes are drawn from a sequence of either periodic Riesz minimizers or irrational lattices, with variable number of elements. The principal application for such sets are RBF-based PDE solvers. The algorithm processes the working domain by dividing it into a number of equal cube-shaped voxels and putting nodes with constant density in each of them, then applying a repel procedure using the weighted hypersingular Riesz kernel. Currently only the 3-dimensional case is supported; a higher-dimensional implementation can be produced by trivial adjustments to the present code. For theoretic details see the companion paper.


The RUNME routine is intended to be the starting point for exploring the code. Upon execution, it will offer to run one of the three main examples: node_cloud, node_earth, and node_shell. The subfolder ./output will contain all the output saved to disk, as well as scripts to plot the results with gnuplot, should the user wish to do so (most of the plotting is done within Matlab itself). To see details about a specific function/script, type help name_of_the_function in Matlab prompt while in the 3dRBFnodes folder (it may be necessary to execute RUNME.m first to adjust the Matlab PATH). A number of parameters as well as the distribution density can be set in the preambles of node_{example}.m scripts. Executing either one of them adds the ./helpers folder to the Matlab path. All the helper functions are collected in ./helpers. The ones that are perhaps the easiest to use for generic purposes are:

  • repel - spreads out a given configuration 'cnf' of size (dim) x (N) by moving it along the gradient flow of a weighted Riesz functional; supports generic domains and densities;
  • saturate - finds and fills Voronoi holes in a given configuration 'cnf' that are deeper than a certain density function; supports generic domains.

Note that the execution of node_earth depends on the ETOPO1 data from the NOAA website; the etopo1load helper script downloads it automatically using the curl utility. In the case curl is not available on your system, save and unpack the ETOPO1 archive into the ./output directory.
The routines that have names starting with paper_ will reproduce the figures in the corresponding section of the paper. It should be noted that the GPU helpers in ./helpers_gpu are unstable (and most probably unusable) at the time of writing.


See here for the list of individual contributors to the source code.


The accompanying paper by N. Flyer, B. Fornberg, T. Michaels, and O. Vlasiuk Fast high-dimensional node generation with variable density can be found on the arXiv.

For a different approach to 2-dimensional distributions, see Fast generation of 2-D node distributions for mesh-free PDE discretizations.

For how to solve PDEs with RBFs, see Solving PDEs with radial basis functions.

About the underlying theory on Riesz energy functionals, see papers

For an even longer list, refer to Edward Saff's webpage with the bibliography of applications of the Riesz functionals.