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.
- 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.
- Connectivity
Report - Topological invariants the TUI Inspect screen and downstream solvers care about.
- DcBranch
Parameters - Branch parameters in active branch column order.
- DcGenerator
Parameters - Generator parameters in generator column order.
- 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). - 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.
- 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. - 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. - emit_
dcopf_ bundle - Write matrix projections for a DC OPF instance.
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.