Introduction
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):
- Two-dimensional parabolic problems ( eg., the unsteady boundary-layer equations ).
- Boundary-value ODE problems ( eg., the Karman rotating-disk, Blasius boundary-layer and other similarity solutions ).
- Arc-length continuation of problems involving limit points ( eg., the Karman rotating disk equations, Falkner-Skan equation, the plane Poiseuille flow linear neutral curve. ).
- One-dimensional eigenvalue problems ( eg., the (bi-)harmonic equation, Orr-Sommerfeld equation ) solved both directly and via local methods.
- One-dimensional hyperbolic problems ( eg., Sod's shocktube problem, linear acoustic waves with reflection in non-uniform medium, shallow water eqiations ).
- Two-dimensional hyperbolic problems ( eg., compressible Euler problems, linear acoustic waves, shallow water eqiations ).
- Initial-boundary-value problems ( eg., the heat diffusion equation in 1D, and the unsteady Karman rotating-disk equations ).
- Initial-value problems ( eg., the Lorenz equations ).
- Poisson problems in Cartesian and cylindrical geometries.
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 Tests
The library provides:
- Both dense vector and sparse vector classes (including the usual vector operations).
- Dense , banded and sparse matrix classes.
- A class for ODE IVPs with 4th-order Runge-Kutta(-Fehlberg) method(s).
- A class for ODE BVPs with second-order finite-difference methods and adaptive refinement.
- A class for ODE EVPs with second-order finite-difference methods.
- A class for IBVPs with second-order methods in both ‘space’ and ‘time’.
- A class for Two dimensional parabolic problems with a second-order box scheme.
- Classes for both 1-D and 2-D hyperbolic problems via central scheme algorithms.
- 2-D Poisson objects (Cartesian and axisymmetric cylindrical polars).
- vector Newton iteration classes.
- Arc-length continuation solvers exist for Residual objects and boundary value problems.
- An ability to link to selected BLAS, LAPACK and PETSc routines via a simplified API (these currently include the real/complex generalised eigenproblem solvers, dense/banded/sparse LU solvers.).
What is it for?
It exists for two reasons:
- It's an introduction/framework for final-year undergraduate project students or graduate students.
- Just for fun.
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.
Content created by R.E. Hewitt, 2007. MIT license.