Today a component is either in the model for the entire horizon or absent
entirely. There is no way to represent a line going out of service midway
through the day.
Current state
- Availability is a build-time boolean (
get_available_components → IS.get_available).
NetworkModel.network_matrix is a single matrix for the whole horizon.
- DCP ohm law uses a constant
b for every t; PTDF uses one column per branch for every t.
- PSY outage attributes (
PlannedOutage, FixedForcedOutage) exist but POM never reads them.
Note that driving a BranchRatingTimeSeriesParameter to zero does not emulate an
outage — impedance is unchanged, so the line still carries flow in the PTDF/ohm law.
Proposed approach (exogenous, known outage schedule)
- Resolve PSY outage attributes into a per-timestep availability mask.
- DCP: skip the
NetworkFlowConstraint row and the branch's ActivePowerBalance
contribution on outaged steps.
- PTDF: reuse the MODF machinery from the security-constrained path.
modf_matrix[arc, spec]
already returns a full injection→flow row against the same injection variables, and
VirtualMODF shares the VirtualPTDF factorization, so states are Woodbury updates
rather than new PTDF builds.
Known gaps
- MODF expressions are currently built only for monitored arcs; base-case coverage needs
every rated branch × state. Each (arc, state) is a serialized KLU solve — needs benchmarking.
- The outaged branch itself needs its flow zeroed and rating constraint dropped.
- Islanding: MODF handles it at the matrix level (
is_islanding, bus_island_labels), but
the power balance does not — subnetworks is one partition applied to all t. Affects DCP equally.
- Outage registration currently skips silently on failure and falls back to the unmodified
PTDF row. Acceptable for SC monitoring; on this path it would silently solve the intact
network and must become a hard error.
- Dual/LMP path not yet traced for single-matrix assumptions.
Out of scope
Endogenous topology (optimal transmission switching) — needs branch binaries and a
disjunctive ohm law, and is structurally incompatible with PTDF.
Today a component is either in the model for the entire horizon or absent
entirely. There is no way to represent a line going out of service midway
through the day.
Current state
get_available_components→IS.get_available).NetworkModel.network_matrixis a single matrix for the whole horizon.bfor everyt; PTDF uses one column per branch for everyt.PlannedOutage,FixedForcedOutage) exist but POM never reads them.Note that driving a
BranchRatingTimeSeriesParameterto zero does not emulate anoutage — impedance is unchanged, so the line still carries flow in the PTDF/ohm law.
Proposed approach (exogenous, known outage schedule)
NetworkFlowConstraintrow and the branch'sActivePowerBalancecontribution on outaged steps.
modf_matrix[arc, spec]already returns a full injection→flow row against the same injection variables, and
VirtualMODFshares theVirtualPTDFfactorization, so states are Woodbury updatesrather than new PTDF builds.
Known gaps
every rated branch × state. Each
(arc, state)is a serialized KLU solve — needs benchmarking.is_islanding,bus_island_labels), butthe power balance does not —
subnetworksis one partition applied to allt. Affects DCP equally.PTDF row. Acceptable for SC monitoring; on this path it would silently solve the intact
network and must become a hard error.
Out of scope
Endogenous topology (optimal transmission switching) — needs branch binaries and a
disjunctive ohm law, and is structurally incompatible with PTDF.