libgenua
Basic Geometry, Numerical Algorithms and Interfaces
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Groups Pages
libgenua

Introduction

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..

Numerical Algorithms

[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

Geometry

[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.

Mesh handling

[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

Optional interfaces are defined for

Concurrency

[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.

Experimental Features

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

General utilities

[Link to Module Documentation]

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

Licensing

Commercial License Usage

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.nosp@m.@lar.nosp@m.oster.nosp@m.na.c.nosp@m.om .

GNU General Public License Usage

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.

Deprecated Components

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.