Hello,
You are correct that Xyce doesn't support local variation, or at least doesn't support the standard shorthand for specifying it used by tools like Hspice.
I implemented the expression-based sampling in Xyce a couple of years ago, and unfortunately, at the time I was unaware of the convention. I had originally implemented sampling and other UQ methods as part of a research project, and in the initial implementation they weren't connected to expression operators like AGAUSS at all. That came a bit later.
We do have an internal issue for this mistake in our issue-tracker, and I don't think it would be very hard to fix.
I think for your issue, you expect that if you specify something like:
.param resval=aunif(1000,400)
r_one 1 2 resval
r_two 2 3 resval
r_three 3 4 resval
in this case all 3 resistors will get unique random values. In Xyce currently, the parameter resval is given a single random number and this is applied to all 3 resistors. So they are locked together. One possible workaround is to specify it like this:
r_one 1 2 aunif(1000,400)
r_two 2 3 aunif(1000,400)
r_three 3 4 aunif(1000,400)
then each resistor would get its own random number, which is what you want. That probably isn't an easy workaround in a modern PDK, I am guessing. But that would produce the behavior you want.
My understanding is that Xyce's current behavior is expected in other simulators only if there is an extra layer of indirection. For example:
.param resval=aunif(1000,400)
.param res2=resval
r_one 1 2 res2
r_two 2 3 res2
r_three 3 4 res2
would cause the 3 resistors to be locked together in most simulators, since "resval" is hidden behind "res2".
Anyway, like I said, this is in our issue tracker and I'll try to fix it soon.
thanks,
Eric