Task #2834: C++ matrix classes
Matrix class constraint to upper or lower triangle
To express assumptions about matrices during compile time, a type shall reflect the matrix properties.
This matrix class needs to fullfil the following properties
- enable upper/lower diagonal representation
- efficient algebraic operations
- implicit conversion to full matrix
The physical memory layout of box corresponds to the transpose of the matrix M that give M*t = c where t is a triclinic coordinate system vector and c Cartesian. That seems to be the only reason for preferring the transposed layout.
In practice we would like to modify as little code as possible and especially not introduce bugs in other code outside the main repository, so keeping access the same is the main priority. Thus  on Matrix3x3 should give the same result as on [.
Performance wise nothing of this matters, as box vectors are always copied or transformed before applying them to a list of atoms.