pub mod types;
pub mod network;
pub mod topology;
pub mod branch_flow;
pub mod measurement;
pub mod se;
pub mod solver;
pub mod jacobian;
pub mod batch;
pub mod bde;
pub mod dc;
pub mod json;
pub mod pgm;
pub mod sparse;
pub mod block_sparse;
pub mod klu_native;
#[cfg(feature = "klu")]
pub mod sparse_klu;
#[cfg(feature = "pardiso")]
pub mod sparse_pardiso;
#[cfg(feature = "cgmes")]
pub mod cgmes;
#[cfg(feature = "python")]
mod python;
use network::{build_ybus, linear_initial_guess, YBus};
use solver::{IslandReport, JacobianBackend, PersistentSolver, SolveStats};
use json::NetworkData;
use types::Bus;
#[derive(Debug)]
pub struct PowerFlowReport {
pub buses: Vec<Bus>,
pub islands: Vec<IslandReport>,
pub stats: SolveStats,
}
pub fn run_power_flow_analysis(network_data: NetworkData) -> PowerFlowReport {
let ybus = build_ybus(network_data.buses.len(), &network_data.lines, &[]);
run_power_flow_analysis_from_ybus(network_data.buses, ybus)
}
pub fn run_power_flow_analysis_from_ybus(
mut buses: Vec<Bus>,
ybus: YBus,
) -> PowerFlowReport {
let ybus = ybus.finish();
linear_initial_guess(&mut buses, &ybus);
let mut solver = PersistentSolver::new(JacobianBackend::Scalar);
let (islands, stats) = solver.solve_with_stats(&mut buses, &ybus, 1e-6, 20);
PowerFlowReport { buses, islands, stats }
}