Feature: New exciter models#402
Conversation
dfc7db0 to
120e12b
Compare
d27609a to
23eb53c
Compare
660652b to
6e4af2e
Compare
bf6b928 to
0759367
Compare
4242876 to
200ad58
Compare
|
Hi @georgii-tishenin @pipeacosta, I know this is not a small PR. Let me know if it is possible to have a look, or if we need to do it differently. Thanks in advance. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #402 +/- ##
==========================================
- Coverage 66.03% 65.86% -0.17%
==========================================
Files 401 405 +4
Lines 24303 24684 +381
Branches 12332 12494 +162
==========================================
+ Hits 16048 16259 +211
- Misses 8254 8424 +170
Partials 1 1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
georgii-tishenin
left a comment
There was a problem hiding this comment.
Thanks for the PR. I especially like that the new exciter models are added together with documentation and Python bindings.
I left a few small comments/questions. I do not see this as a strict requirement for this PR, but it would give a better feeling to have tests/examples covering all new exciter models.
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
50950c3 to
cbf8240
Compare
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
Signed-off-by: Leonardo Carreras <leonardo.carreras@eonerc.rwth-aachen.de>
georgii-tishenin
left a comment
There was a problem hiding this comment.
Thanks for addressing the comments!
70ae13b
into
sogno-platform:master
…ython bindings (#490) ## Summary Connects `Signal::TurbineGovernorType1` (the Milano 2010 governor + servo + reheat model) to the generator base classes, following the same pattern as the exciter #402 and PSS #486 PRs. - Added `addGovernor(shared_ptr<TurbineGovernorType1>)` to both `Base_SynchronGenerator` and `Base_ReducedOrderSynchronGenerator`, with a null guard; the old scalar `addGovernor(Ta, Tb, …)` now logs a deprecation warning - `EMT_Ph3_SynchronGeneratorDQTrapez` and `EMT_Ph3_SynchronGeneratorVBR` use the new path when a `TurbineGovernorType1` is attached, falling back to the legacy `TurbineGovernor` otherwise - Python bindings for `initialize()` and `add_governor()` on both ReducedOrder generator variants - Hardened the model: zero-division guards in `setParameters()`, `_prev` variables initialised in `initialize()`, state variables moved to `private:` - Docs: added the Turbine Governor Type 1 section with block diagram and equations; fixed an upstream bug where the discrete τ_m equation referenced T3 instead of T5 ## What comes next - `TurbineGovernorType1` bundles governor, servo, and reheat into a single class, so it fits naturally into the existing `addGovernor()` hook without needing new abstractions. - The next PR introduces `Base::Governor` and `Base::Turbine` together with the first models that actually split those two concerns: a steam governor and a steam turbine as separate, chainable objects. The separation matters because different turbine types (steam, hydro) share the same governor interface, so it makes sense to model them independently rather than bundling everything together as done here. - A final PR then adds the hydro variants, which reuse the same base classes and generator hooks without any further infrastructure changes. ### Other comments This is the continuation of what was part of the controllers work from @martinmoraga at ACS.
## Summary Adds a steam turbine governor and a three-stage steam turbine (HP/IP/LP) as separate objects, plus the Base::Governor and Base::Turbine interfaces. - New models: SteamTurbineGovernor (lead-lag + integrator with rate limiter) and SteamTurbine (HP/IP/LP stages) - addGovernorAndTurbine() on both SG base classes, same pattern as addExciter() (#402) and addPSS() (#486) - DQTrapez and VBR generators step the new chain when attached, fall back to TurbineGovernorType1 otherwise - Python bindings for set_parameters(), initialize_states(), and add_governor_and_turbine() - Docs with block diagrams and equations for both models ## What comes next Next PR adds the hydro variants using the same base classes. ## Other comments Continuation of the controllers work from @martinmoraga at ACS.
This is based on various PRs from @martinmoraga at the times of his work on ACS.
Adaptations are mine.
Ongoing work.
New models:
Updates
Other