Comparing against PSS(e) on large networks, I'm noticing discrepancies due to ZIL handling.
Currently, our strategy is to calculate the ybus matrix, then go through off-diagonal elements Y[i,j]. If real(Y[i,j]) == 0.0 and abs(imag(Y[i,j]) >= susceptance_threshold, then we merge the two buses. This diverges from PSS(e) in a few ways:
- PSS(e) uses the L2 norm:
abs(y) >= threshold. When I switch PNM to checking abs(Y[i,j]) >= threshold, our differences with PSS(e) drop significantly. Also, this just seems more numerically robust.
- PSS(e) checks each branch, not the combined Ybus entry. PSS(e) seems correct in this instance: any zero impedance branch causes two buses to become electrically identified. Suppose we have two branches
b1, b2 in parallel with abs(y_b1) >= threshold, but abs(y_b1 + y_b2) < threshold. (Concretely: y_b1 = 10^4 im and y_b2 = -10 im would work.) An "examine Y[i,j] strategy" doesn't merge the buses; PSS(e)'s "examine each branch" does.
- Similar to 2. above, but the opposite behavior: suppose we have two branches
b1, b2 in parallel with abs(y_b1) < threshold and abs(y_b2) < threshold, but abs(y_b1 + y_b2) >= threshold. In that scenario, an "examine Y[i,j] strategy" merges the buses; PSS(e)'s "examine each branch" doesn't.
Note: please correct me if I'm wrong about PSS(e)'s behavior. I'm pretty sure about (1) and (2) above, but I'd appreciate it if someone could verify PSS(e)'s behavior under scenario (3).
Comparing against PSS(e) on large networks, I'm noticing discrepancies due to ZIL handling.
Currently, our strategy is to calculate the ybus matrix, then go through off-diagonal elements
Y[i,j]. Ifreal(Y[i,j]) == 0.0andabs(imag(Y[i,j]) >= susceptance_threshold, then we merge the two buses. This diverges from PSS(e) in a few ways:abs(y) >= threshold. When I switch PNM to checkingabs(Y[i,j]) >= threshold, our differences with PSS(e) drop significantly. Also, this just seems more numerically robust.b1,b2in parallel withabs(y_b1) >= threshold, butabs(y_b1 + y_b2) < threshold. (Concretely:y_b1 = 10^4 imandy_b2 = -10 imwould work.) An "examineY[i,j]strategy" doesn't merge the buses; PSS(e)'s "examine each branch" does.b1,b2in parallel withabs(y_b1) < thresholdandabs(y_b2) < threshold, butabs(y_b1 + y_b2) >= threshold. In that scenario, an "examineY[i,j]strategy" merges the buses; PSS(e)'s "examine each branch" doesn't.Note: please correct me if I'm wrong about PSS(e)'s behavior. I'm pretty sure about (1) and (2) above, but I'd appreciate it if someone could verify PSS(e)'s behavior under scenario (3).