Looking at core/matmodlab.py, it seems that J0 is initially evaluated during startup but never updated (with a numerical jacobian or with the returned jacobian). Also curious, the returned DDSDDE seems to always be discarded (whether it is None or a full matrix).