We store 3-values in the ul(*,*,*) array. u(*,*,1) is the value at current solution state. ul(*,*,2) is the increment between the current and previous solution, and ul(*,*,3) is the increment in the current solutilon. Thus the solution at the previous time is ul(*,*,1) - ul(*,*,2).
Note tangents for partitioned solution is just the diagonal block corresponding to the active dog's. The coupling between partitions is never used, but would be if you did a monotonic solution.