1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//! Discrete events along the curve, and locating them exactly.
//!
//! # Why the outer-loop driver is not reused
//!
//! [`outerloop::solve_with_loops`](crate::outerloop::solve_with_loops) drives
//! `PersistentSolver::solve`, an ordinary `n × n` Newton at fixed injections; it
//! cannot solve the bordered system at all. More to the point, its fixed-point
//! driver flips a bus the moment a step overshoots a limit — which is precisely
//! the imprecision event location exists to remove, and would make this module
//! dead code.
//!
//! So the corrector runs with bus types **frozen**, and this module finds the λ
//! at which a machine actually saturates. What it does *not* do is re-implement
//! the switching rule:
//! [`ReactiveLimits::check`](crate::outerloop::ReactiveLimits) remains the only
//! code in the crate that flips a bus type and writes `q_spec = limit`, and it
//! is called once, at the located crossing. There is no duplicated rule to drift
//! and no double counting, because it is called nowhere else during a step.
//!
//! The two dispatch loops are handled differently again — see
//! [`LoadingDirection::scale_loads_with_pickup`](super::direction::LoadingDirection::scale_loads_with_pickup)
//! for why they are folded into the direction analytically instead.
use crate;
// Moved to `roots` so dynamics can locate its events without depending on
// continuation; re-exported so this path keeps working.
pub use crateIllinois;
/// Which limit a generator ran into.
/// Something discrete that happened at a particular λ.
/// The reactive-limit event function at every bus that is still `PV`.
///
/// Positive means violated, so the earliest crossing of the running maximum is
/// the first machine to saturate. Buses with infinite limits — which is what
/// every importer writes when the source document states none — never
/// contribute.
pub
/// The largest event value over every still-`PV` bus: the scalar the locator
/// brackets, so the *earliest* crossing along the step is the one found.
pub