ucte_area_probe/
ucte_area_probe.rs1fn main() {
3 for path in std::env::args().skip(1) {
4 let net = gridoxide::ucte::read(&path).expect("import");
5 let (of_bus, names) = net.country_areas();
6 let (lines, transformers) = net.as_switched();
7 let report = gridoxide::run_power_flow(
8 net.buses.clone(),
9 &lines,
10 &transformers,
11 &net.shunts,
12 gridoxide::TapData::none(),
13 gridoxide::PowerFlowOptions {
14 tol: 1e-10,
15 max_iter: 40,
16 ..Default::default()
17 },
18 );
19 let x = gridoxide::outerloop::AreaInterchange::measure(
20 &report.buses,
21 &lines,
22 &transformers,
23 &of_bus,
24 names.len(),
25 );
26 println!(
27 "{path}: {} areas {names:?}, solve {:?}",
28 names.len(),
29 report.stats.status
30 );
31 for (i, n) in names.iter().enumerate() {
32 let buses = of_bus.iter().filter(|a| **a == Some(i)).count();
33 println!(
34 " {n}: {buses:>3} bus(es), exporting {:>9.3} MW",
35 x[i] * net.base_mva
36 );
37 }
38 println!(
39 " unassigned buses: {}",
40 of_bus.iter().filter(|a| a.is_none()).count()
41 );
42 println!(
43 " sum of positions (= tie losses): {:.3} MW",
44 x.iter().sum::<f64>() * net.base_mva
45 );
46 }
47}