Centroidal Voronoi Tessellation
Constrained to a Box
is a FORTRAN90 program which
creates a Centroidal Voronoi Tessellation
of points in a 2D box, with points constrained to lie on the boundary
of the region.
This is a fairly simple and limited code, and was designed mainly
for testing and experimentation. Current work is investigating
more interesting regions, including holes, and other ways of
"encouraging" some points to move to the boundary and stay there.
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
CCVT_BOX is available in
a C++ version and
a FORTRAN90 version and
a MATLAB version.
Related Data and Programs:
a MATLAB program which
tries to achieve the same results
as CCVT_BOX but using a "reflection" idea to force points
onto the boundary of the region.
a FORTRAN90 library which
a dataset directory which
contains files describing a number of CVT's.
a FORTRAN90 program which
creates a CVT dataset.
The FORTRAN version of CCVT_BOX was written by Lili Ju.
Voronoi diagrams -
a study of a fundamental geometric data structure,
ACM Computing Surveys,
Volume 23, Number 3, pages 345-405, September 1991.
John Burkardt, Max Gunzburger, Janet Peterson and Rebecca Brannon,
User Manual and Supporting Information for Library of Codes
for Centroidal Voronoi Placement and Associated Zeroth,
First, and Second Moment Determination,
Sandia National Laboratories Technical Report SAND2002-0099,
Qiang Du, Vance Faber and Max Gunzburger,
Centroidal Voronoi Tessellations: Applications and Algorithms,
SIAM Review, Volume 41, 1999, pages 637-676.
Qiang Du, Max Gunzburger and Lili Ju,
Meshfree, Probabilistic Determination of Point Sets and Support
Regions for Meshfree Computing,
Computer Methods in Applied Mechanics in Engineering,
Volume 191, 2002, pages 1349-1366;
Lili Ju, Qiang Du and Max Gunzburger,
Probabilistic Methods for Centroidal Voronoi Tessellations and
their Parallel Implementations,
Parallel Computing, Volume 28, 2002, pages 1477-1500.
Examples and Tests:
input that would normally be entered
interactively by the user.
printed output from a run of the program.
containing the initial CVT generators.
image of the initial CVT generators.
containing the final CVT generators.
image of the final CVT generators.
List of Routines:
MAIN is the main program for CCVT_BOX.
CH_CAP capitalizes a single character.
CVT_ENERGY computes the CVT energy of a dataset.
CVT_SAMPLE returns sample points.
CVT_WRITE writes a CVT dataset to a file.
FIND_CLOSEST finds the nearest R point to each S point.
GET_UNIT returns a free FORTRAN unit number.
HALHAM_LEAP_CHECK checks LEAP for a Halton or Hammersley sequence.
HALHAM_N_CHECK checks N for a Halton or Hammersley sequence.
HALHAM_NDIM_CHECK checks NDIM for a Halton or Hammersley sequence.
HALHAM_SEED_CHECK checks SEED for a Halton or Hammersley sequence.
HALHAM_STEP_CHECK checks STEP for a Halton or Hammersley sequence.
HALTON_BASE_CHECK checks BASE for a Halton sequence.
I4_TO_HALTON_SEQUENCE computes N elements of a leaped Halton subsequence.
I4VEC_TRANSPOSE_PRINT prints an I4VEC "transposed".
MPB projects generators onto the boundary of the region.
POINTS_EPS creates an EPS file image of a set of points.
PRIME returns any of the first PRIME_MAX prime numbers.
R8MAT_UNIFORM_01 returns a unit pseudorandom R8MAT.
RANDOM_INITIALIZE initializes the FORTRAN90 random number seed.
S_EQI is a case insensitive comparison of two strings for equality.
TIMESTAMP prints the current YMDHMS date as a time stamp.
TIMESTRING writes the current YMDHMS date into a string.
TUPLE_NEXT_FAST computes the next element of a tuple space, "fast".
You can go up one level to
the FORTRAN90 source codes.
Last revised on 14 September 2005.