CppNoddy  0.90



What is it?

A simple (aka Noddy) collection of object orientated numerical routines written in C++, aimed at undergraduate projects and starting graduate students. In the current version, the test/example cases solve (amongst others):

Example output: pressure contours of a linear acoustic wave hitting a body of differing acoustic properties.


A breakdown of examples into groups is found under the 'Modules' link above. Alternatively, a complete list of examples can be found at this link Examples

The library provides:

What is it for?

It exists for two reasons:

Getting and running it

You need a machine with a recent C++ compiler and 'git' to clone the latest version. The build system also uses SCons and Python. The source is hosted on Github and can be obtained using 'git' via

  git clone git://github.com/hewitt/CppNoddy.git

Once you have the code, running "scons" (or "scons lapack=1" to attempt to link to external BLAS/LAPACK libraries for example) in the CppNoddy directory should compile the library & example codes. You can check the finished product by running "./validate.sh" in the "Examples/Validation" directory.

Before running the 'validate.sh' script you must make sure that the CppNoddy/libs directory is in LD_LIBRARY_PATH. For example, for the bash shell, 'export LD_LIBRARY_PATH=/path/to/installation/CppNoddy/lib/'

Off-site links: python GCC github scons

See the Examples for a starting point.

Is it fast/accurate?

The matrix classes have native solvers that are naive unoptimised Gaussian elimination algorithms. These routines will only be practical (if at all!) for rather `small' matrix/band sizes and do not scale well. If the problem is of even moderate size, then you should link to your local LAPACK/BLAS/PETSc LU routines by compiling with the `lapack=1' flag. LAPACK/BLAS/PETSc libraries are not shipped with CppNoddy, you have to install them separately yourself if they are not available by default. PETSc has a particularly nice configure/make/install routine that makes it easy to get running.

The code is not especially optimised, in fact in many places the code is deliberately un-optimised for greater transparency; it is not intended for 'heavy duty' problems. The only sanity checks applied are those listed in the test/example codes Examples.

It made my machine burst into flames

I never said it wouldn't ;-) The code comes with no guarantees.

I think it needs a CppNoddy::foo<bar> class

Feel free to add something. If you're an undergraduate looking for a final-year project or an MSc. student and have an idea of something to include (or wish to redesign something that I did in a stupid way), then let me know.

This software is licenced under the CC-GNU GPL.
© Content created by R.E. Hewitt, 2007.

© 2012

R.E. Hewitt