Gaigen Logo

New since February 21 2005:
The latest (1.0) version of Gaigen is available from Sourgeforge:
This release is fully 'open source' (BSD license for the generator, any license for the generated code). It also features a command line version of the generator called simply 'gaigen' which can be used in makefiles and such.
Unfortunately, I will not update the Gaigen manual to reflect changes in the 1.0 version over the 0.9x versions, since I am busy working on Gaigen 2. When used for performance, Gaigen 2 can be more than 10x faster than Gaigen 1 (at the library level). Gaigen 2 will both C++ and Java code. I hope to do a public release of in a few months.

Gaigen is a program which can generate implementations of geometric algebras. It generates C++ and C source code which implements a geometric algebra requested by the user.

The choice to create a program which generates implementations of these algebras was made because we wanted performance similar to optimized hand-written code, while maintaining full generality; for (scientific) research and experimentation, many geometric algebras with different dimensionality, signatures and other properties may be required. Instead of coding each algebra by hand, Gaigen provides the possibility to generate the code for exactly the geometric algebra the user requires. This code may be less efficient than fully optimized hand-written code, but is likely to be much more efficient than one library which tries to support all possible algebras at once.

Gaigen supports algebras with a dimension from 0 to 8. The implementation of products used in Gaigen becomes infeasable for dimensions higher than about 7 or 8. For basis vectors, all 3 signatures are supported (-1, 0, +1). It is also possible to create reciprocal pairs of null vectors, which square to 0 with themselves, but to +1 or -1 with the other. 7 basic products are implemented (geometric product, outer product, left and right contraction, scalar product, (modified) Hestenes inner product) plus the outer morphism operator and the delta product. Several useful functions (such as factorization, meet and join) have been implemented.

Everything has been designed with memory and time efficiency in mind. It is possible to optimize Gaigen for your platform, application or processor by replacing the lowest computation layer. Gaigen can suggest optimizations for the algebras you generate with it by using the provided profiler function. Benchmarks in a ray tracing application show that Gaigen is 30 to 60 times faster than CLU (C++). In another application, Gaigen was 6000 times faster than Gable (Matlab).

Gaigen was written by Daniel Fontijne at the University of Amsterdam in cooperation with Tim Bouma and Leo Dorst in a 4 year research project on applications of geometric algebra in computer graphics, computer vision and robotics which started in 2001. The project is funded by the NWO (Dutch Foundation for Scientific Research) and the University of Amsterdam. To reach any of us, just mail:
Daniel Fontijne: fontijne at
Leo Dorst: leo at
Tim Bouma: timbouma at

Some applications of Gaigen:
ray tracer singularity
ray tracer performance camera calibration