tet_mesh_rcm


tet_mesh_rcm, a C++ code which computes the reverse Cuthill-McKee (RCM) reordering for nodes in a tetrahedral mesh ("tet mesh").

The user supplies a node file and a tetrahedron file, containing the coordinates of the nodes, and the indices of the nodes that make up each tetrahedron. Either 4-node or 10-node tetrahedrons 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 tetrahedrons, and writes out new node and tetrahedron files that correspond to the RCM permutation.

Note that the node file would normally contain exactly 3 values on each line, namely the X, Y and Z coordinates of the nodes. However, this is not necessary. Extra information can be included on each line, for instance, a "W" 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.

Usage:

tet_mesh_rcm prefix
where prefix is the common file prefix:

The element definition file will list node indices. In C++, it may be more natural to use 0-based indices. This program will accept an element definition file that is 0-based or 1-based, and will convert a 1-based input file so that it becomes 0-based internal to the program. The detection of 1-based data is determined by the absence of the use of a 0 index, and the use of an index equal to the number of nodes. This is an implicit and fallible, but reasonable, way to handle this problem.

Licensing:

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

Languages:

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

Related Data and Programs:

MESH_BANDWIDTH, a C++ code which returns the geometric bandwidth associated with a mesh of elements of any order and in a space of arbitrary dimension.

QUAD_MESH_RCM, a C++ code which computes the reverse Cuthill-McKee (RCM) reordering for nodes in a mesh of 4-node quadrilaterals.

RCM, a C++ code which carries out reverse Cuthill-McKee computations.

TET_MESH, a C++ code which works with tet meshes.

TET_MESH_BOUNDARY, a C++ code which returns the nodes and faces of the boundary of a tetrahedral mesh, which themselves form a 3D triangular mesh or "TRI_SURFACE".

TET_MESH_DISPLAY_OPENGL, a C++ code which reads a tet mesh and displays the nodes and edges using OpenGL.

TET_MESH_L2Q, a C++ code which converts a linear to quadratic tet mesh.

TET_MESH_ORDER4, a directory which contains a description and examples of a tet mesh using order 4 elements.

TET_MESH_ORDER10, a directory which contains a description and examples of a tet mesh using order 10 elements.

TET_MESH_Q2L, a C++ code which converts a quadratic (10-node) to linear (4-node) tetrahedral mesh.

TET_MESH_QUALITY, a C++ code which computes the quality of a tetrahedral mesh.

tet_mesh_rcm_test

TET_MESH_REFINE, a C++ code which can refine a tet mesh.

TET_MESH_TET_NEIGHBORS, a C++ code which computes the tetrahedron-to-tetrahedron adjacency information.

TET_MESH_VOLUMES, a C++ code which computes the volume of each tetrahedron in a tet mesh;

TRIANGULATION_RCM, a C++ code which applies the reverse Cuthill-McKee reordering to a triangulation of 2D data.

Reference:

  1. 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.
  2. Herbert Edelsbrunner,
    Geometry and Topology for Mesh Generation,
    Cambridge, 2001,
    ISBN: 0-521-79309-2,
    LC: QA377.E36.
  3. Alan George, Joseph Liu,
    Computer Solution of Large Sparse Positive Definite Matrices,
    Prentice Hall, 1981,
    ISBN: 0131652745,
    LC: QA188.G46
  4. Norman Gibbs,
    Algorithm 509: A Hybrid Profile Reduction Algorithm,
    ACM Transactions on Mathematical Software,
    Volume 2, Number 4, December 1976, pages 378-387.
  5. 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, Number 2, April 1976, pages 236-250.
  6. Barry Joe,
    GEOMPACK - a software package for the generation of meshes using geometric algorithms,
    Advances in Engineering Software,
    Volume 13, 1991, pages 325-331.
  7. Per-Olof Persson, Gilbert Strang,
    A Simple Mesh Generator in MATLAB,
    SIAM Review,
    Volume 46, Number 2, June 2004, pages 329-345.

Source Code:


Last revised on 29 April 2020.