Let’s see if your monolith tumbles or not in various situations.
The figure shows the tip of the Vector3d::UnitZ() fixed to the body. You can see that the vector is always up and the rotation is stable.
The initial conditions are:
Ibody << 3.0,0.0,0.0, 0.0,4.0,0.0, 0.0,0.0,5.0; Quaterniond q(AngleAxisd(M_PI*0.03, Vector3d::UnitX())); L << 0.00, 0.00, 1.00;
Note that Ix < Iy < Iz, and therefore the rotation around the z-axis should be stable. The body is slightly rotated around the x-axis to give better visual impression. The angular momentum, L is given, and this vector does not change because there is no external force nor torque.
Ibody << 3.0,0.0,0.0, 0.0,5.0,0.0, 0.0,0.0,4.0;
Now, Ix < Iz < Iy, and the rotation around the z-axis becomes unstable.