pub struct BusDispatch {
pub bus: usize,
pub required: f64,
pub attributed: f64,
pub unattributed: f64,
pub basis: KeyBasis,
pub machines: Vec<MachineDispatch>,
}Expand description
One bus’s machines, and what they could account for.
Fields§
§bus: usizeThe bus whose voltage these machines hold.
required: f64What they jointly had to produce: the solved reactive injection at
bus, less the part that is not theirs.
attributed: f64What they could actually be given, once each one’s own limits were
respected. Equal to required unless every machine is pinned.
unattributed: f64required − attributed, and worth reading rather than ignoring.
A non-zero value means the machines holding this bus cannot account for the reactive power the solve put there — they are all at their limits and it is still not enough. That is not an arithmetic failure here; it means the solve placed the bus outside its machines’ joint capability, which happens because gridoxide bounds the wrong quantity.
ReactiveLimits compares
Bus::q_min/q_max against the bus’s net injection, while the CGMES
importer fills those fields from the machines’ own capability. Where a
reactive load shares the bus, the machine has to cover it too, so the
machine saturates before the net injection reaches the bound and the
clamp fires late. pgm::PgmVoltageRegulator’s doc comment already names
this as a deliberate simplification of the bus model; this field is the
first thing that measures it.
Measured on RealGrid: of 416 regulated buses, 50 share their bus with another reactive injection and 6 come out unattributable, 0.044 p.u. in total. Small, real, and previously invisible.
basis: KeyBasisWhat the shares were derived from.
machines: Vec<MachineDispatch>Trait Implementations§
Source§impl Clone for BusDispatch
impl Clone for BusDispatch
Source§impl Debug for BusDispatch
impl Debug for BusDispatch
Source§impl PartialEq for BusDispatch
impl PartialEq for BusDispatch
impl StructuralPartialEq for BusDispatch
Auto Trait Implementations§
impl Freeze for BusDispatch
impl RefUnwindSafe for BusDispatch
impl Send for BusDispatch
impl Sync for BusDispatch
impl Unpin for BusDispatch
impl UnsafeUnpin for BusDispatch
impl UnwindSafe for BusDispatch
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more