Expand description
Sparse matrix and graph projections from PowerIO networks.
Outputs include signed incidence, weighted bus Laplacian, MATPOWER Bp/Bpp,
Y bus, PTDF, LODF, adjacency, LACPF, and petgraph views. Calculations take the
dense IndexedNetwork view of a BalancedNetwork. Parsing and emitting
belong to the top level powerio facade; this crate owns derived matrix and
graph calculations.
use powerio_core::Source;
use powerio_matrix::{BuildOptions, IndexedNetwork, calc_bprime_matrix};
use powerio_tx::parse;
let net = parse(Source::open(case)?)?.into_value();
let g = IndexedNetwork::new(&net); // dense [0, n) analysis view
let bprime = calc_bprime_matrix(&g, &BuildOptions::default())?;
assert_eq!(bprime.rows(), g.n()); // Bp is n×n§Conventions
Public DC operators follow PowerModels: an inductive branch has negative
b. Their branch by bus incidence matrix A_pm gives
B = A_pmᵀ diag(b) A_pm, with nonpositive diagonals and nonnegative
off-diagonals. Solver preparation retains its bus by branch factor
A_s = A_pmᵀ and uses w = -b, so the sparse factor is the positive
M-matrix L = A_s diag(w) A_sᵀ = -B. Source bus IDs remain on the model;
IndexedNetwork maps them to dense indices in [0, n).
tap == 0 means tap = 1. calc_bprime_matrix and
calc_bdoubleprime_matrix follow MATPOWER makeB; Y_bus keeps tap
magnitudes and phase shifts. Branch
terminal admittance is stored per unit. The default public DC formula is
b = -x/(r² + x²). BranchSusceptanceFormula::TapAdjustedReactance uses
b = -1/(x·τ); both carry phase shift injection. The full reference is in
the matrix guide.
Re-exports§
pub use error::ElementCounts;pub use error::Error;pub use error::PiecewiseCostInvalidity;pub use error::Result;pub use error::ScenarioMismatch;pub use matrix::multiconductor::AugmentedSystem;pub use matrix::multiconductor::DistNode;pub use matrix::multiconductor::MulticonductorAdmittance;pub use matrix::multiconductor::MulticonductorNodeIndex;pub use matrix::multiconductor::NodeRef;pub use matrix::multiconductor::calc_multiconductor_admittance_matrix;pub use matrix::BuildOptions;pub use matrix::GroundedIndexMap;pub use matrix::MatrixStats;pub use matrix::Scheme;pub use matrix::SensitivityMatrices;pub use matrix::SensitivityMatrixMetadata;pub use matrix::SensitivityMetadata;pub use matrix::SensitivityOptions;pub use matrix::SensitivitySolver;pub use matrix::SensitivitySolverPath;pub use matrix::ZeroImpedanceRule;pub use matrix::ZeroImpedanceSkips;pub use matrix::calc_adjacency_matrix;pub use matrix::calc_admittance_matrix;pub use matrix::calc_bdoubleprime_matrix;pub use matrix::calc_bprime_matrix;pub use matrix::calc_diagonal;pub use matrix::calc_lacpf_matrix;pub use matrix::calc_lodf;pub use matrix::calc_ptdf;pub use matrix::calc_ptdf_lodf;pub use matrix::calc_ptdf_lodf_with_options;pub use matrix::calc_reference_indicator;pub use matrix::calc_susceptance_diagonal;pub use matrix::calc_unit_vector;pub use matrix::calc_weighted_laplacian;pub use matrix::calc_zero_impedance_skips;pub use matrix::check_sddm;pub use matrix::ground_at;pub use matrix::ground_at_each;pub use pipeline::MatrixKind;pub use pipeline::Pipeline;pub use pipeline::PipelineOutputs;pub use pipeline::RhsKind;pub use pipeline::calc_matrix;pub use pipeline::calc_matrix_stats_for_kind;pub use pipeline::calc_zero_impedance_skips_for_kind;pub use pipeline::sanitize_stem;pub use pipeline::select_zero_impedance_rule_for_kind;pub use io::gridfm::GridfmDataset;pub use io::gridfm::GridfmOptions;pub use io::gridfm::GridfmOutputs;pub use io::gridfm::GridfmSnapshot;pub use io::gridfm::GridfmTables;pub use io::gridfm::build_gridfm_batch;pub use io::gridfm::build_gridfm_dataset;pub use io::gridfm::emit_gridfm_batch;pub use io::gridfm::emit_gridfm_dataset;pub use io::gridfm::number_snapshots;pub use io::gridfm::to_gridfm_record_batches;pub use io::gridfm::to_gridfm_record_batches_single;
Modules§
- diagnostics
- The codes this crate emits.
- error
- Failures the matrix and dataset builders raise.
- io
- File I/O: Matrix Market (
.mtx) and JSON metadata, plus the gridfm-datakit Parquet export (--features gridfm). - matrix
- Sparse matrix calculations for power system cases.
- pipeline
- Orchestrates a single case → output directory.
- synth
- Synthetic MATPOWER style cases. Stress tests the matrix builders beyond the vendored matpower test set.
Structs§
- AcBranch
Data - Branch data in active branch column order.
- AcBus
Data - Bus data in dense bus order.
- AcGenerator
Data - Generator data in generator column order.
- AcOpf
Assembly Options - Assembly choices that select the numerical content derived from an AC instance without changing the instance itself. There is no convention field: the branch pi model always carries taps, shifts, and charging.
- AcOpf
Preparation - Matrix free AC OPF input data on the branch pi model.
- AcPf
Assembly Options - Assembly choices for an AC power flow instance.
- AcPf
BusData - Bus values needed to start and evaluate an AC power flow.
- AcPf
Generator Data - Generator data used by PV to PQ reactive limit handling.
- AcPf
Preparation - Matrix free AC power flow input on the branch pi model.
- AcStorage
Data - Storage data in active storage column order.
- Affine
Scalar Coefficients - Real affine scalar
constant + coefficients' * w. - Balanced
Network - A balanced network with stable source bus IDs and separate element tables: an immutable cheap to clone owning handle over private shared tables.
- Branch
- Bus
- BusId
- A source bus ID, preserved from the input format.
- Connection
Power Map - Reference-frozen map from physical channel powers to terminal powers.
- Connectivity
Report - Topological invariants the TUI Inspect screen and downstream solvers care about.
- Cross
Voltage Coefficients - Affine closure
c + a w_phi + b w_psifor one cross-voltage product. - DcBranch
Parameters - Branch parameters in active branch column order.
- DcGenerator
Parameters - Generator parameters in generator column order.
- DcOperator
Options - Build options for
DcOperators. - DcOperators
- DC matrix operations built once from an instance.
- DcOpf
Assembly Options - Assembly choices that select the numerical content derived from an instance without changing the instance itself.
- DcOpf
Bundle Metadata - Cost policy information recorded in a bundle manifest.
- DcOpf
Bundle Options - Options that affect bundle output without changing the instance.
- DcOpf
Matrices - Sparse matrices for a DC OPF instance.
- DcOpf
Outputs - DcOpf
Preparation - Matrix free DC OPF input data.
- GenCost
- A generator cost curve (
mpc.gencostrow). - Generator
- Hvdc
- Index
Core - The owned, network-independent derivation behind
IndexedNetwork: the dense bus-id map plus the per-bus demand/shunt aggregates. Build it once withIndexCore::buildand reuse it across manyIndexedNetwork::with_coreviews of the sameBalancedNetwork. - Indexed
Network - A
BalancedNetworkpaired with its derivedIndexCore. The network is borrowed for the common case, but owned when it had to be star-lowered (a 3-winding transformer expanded into a star bus plus three branches viaBalancedNetwork::expand_transformers_3w); the core is owned (IndexedNetwork::new) or borrowed from a cachedIndexCore(IndexedNetwork::with_core). - LinDist3
Flow Affine Expression - An affine scalar over the prepared squared-voltage variables.
- LinDist3
Flow Balance Equation - One equality expression constrained to zero.
- LinDist3
Flow Balance Row - Active and reactive KCL at one retained bus terminal.
- LinDist3
Flow Balance Term - One coefficient on a semantic decision variable.
- LinDist3
Flow Complex Affine Power - Active and reactive affine power expressions.
- LinDist3
Flow Conic Problem - Complete conic program structure in stable PowerIO variable order.
- LinDist3
Flow Device Data - All device rows and the fully expanded nodal balances.
- LinDist3
Flow Dispatch Channel - Bounds, objective coefficient, and SOC data for one dispatch channel.
- LinDist3
Flow Equality - One affine equality
expression == 0. - LinDist3
Flow Generator Data - One dispatchable generator and its terminal allocation.
- LinDist3
Flow Line Data - One coupled line block in the solver-neutral network data.
- LinDist3
Flow Linear Expression constant + terms' * xin canonical variable order.- LinDist3
Flow Linear Term - One coefficient in a canonical affine expression.
- LinDist3
Flow Load Data - One physical load and its reference-frozen terminal allocation.
- LinDist3
Flow Network Data - Numerical rows for the voltage, line-drop, and line SOC portion of L3F.
- LinDist3
Flow Node Data - One squared-voltage variable row in the solver-neutral network data.
- LinDist3
Flow Preparation - Complete solver-neutral preparation for the currently supported L3F slice.
- LinDist3
Flow Scaling - Diagonal coordinate maps applied to the canonical SI program.
- LinDist3
Flow Shunt Data - One affine terminal shunt-power row.
- LinDist3
Flow Source Data - One voltage source. Its channel powers inject directly at corresponding
terminals; the squared voltages are fixed in
LinDist3FlowNetworkData. - LinDist3
Flow Standard Form - Clarabel-compatible sparse conic data plus its semantic source model.
- LinDist3
Flow Standard Form Options - Numerical coordinate choices for the sparse solver program.
- LinDist3
Flow Variable Data - One variable column, including its native bound and objective data.
- LinDist3
Flow Voltage Term - One coefficient on a squared-voltage variable.
- Line
Drop Coefficients - Real coefficient blocks in
w_child = w_parent - M p - N q. - Load
- Nodal
AcGenerator Data - Generator data in dense bus order, aggregated over the generators at each
bus. See
AcOpfPreparation::calc_nodal_generator_data. - Nodal
Generator Parameters - Generator parameters in dense bus order, aggregated over the generators at each
bus. See
DcOpfPreparation::calc_nodal_generator_data. - Piecewise
Linear Cost - One convex piecewise linear generator cost in preparation units.
- Power
Flow Jacobian - The assembled sparse physical Jacobian, with its bus mappings and the machinery to update values in place.
- Reference
Constrained System - The reference constrained linear system: the positive definite matrix a sparse solver factors, its right hand side, and the mapping from reduced rows back to bus rows.
- Shunt
- Storage
Enums§
- Analysis
Branch Source - The source component represented by one branch row in a lowered analysis network.
- Branch
Susceptance Formula - Rule for the DC branch susceptance
b. - BusType
- Bus type per MATPOWER convention: 1=PQ, 2=PV, 3=ref/slack, 4=isolated.
- LinDist3
Flow Cone - A standard or rotated second-order cone over affine arguments.
- LinDist3
Flow Cone Origin - Physical origin and meaning of one cone row block.
- LinDist3
Flow Decision Variable - Stable semantic identity of one scalar decision variable.
- LinDist3
Flow Equality Origin - Physical origin of one equality constrained to zero.
- LinDist3
Flow Standard Cone - One contiguous cone block in standard-form row order.
- LinDist3
Flow Standard RowOrigin - Semantic provenance for one row of
Aandb. - LinDist3
Flow Variable - Semantic scalar variables used by nodal-balance rows.
- Prepared
AcBus Specification - One AC power flow bus specification in preparation units.
- Prepared
Objective - The objective compiled into a balanced OPF preparation.
- Source
Format - Which format a
BalancedNetworkwas read from. Drives the same format byte exact echo on write. - Units
- Unit system for power and generator cost data.
- Voltage
Coordinates - The voltage coordinate selection, the one option of the calculation.
Constants§
- POWER_
MODELS_ ANGLE_ BOUND_ PAD - Default branch angle difference bound used by PowerModels parse time repair.
Functions§
- build_
ac_ opf_ preparation - Derive the complete matrix free AC OPF arrays from the instance: demand,
shunt, and voltage columns per bus, the full pi model per active branch,
and generator costs, bounds, and schedules with their source row mapping.
The AC counterpart of
build_dc_opf_preparation. - build_
ac_ pf_ preparation - Derive the complete matrix free AC power flow arrays from an instance.
The caller’s bus specifications remain authoritative. Network bus types
are used only by
AcPfInstance::from_networkwhen it creates those specifications; this function does not infer them again. - build_
dc_ opf_ preparation - Derive the complete matrix free DC OPF arrays from the instance: demand,
shunt, and phase shift withdrawals, generator costs and bounds with their
source row mapping, branch susceptances as positive solver edge weights,
thermal limits, angle bounds, and the reference bus set. This is the one
numerical assembly the matrix builders, the bundle writer, and external
solvers read, published so each consumer formulates over the same arrays
instead of re-deriving them from the network.
DcOpfPreparationdocuments each field’s unit and sign. - build_
lindist3flow_ conic_ problem - Assemble the complete supported LinDist3Flow slice as a canonical conic program.
- build_
lindist3flow_ device_ data - Prepare load, shunt, generator, source, objective, and KCL rows against an already prepared L3F node/line axis.
- build_
lindist3flow_ network_ data - Prepare the voltage, coupled line-drop, and line-limit rows of an L3F instance in SI units.
- build_
lindist3flow_ preparation - Build the complete solver-neutral preparation for the supported L3F slice.
- build_
lindist3flow_ standard_ form - Compile a LinDist3Flow instance in the default per-unit coordinates using a 1 MVA system power base. Input, canonical data, and decoded results remain SI.
- build_
lindist3flow_ standard_ form_ with_ options - Compile sparse standard form using explicit SI or per-unit solver coordinates.
- calc_
dc_ opf_ matrices - Derive the sparse DC OPF matrices from the instance. The instance keeps
the typed network; an external solver that needs the contiguous arrays
behind these matrices calls
build_dc_opf_preparationinstead. - calc_
power_ flow_ jacobian - Compute the sparse physical AC power flow Jacobian for
instanceatpoint. - connection_
power_ map - Construct
H = diag(vbar) D' diag(D vbar)^-1. - cross_
voltage_ coefficients - Form the fixed-angle first-order closure of
v_phi * conj(v_psi). - emit_
dcopf_ bundle - Write matrix projections for a DC OPF instance.
- evaluate_
affine - Evaluate a real affine scalar.
- evaluate_
cross_ voltage - Evaluate a cross-voltage affine closure at two squared magnitudes.
- lindist3flow_
connection_ incidence - Build the physical-channel incidence matrix for a typed connection.
- lindist3flow_
values_ from_ primal - Translate a canonical primal vector back to formulation-ordered physical
values suitable for
powerio_prob::LinDist3FlowOpfSolution. - lindist3flow_
values_ from_ standard_ primal - Decode a solver-coordinate primal vector into physical SI values.
- line_
drop_ coefficients - Construct the line voltage-drop blocks for a complex series impedance.
- winding_
voltage_ coefficients - Form real affine coefficients for the squared winding voltage
|d v|^2.
Type Aliases§
- Extras
- Source format fields the neutral model does not name, kept for round trips and cross format conversion. Keys are field names; values are JSON scalars.
- Sparse
Matrix - Compressed sparse row matrix used by the projection calculations.