Hi John,
The math document was written over 20 years ago, and the examples are intended to be generally illustrative and not 100% literally what Xyce would do. The target audience was applied mathematicians who are already very familiar with the numerical methods involved, but needed a quick explanation of the system of equations typically solved by circuit simulators. So, the document glosses over a lot of numerical details.
Also, Xyce has evolved a lot in 20 years. So even if the orderings matched the document perfectly in 2002 (unlikely), there have been many changes affecting the ordering over time. A lot of the initial orderings used by Xyce are driven by the parser, which continues to evolve. For example, the parser uses a lot of std::unordered_map objects, which was not the case 20 years ago.
Currently, there is no way (that I am aware of) to force Xyce to use a specific order. If you want the dFdx and dQdx matrices in a specific order you'll have to reorder them yourself as a post-process step. You can have Xyce output these matrices out to files and then import them into matlab, and reorder them there. Or you could do it in python, etc.
Note that once a linear system is handed of to a linear solver, that solver will reorder the system for various numerical reasons. If using a serial direct solver it will do this as part of its pivoting algorithm. If running with a parallel iterative solver, the parallel partitioning method chosen will result in reordering as well. Just to give two examples. But the outputs you have been looking at are upstream from the solvers.
Regarding the B-vector, the same sorts of outputs you've been using can also output the DAE vectors, including B.
To get a B-vector at specific times, you'll have to set breakpoints for those times in the netlist, to force the time integrator to land on those points. You can set this with the netlist command:
.OPTIONS TIMEINT BREAKPOINTS=0.2,0.25,0.5,0.75
Where the numbers on the right hand side are a comma-separate list of times you want the integrator to set a breakpoint. Usually these are used to handle discontinuities, but they can be set for any purpose you want.
Without setting them, the variable time stepping used by the integrator would not land on precisely the times you want, and you'd have to interpolate the output.
thanks,
The Xyce Team