The implementation has the following features:
Choice between Legendre, Chebyshev, central differences, trapezoidal or Hermite-Simpson discretization.
Large scale nonlinear programming using IPOPT
Estimation of the discretization error.
Automatic mesh refinement.
Automatic scaling
Automatic differentiation using the ADOL-C library
Numerical differentiation by using sparse finite differences
Automatic identification of the sparsity of the derivative matrices.
DAE formulation, so that differential and algebraic constraints can be implemented in the same C++ function.
Easy to use interface to GNUplot to produce graphical output, including 2D plots, 3D curves and surfaces, and polar plots.
Automatic generation of LaTeX code to produce a table that summarizes the mesh refinement process.