LCVT is a library of FORTRAN90 routines, using double precision arithmetic, for creating Latin Centroidal Voronoi Tessellation (CVT) datasets.
A Latin Square dataset is typically a two dimensional dataset of N points in the unit square, with the property that, if both the x and y axes are divided up into N equal subintervals, exactly one dataset point has an x or y coordinate in each subinterval. Latin squares can easily be extended to the case of M dimensions, and may be pedantically called Latin Hypersquares or Latin Hypercubes in such a case. Statisticians like Latin Squares, as do experiment designers, and and people who need to approximate scalar functions of many variables.
The fact that the projection of a Latin Square dataset onto any coordinate axis is either exactly evenly spaced, or approximately so (depending on the algorithm), turns out to be an attractive feature for many uses.
However, a CVT dataset in a regular domain, such as the unit hypercube, has the tendency for the projections of the points to cluster together in any coordinate axis. This program is mainly an attempt to explore whether a dataset can be computed using techniques similar to those of a CVT, but with the constraint (whether imposed or expected) that the point projections do not clump up.
The approach used here is quite simple. First we compute a CVT in M dimensions, comprising N points. We assume that the bounding region is the unit hypercube. We are now going to adjust the coordinates of the points to achieve the Latin Hypercube property. For each coordinate direction, we simply sort the points by that coordinate, and then overwrite the original values by the values we'd expect to get for a centered Latin Hypercube, namely, 1/(2*N), 3/(2*N), ..., (2*N-1)/(2*N).
Now this process guarantees that we get a Latin Hypercube. Our hope is that the process of adjusting the point coordinates does not too severely damage the nice dispersion properties inherent in the CVT point placement.
CVT is a FORTRAN90 library of routines which can compute a Centroidal Voronoi Tessellation.
FAURE is a FORTRAN90 library of routines which can compute elements of a Faure quasirandom sequence.
GRID is a FORTRAN90 library of routines which can compute elements of a grid dataset.
HALTON is a FORTRAN90 library of routines which can compute elements of a Halton quasirandom sequence.
HAMMERSLEY is a FORTRAN90 library of routines which can compute elements of a Hammersley quasirandom sequence.
HEX_GRID is a FORTRAN90 library of routines which can compute elements of a hexagonal grid dataset.
HEX_GRID_ANGLE is a FORTRAN90 library of routines which can compute elements of an angled hexagonal grid dataset.
IHS is a FORTRAN90 library of routines which can compute elements of an improved distributed Latin hypercube dataset.
LATIN_CENTER is a FORTRAN90 library of routines which can compute elements of a Latin Hypercube dataset, choosing center points.
LATIN_EDGE is a FORTRAN90 library of routines which can compute elements of a Latin Hypercube dataset, choosing edge points.
LATIN_RANDOM is a FORTRAN90 library of routines which can compute elements of a Latin Hypercube dataset, choosing points at random.
LATINIZE is an interactive FORTRAN90 program which can be used to "latinize" a dataset.
LCVT is also available in a C++ version and a MATLAB version
LCVT is a dataset directory which contains a collection of sample LCVT datasets.
LCVT_DATASET is a FORTRAN90 interactive program which allows the user to define, compute and save an LCVT dataset.
NIEDERREITER2 is a FORTRAN90 library of routines which can compute 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 of routines which can compute elements of a Sobol quasirandom sequence.
UNIFORM is a FORTRAN90 library of routines which can compute elements of a uniform pseudorandom sequence.
VAN_DER_CORPUT is a FORTRAN90 library of routines which can compute elements of a van der Corput quasirandom sequence.
You can go up one level to the FORTRAN90 source codes.