Skip to content

Zero impedance reduction handling #322

@luke-kiernan

Description

@luke-kiernan

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:

  1. 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.
  2. 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.
  3. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions