cvt


cvt, a FORTRAN90 code which computes Centroidal Voronoi Tessellation (CVT) datasets.

The generation of a CVT dataset is of necessity more complicated than that of a quasirandom dataset. A quasirandom dataset is generally simply the first N values of a deterministic sequence. But to compute a CVT requires an iteration, so there must be an initial assignment for the generators, and then a number of iterations. Moreover, in each iteration, estimates must be made of the volume and location of the Voronoi cells. This is typically done by Monte Carlo sampling. The accuracy of the resulting CVT depends in part on the number of sampling points and the number of iterations taken.

The code is mostly used to generate a dataset of points uniformly distributed in the unit hypersquare. However, a user may be interested in computations with other geometries or point densities. To do this, the user needs to replace the USER() routine in the CVT code, and then specify the appropriate values init=3 and sample=3.

The USER routine returns a set of sample points from the region of interest. The default USER routine samples points uniformly from the unit circle. But other geometries are easy to set up. Changing the point density simply requires weighting the sampling in the region.

Licensing:

The computer code and data files described and made available on this web page are distributed under the MIT license

Languages:

cvt is available in a C++ version and a FORTRAN90 version and a MATLAB version.

Related Data and Programs:

CVT, a dataset directory which contains a variety of CVT datasets.

cvt_test

CVT_BASIS, a FORTRAN90 code which seeks to produce a small set of basis vectors from a large set of data vectors.

CVT_DEMO, a MATLAB code which demonstrates the computation of a CVT.

CVT_FIXED, a FORTRAN90 code which computes CVT's in which some values are to be fixed.

CVTP, a FORTRAN90 code which creates a CVTP, that is, a Centroidal Voronoi Tessellation on a periodic domain.

FAURE, a FORTRAN90 code which computes elements of a Faure quasirandom sequence.

HALTON, a FORTRAN90 code which computes elements of a Halton Quasi Monte Carlo (QMC) sequence, using a simple interface.

HAMMERSLEY, a FORTRAN90 code which computes elements of a Hammersley quasirandom sequence.

HEX_GRID, a FORTRAN90 code which computes elements of a hexagonal grid dataset.

IHS, a FORTRAN90 code which computes elements of an improved distributed Latin hypercube dataset.

LATIN_CENTER, a FORTRAN90 code which computes elements of a Latin Hypercube dataset, choosing center points.

LATIN_EDGE, a FORTRAN90 code which computes elements of a Latin Hypercube dataset, choosing edge points.

LATIN_RANDOM, a FORTRAN90 code which computes elements of a Latin Hypercube dataset, choosing points at random.

LATTICE_RULE, a FORTRAN90 code which approximates multidimensional integrals using lattice rules.

LCVT, a FORTRAN90 code which computes a latinized Centroidal Voronoi Tessellation.

NIEDERREITER2, a FORTRAN90 code which computes elements of a Niederreiter quasirandom sequence with base 2.

NORMAL, a FORTRAN90 code which computes elements of a sequence of pseudorandom normally distributed values.

SANDIA_CVT, a FORTRAN90 code which computes CVT's.

SOBOL, a FORTRAN90 code which computes elements of a Sobol quasirandom sequence.

UNIFORM, a FORTRAN90 code which computes elements of a uniform pseudorandom sequence.

VAN_DER_CORPUT, a FORTRAN90 code which computes elements of a van der Corput quasirandom sequence.

Reference:

  1. Franz Aurenhammer,
    Voronoi diagrams - a study of a fundamental geometric data structure,
    ACM Computing Surveys,
    Volume 23, Number 3, pages 345-405, September 1991.
  2. Paul Bratley, Bennett Fox, Linus Schrage,
    A Guide to Simulation,
    Springer Verlag, pages 201-202, 1983.
  3. John Burkardt, Max Gunzburger, Janet Peterson, Rebecca Brannon,
    User Manual and Supporting Information for code of Codes for Centroidal Voronoi Placement and Associated Zeroth, First, and Second Moment Determination,
    Sandia National Laboratories Technical Report SAND2002-0099,
    February 2002.
  4. Qiang Du, Vance Faber, Max Gunzburger,
    Centroidal Voronoi Tessellations: Applications and Algorithms,
    SIAM Review,
    Volume 41, 1999, pages 637-676.
  5. Bennett Fox,
    Algorithm 647:
    Implementation and Relative Efficiency of Quasirandom Sequence Generators,
    ACM Transactions on Mathematical Software,
    Volume 12, Number 4, pages 362-376, 1986.
  6. John Halton,
    On the efficiency of certain quasi-random sequences of points in evaluating multi-dimensional integrals,
    Numerische Mathematik,
    Volume 2, pages 84-90, 1960.
  7. Lili Ju, Qiang Du, Max Gunzburger,
    Probabilistic methods for centroidal Voronoi tessellations and their parallel implementations,
    Parallel Computing,
    Volume 28, 2002, pages 1477-1500.

Source Code:


Last revised on 14 June 2020.