CVT is a FORTRAN90 library 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 library 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 library, 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.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
CVT is available in a C++ version and a FORTRAN90 version and a MATLAB version.
CVT is a dataset directory which contains a variety of CVT datasets.
CVT_BASIS is a FORTRAN90 program which seeks to produce a small set of basis vectors from a large set of data vectors.
CVT_DATASET is a FORTRAN90 program which computes a CVT dataset.
CVT_DEMO is a MATLAB library which demonstrates the computation of a CVT.
CVT_FIXED is a FORTRAN90 library which computes CVT's in which some values are to be fixed.
CVT_MOD is a FORTRAN90 library which computes CVT's on a unit square with "mod" geometry, which essentially makes the unit square a tile in a periodic pattern.
CVT_SANDIA is a FORTRAN90 library which computes CVT's.
CVT_TRIANGULATION is a FORTRAN90 program which constructs a CVT for a region specified by the TEST_TRIANGULATION library.
FAURE is a FORTRAN90 library which computes elements of a Faure quasirandom sequence.
GRID is a FORTRAN90 library which computes elements of a grid dataset.
HALTON is a FORTRAN90 library which computes elements of a Halton quasirandom sequence.
HAMMERSLEY is a FORTRAN90 library which computes elements of a Hammersley quasirandom sequence.
HEX_GRID is a FORTRAN90 library which computes elements of a hexagonal grid dataset.
HEX_GRID_ANGLE is a FORTRAN90 library which computes elements of an angled hexagonal grid dataset.
IHS is a FORTRAN90 library which computes elements of an improved distributed Latin hypercube dataset.
LATIN_CENTER is a FORTRAN90 library which computes elements of a Latin Hypercube dataset, choosing center points.
LATIN_EDGE is a FORTRAN90 library which computes elements of a Latin Hypercube dataset, choosing edge points.
LATIN_RANDOM is a FORTRAN90 library which computes elements of a Latin Hypercube dataset, choosing points at random.
LATTICE is a FORTRAN90 library which approximates multidimensional integrals using lattice rules.
LCVT is a FORTRAN90 library which computes a latinized Centroidal Voronoi Tessellation.
NIEDERREITER2 is a FORTRAN90 library which computes elements of a Niederreiter quasirandom sequence with base 2.
NORMAL is a FORTRAN90 library which computes elements of a sequence of pseudorandom normally distributed values.
SOBOL is a FORTRAN90 library which computes elements of a Sobol quasirandom sequence.
UNIFORM is a FORTRAN90 library which computes elements of a uniform pseudorandom sequence.
VAN_DER_CORPUT is a FORTRAN90 library which computes elements of a van der Corput quasirandom sequence.
You can go up one level to the FORTRAN90 source codes.