Since it was ported from FORTRAN to C in 1989 the MeatAxe has been freely available, including source code, under the terms of the GNU general public license.
Users are encouraged to extend or modify the programs as needed. Indeed, most of the recent improvements and additions to the MeatAxe are the result of users' reports, requests, and experiments.
This documentation is intended to provide the information you need to write your own MeatAxe programs or to modify existing ones. Since the software is changing continuously the documentation is necessarily incomplete and not everywhere correct. So, even with this manual, you should be prepared to look in the source code, which is always the ultimate reference. Starting with release 2.3 I have tried to merge documentation and source code, which should help to keep the documentation more up-to-date.
Internally, the MeatAxe is built in several layers where each layer uses services provided by the lower layers.
- Layer 1 - Kernel
- The MeatAxe kernel provides the finite field arithmetic, some low-level vector operations, and a platform-independent interface to operating system services, including the interaction with the user. All kernel functions and global variables have names beginning with "Ff" (finite field), "Mtx" (general functions), or "Sys" (OS interface). Kernel functions generally do not allocate memory dynamically and do not completetely check their arguments. Most kernel services are simple, but there are some more complex functions like Gaussian elimination, which have been implemented in the kernel for performance reasons.
- Layer 2 - Objects
- This layer encapsulates low-level functionality in "objects" like matrices, permutations, and polynomials. It also provides the elementary operations with these objects like, for example, matrix multiplication.
- Layer 3 - Algorithms
- This layer provides more complex operations which typically involve several objects. The spin-up and split functions are examples for this layer.
Throughout this documentation, layers 1 to 3 are referred to as the "MeatAxe library". Indeed, these layers are implemented as a static library.
- The program layer
- The top layer includes the MeatAxe programs and shell scripts like zad, zmu, chop, ... See Program Index for detailed descriptions.
Further Information