TRIANGULATION_RCM
Reverse Cuthill-McKee Node Reordering
TRIANGULATION_RCM is an executable C++ program,
using double precision arithmetic, which computes the reverse
Cuthill-McKee reordering for nodes in a triangulation composed
of 3-node or 6-node triangles.
The user supplies a node file and a triangle file, containing
the coordinates of the nodes, and the indices of the nodes that
make up each triangle. Either 3-node or 6-node triangles may
be used.
The program reads the data, computes the adjacency information,
carries out the RCM algorithm to get the permutation, applies
the permutation to the nodes and triangles, and writes out
new node and triangle files that correspond to the RCM permutation.
Note that the node file would normally contain exactly 2 values
on each line, namely the X and Y coordinates of the nodes.
However, this is not necessary. Extra information can be
included on each line, for instance, a "Z" coordinate. Each
line should include the same number of items, but all will be
permuted correctly together. The program does not actually
need to know the coordinates of the nodes, so in fact, ANY data
(as long as it is real numeric data) associated with the nodes
can be listed in the node file, and will be correctly permuted.
Related Data and Programs:
MESH_BANDWIDTH
is an interactive executable C++ program
which returns the geometric bandwidth associated with a mesh of
elements of any order and in a space of arbitrary dimension.
RCM
is a C++ library of routines
for reverse Cuthill-McKee computations.
TABLE_DELAUNAY
is an interactive FORTRAN90 program
for the triangulation
of a set of nodes whose coordinates are stored in a file.
TET_MESH_RCM
is a FORTRAN90 library which
applies the reverse Cuthill-McKee reordering to a tetrahedral
mesh of nodes in 3D.
TRIANGLE
is an executable C program which
computes a triangulation of a geometric region.
TRIANGULATION
is a C++ library of routines for carrying
out various operations on order 3 ("linear") or order 6
("quadratic") triangulations.
TRIANGULATION_BOUNDARY_NODES
is an executable C++ program
that reads data defining a triangulation, determines which nodes
lie on the boundary, and writes their coordinates to a file.
TRIANGULATION_DISPLAY_OPEN_GL
is an executable C++ program
which reads files defining a triangulation and displays an image
using Open GL.
TRIANGULATION_L2Q
is an executable C++ program
that reads data defining a 3-node triangulation and generates
midside nodes and writes out the corresponding 6-node triangulation.
TRIANGULATION_MASK
is an executable C++ program, which
takes an existing triangulation and deletes triangles and
their corresponding nodes as requested by the user.
TRIANGULATION_ORDER3
is a directory which contains a description and
examples of order 3 triangulations.
TRIANGULATION_ORDER6
is a directory which contains a description and
examples of order 6 triangulations.
TRIANGULATION_ORIENT
is an executable C++ program
that reads data defining a triangulation, makes sure that
every triangle has positive orientation, and if not, writes a
corrected triangle file.
TRIANGULATION_PLOT
is an executable C++ program
that reads data defining a triangulation and creates a
PostScript image of the nodes and triangles.
TRIANGULATION_Q2L
is an executable C++ program
that reads data defining a 6-node triangulation, and subdivides
each triangle into 4 3-node triangles, writing the resulting
triangulation to a file.
TRIANGULATION_QUALITY
is an executable C++ program
that reads data defining a triangulation and computes a number
of quality measures.
TRIANGULATION_RCM is also available in
a FORTRAN90 version and
a MATLAB version.
TRIANGULATION_REFINE
is an executable C++ program
that reads data defining a triangulation, replaces each triangle
by four congruent smaller ones, and writes the new triangulation
information to a file.
TRIANGULATION_TRIANGLE_NEIGHBORS
is an executable C++ program
that reads data defining a triangulation, determines the neighboring
triangles of each triangle, and writes that information to a file.
Usage:
-
triangulation_rcm node_file triangle_file
-
reads the triangulation whose nodal coordinates are given in
node_file, and triangle indices in triangle_file,
and produces a reordering of the nodes that will reduce
the bandwidth.
Reference:
-
HL Crane, Norman Gibbs, William Poole, Paul Stockmeyer,
Algorithm 508:
Matrix Bandwidth and Profile Reduction,
ACM Transactions on Mathematical Software,
Volume 2, Number 4, December 1976, pages 375-377.
-
Marc deBerg, Marc Krevald, Mark Overmars,
Otfried Schwarzkopf,
Computational Geometry,
Springer, 2000,
ISBN: 3-540-65620-0.
-
Alan George, Joseph Liu,
Computer Solution of Large Sparse Positive Definite Matrices,
Prentice Hall, 1981,
ISBN: 0131652745,
LC: QA188.G46
-
Norman Gibbs,
Algorithm 509:
A Hybrid Profile Reduction Algorithm,
ACM Transactions on Mathematical Software,
Volume 2, Number 4, December 1976, pages 378-387.
-
Norman Gibbs, William Poole, Paul Stockmeyer,
An Algorithm for Reducing the Bandwidth
and Profile of a Sparse Matrix,
SIAM Journal on Numerical Analysis,
Volume 13, 1976, pages 236-250.
-
Joseph ORourke,
Computational Geometry,
Second Edition,
Cambridge, 1998,
ISBN: 0521649765,
LC: QA448.D38.
Source Code:
Examples and Tests:
Files associated with a 3-node triangulation:
Files associated with a 3 node triangulation, in which the
node file contains FOUR items of data per node, not just X and Y.
(The X and Y data is the same as for the standard 3 node
example)
Files associated with a 6-node triangulation:
List of Routines:
-
MAIN is the main program for TRIANGULATION_RCM.
-
ADJ_BANDWIDTH computes the bandwidth of an adjacency matrix.
-
ADJ_PERM_BANDWIDTH computes the bandwidth of a permuted adjacency matrix.
-
CH_CAP capitalizes a single character.
-
CH_EQI is true if two characters are equal, disregarding case.
-
CH_TO_DIGIT returns the integer value of a base 10 digit.
-
DEGREE computes the degrees of the nodes in the connected component.
-
DTABLE_CLOSE_WRITE closes a file to which a DTABLE was to be written.
-
DTABLE_DATA_READ reads the data from a DTABLE file.
-
DTABLE_DATA_WRITE writes data to a DTABLE file.
-
DTABLE_HEADER_READ reads the header from a DTABLE file.
-
DTABLE_HEADER_WRITE writes the header of a DTABLE file.
-
DTABLE_WRITE writes information to a DTABLE file.
-
FILE_COLUMN_COUNT counts the number of columns in the first line of a file.
-
FILE_NAME_EXT_GET determines the "extension" of a file name.
-
FILE_NAME_EXT_SWAP replaces the current "extension" of a file name.
-
FILE_ROW_COUNT counts the number of row records in a file.
-
GENRCM finds the reverse Cuthill-Mckee ordering for a general graph.
-
I4_MAX returns the maximum of two I4's.
-
I4_MIN returns the minimum of two I4's.
-
I4_MODP returns the nonnegative remainder of integer division.
-
I4_SWAP switches two I4's.
-
I4_WRAP forces an I4 to lie between given limits by wrapping.
-
I4MAT_TRANSPOSE_PRINT_SOME prints some of an I4MAT, transposed.
-
I4ROW_COMPARE compares two rows of an I4ROW.
-
I4ROW_SORT_A ascending sorts the rows of an I4ROW.
-
I4ROW_SWAP swaps two rows of an I4ROW.
-
I4VEC_HEAP_D reorders an array of integers into a descending heap.
-
I4VEC_REVERSE reverses the elements of an integer vector.
-
I4VEC_SORT_HEAP_A ascending sorts an array of integers using heap sort.
-
ITABLE_DATA_READ reads data from an ITABLE file.
-
ITABLE_DATA_WRITE writes data to an ITABLE file.
-
ITABLE_HEADER_READ reads the header from an ITABLE file.
-
ITABLE_HEADER_WRITE writes the header of an ITABLE file.
-
ITABLE_WRITE writes information to an ITABLE file.
-
LEVEL_SET generates the connected level structure rooted at a given node.
-
PERM_CHECK checks that a vector represents a permutation.
-
PERM_INVERSE3 produces the inverse of a given permutation.
-
R8_EPSILON returns the R8 roundoff unit.
-
R8COL_PERMUTE permutes an R8COL in place.
-
R8MAT_TRANSPOSE_PRINT_SOME prints some of an R8MAT, transposed.
-
RCM renumbers a connected component by the reverse Cuthill McKee algorithm.
-
ROOT_FIND finds a pseudo-peripheral node.
-
S_BLANK_DELETE removes blanks from a string, left justifying the remainder.
-
S_INDEX_LAST_C returns a pointer to the last occurrence of a given character.
-
S_LEN_TRIM returns the length of a string to the last nonblank.
-
S_TO_I4 reads an I4 from a string.
-
S_TO_I4VEC reads an integer vector from a string.
-
S_TO_R8 reads an R8 from a string.
-
S_TO_R8VEC reads an R8VEC from a string.
-
S_WORD_COUNT counts the number of "words" in a string.
-
SORT_HEAP_EXTERNAL externally sorts a list of items into ascending order.
-
TIMESTAMP prints the current YMDHMS date as a time stamp.
-
TIMESTRING returns the current YMDHMS date as a string.
-
TRIANGULATION_ORDER3_ADJ_COUNT counts adjacencies in a triangulation.
-
TRIANGULATION_ORDER3_ADJ_SET sets adjacencies in a triangulation.
-
TRIANGULATION_ORDER3_NEIGHBOR_TRIANGLES determines triangle neighbors.
-
TRIANGULATION_ORDER6_ADJ_COUNT counts adjacencies in a triangulation.
-
TRIANGULATION_ORDER6_ADJ_SET sets adjacencies in a triangulation.
-
TRIANGULATION_ORDER6_NEIGHBOR_TRIANGLES determines triangle neighbors.
You can go up one level to
the C++ source codes.
Last revised on 09 January 2007.