use serde::{Deserialize, Serialize};
use num_complex::Complex;
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub enum BusType {
Slack,
PV,
PQ,
}
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub enum ZipKind {
ConstPower,
ConstCurrent,
ConstImpedance,
}
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub struct ZipTerm {
pub s_const: Complex<f64>,
pub kind: ZipKind,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Bus {
pub idx: usize, pub bus_type: BusType,
pub voltage_mag: f64, pub voltage_ang: f64, pub p_spec: f64, pub q_spec: f64, pub q_min: f64, pub q_max: f64, #[serde(default)]
pub u_rated: f64, #[serde(default)]
pub zip_terms: Vec<ZipTerm>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Line {
pub from: usize,
pub to: usize,
pub r: f64,
pub x: f64,
pub b_shunt: f64, #[serde(default)]
pub g_shunt: f64, }
#[derive(Clone, Debug)]
pub struct Transformer {
pub from: usize,
pub to: usize,
pub from_status: u8,
pub to_status: u8,
pub y_series: Complex<f64>,
pub y_shunt: Complex<f64>,
pub tap: Complex<f64>,
}
#[derive(Clone, Debug)]
pub struct Transformer3PhSeq {
pub from: usize,
pub to: usize,
pub y0: [Complex<f64>; 4],
pub y1: [Complex<f64>; 4],
pub y2: [Complex<f64>; 4],
}
#[derive(Clone, Debug)]
pub struct Line3Ph {
pub from: usize, pub to: usize,
pub r1: f64,
pub x1: f64,
pub b1: f64, pub r0: f64,
pub x0: f64,
pub b0: f64, }