libgenua

Programmer's Documentation

libgenua

libgenua is a library of basic geometric and numeric support functions. It contains classes for the efficient representation of meshes for different applications, support for various file formats and wrappers around a number of external library interfaces.

The library components can be grouped into a set of modules, which are shortly described below. For more detailed documentation of all classes contained therein, see the List of modules..

[Link to Module Documentation]

libgenua provides classes which are meant to serve as building blocks for the implementation of more involved numerical methods. Furthermore, interfaces between these classes and a number of optional external libraries are defined.

At present, this group defines numerical integration rules, vectors and matrices (both stack- and heap-based) for general linear algebra work, and support for sparse matrices.

The SIMD short vectors are meant to aid in vectorization. Please refrain from using these objects for linear algebra or geometry as that usually does not yield any speedup. Instead, replace scalar operations one-to-one with SIMD vectors which support most operations that scalar floating-point variables can perform.

Depending on the configuration selected (or auto-detected on Mac and Linux) through the QMake .pro files, interfaces are optionally compiled into libgenua. Some interfaces are also defined exclusively through header files, so that no additional dependecies arise unless the particular header is included.

Optional interfaces are defined for

- Eigen (linear algebra) : strongly recommended, liberal OSS license
- LAPACK (linear algebra) : recommended but not required (fallbacks to Eigen)
- Intel MKL (sparse direct solver, FFT) : recommended, commercial license
- SPOOLES (sparse direct solver) : optional sparse solver, open source
- FFTW3 (FFT) : optional, GPL only
- ARPACK (large-scale eigenvalues) : optional, for scientific computing

[Link to Module Documentation]

This module defines basic geometric primitives for topology operations, such as simple classes which can be used to efficiently compute element and node connectivity tables for various types of meshes. Furthermore, a collection of basic intersection tests on triangles and lines is implemented.

A second class of objects is used to implement efficient bounding-volume hierarchies such as k-DOP trees in various dimensions. Many of the corresponding algorithms and containers have been used for a long time and have therefore seen relatively extensive optimization (and therefore allow, for example, to create low-overhead representations such as implicit binary trees defined by storage order).

To support visualization applications, containers for typical triangle-only meshes (including triangle strips and fans) are available.

[Link to Module Documentation]

A large part of libgenua serves to support mesh generation implemented in libsurf and sumo. There is a fairly wide range of functionality which serves to represent meshes of different types in memory and read/write different formats.

File formats compiled into libgenua include

- CGNS version 2.5, that is, ADF-based formats, to avoid the HDF5 dependency
- FFA mesh format (version 1) for the EDGE solver
- NASTRAN bulk and punch data files
- Subset of ABAQUS mesh format (some element types only)
- TetGen surface (.smesh) and volume mesh files
- SU2 plain text format (.SU2)
- Ensight 7/gold files
- Legacy VTK file format
- Stereolithography (STL) files
- Reading of AEREL result files

Optional interfaces are defined for

The TAU CFD solver via NetCDF, where detected

Note that some of the classes in this module are marked as deprecated.

[Link to Module Documentation]

Classes to support parallelization.

This module defines task groups and queues which can be used to implement more advanced parallel algorithms which cannot be expressed as simple data-parallel loops.

Some of the contents of this module predate std::thread and are obsolete when C++ 2011 is available. They are still compiled into libgenua in order to support legacy code which still makes use of these features.

Note:* If available, the Thread Building Blocks library does likely provide alternatives which are better tested and more flexible than this module.

Objects which have been implemented in order to investigate possible performance improvements. Do not use these components in production code.

[Link to Module Documentation]

A collection of simple utilities: Color mapping, specialized hash tables, Judy Arrays, aligned allocation, macros.

Licensees holding valid commercial licenses may use this file in accordance with the terms contained in their respective non-exclusive license agreement. For further information contact david . @lar oster na.c om

Alternatively, this file may be used under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation and appearing in the file gpl.txt included in the package containing this file.

Some parts of libgenua date back to about 2001 and are no longer used in new projects. However, they are still present in order to support legacy software. The corresponding classes are marked in the documentation as deprecated.