Many (most?) of the SciML libraries feature a parameter p in their high-level API.
I would like to learn more about the motivation for this design, and the actual specs for what it can be and what it is intended for. Eg in some examples, it is a scalar, in some others, a vector, is there a constraint in the API describing what is allowed?
Or is it just up to the model family being described?
Why not fold it into the model spec instead?
(If there is some docs I am just missing, kindly point me to that)
It’s up to the model being described. It is very often useful to be able to define a family of models rather than a single model and allowing a user specifiable parameter object makes that easy.
That said if you only are interested in a single problem you can just ignore p and not use it. That’s always totally valid.
As a related note, I think that if anyone is taking design from SciML’s diffeq solvers for a new solver ecosystem, I think it would be really interesting to not expose t to users (if you want a time component, you can always add du[i] = 1 as an equation).
The advantage of this is that by making time implicit, you move all of the stiffness into the jacobian matrix, and simplify the the order conditions needed. (the downside of course is that you confuse engineers pretty badly, but IMO time might belong at the MTK/dyad level rather than the solver level)