As a prerequisite for operator functions (see [#65]), in particular regarding the split operator, which requires exponentation of operators (see [#112]), we first need to develop a categorization scheme for operators.
That is, if you look at the operators that we typically use, we immediately find a couple of recurring themes: There are FBR operators (dvr2fbr transformation, multiplication at each grid point, back-transformation), DVR operators (multiplication at each grid point), multiplication operators, i.e. (time-dependent) complex numbers, operators that couple channels (?) and so on.
What we need to do in this issue is to develop a criterion where most of these operators fit in, especially with regard to special cases, such as dipole couplings. Preferably, we would use some interface classes for this purpose to denote the various operator types.
I only redid the various base classes with real and complex fundamental data types each. I did not create any "trait" classes, here it would make sense to do this closer to the actual issue at hand (checking for commutability, for example). Base classes created
Diff: