Issue was too large. Split it up into issues [#102], [#103], [#104], [#105].
Boost is a major drag when you want to compile anything, as the huge number of headers slows down the compilation considerably. To speed up the compilation (of WavePacket as well as user programs), Boost dependencies should be hidden inside the library and not be exported to the outside world.
- Implement constants (pi) in a wavepacket::constant namespace. They can refer to boost internally, but the headers should not require that.
- Wherever one is needed, do not access special functions directly from boost, but att them to utils/special_functions.hpp and reference them from there.
- OperatorMatrix: encapsulate the multi-array better
- OdePropagators: completely encapsulate Odeint, do not force this dependency on the user
- ProgramOptions: Is it possible to completely hide the boost::program_options dependency? Maybe restrict the types to only those types that we want to support.
As an advance idea:
* No public dependency on boost anymore in the library target. Try to use statically built boost libraries (fallback needed?)