DPsim v1.3.0
·
30 commits
to master
since this release
What's Changed since v1.2.1
Highlights
- State-Space Nodal (SSN) is now available in every domain (EMT, SP and DP/SFA), including variable and mixed-type components.
- MNA state-space extraction and modal analysis, with participation factors, a GlobalDQ0 frame and named state metadata exposed to Python.
- Grid-forming and grid-following inverter models, from composite EMT machines to SSN formulations, benchmarked against the averaged-VSI state-space inverter.
- A complete synchronous generator control stack: exciters, power system stabilisers, and steam/hydro turbine governors.
- Power flow gains a sparse KLU solver for large grids, generator Q-limit enforcement, and a long list of matpower and CGMES reader fixes.
- Windows wheels, Python 3.10 to 3.14, and
.pyistubs for the whole binding surface. - CI rebuilt around a single entry point, with fork pull requests running the same pipeline as everything else.
Special thanks
Huge thanks to everyone who contributed to this release!
In particular:
- @georgii-tishenin for MNA state-space extraction and modal analysis, the variable SSN base, automatic system matrix recomputation, and for reviewing and helping maintain DPsim.
- @matthiasmees for the I-Type and FourTerminal SSN classes, the grid-forming inverter with automatic controller derivation, the EMT grid-following models, and scalar EMT DC components.
- @FGH-wirtz for the Diakoptics solver work, KLU-based subnet solving with localized system matrices, and the partial refactorization fix.
- @barismuutlu for making
SystemTopologyconsistent, derivingmComponentsAtNodeinstead of hand-maintaining it, and fixing node and component removal. - @pipeacosta for the ITM decoupling line, breaker and disconnector mapping, and the option to map synchronous machines to ideal voltage sources.
- @MarvinTollnitschRWTH for the generalized linear two-terminal SSN component models and their SP-domain counterparts.
- @SystemsPurge for the binder container test and for restoring the GitHub-hosted runners.
- @AnasBahr for building libcimpp from source on ARM64 and macOS.
And a warm welcome to the new contributors in this cycle:
@matthiasmees, @barismuutlu, @SystemsPurge, thanks for jumping in!
Many of these contributions were done in personal free time, we deeply appreciate that commitment to DPsim.
State-Space Nodal in every domain
- Generalized linear two-terminal SSN component models, and generic EMT 3-phase V-type and I-type components.
(PRs: #406, #472, #489, #500) - Variable SSN base with an EMT 3-phase piecewise-linear inductor, and automatic system matrix recomputation.
(PRs: #474, #576) - Generic Ph1 two-terminal linear SSN components for the SP domain.
(PR: #587) - DP/SFA SSN: base classes, a single-phase serial RLC component, generic V/I-type components with validation and accuracy notebooks, and a concept page for State-Space Nodal in dynamic phasors.
(PRs: #515, #516, #517) - DP::Ph3 SSN base and generic components with examples, notebooks, docs and bindings, plus Ph1 and Ph3 variable-SSN bases for mixed real+complex state components.
(PRs: #541, #542, #544, #578)
State-space extraction & modal analysis
- MNA state-space extraction and modal analysis, extended to variable two-terminal SSN components and to a GlobalDQ0 frame.
(PRs: #478, #488, #497) - Participation factors with right and left eigenvectors, named state metadata, and modal participation results exposed to Python.
(PR: #537) - Extraction for DP Ph1 components and DP mixed variable SSN components, and support for EMT Ph3 / DP Ph1 composite components and switches.
(PRs: #564, #571, #573, #574)
Grid-forming & grid-following inverters
- Grid-forming inverter, VCO and voltage controller, an EMT Ph3 SSN grid-forming inverter with automatic controller derivation, and a grid-connected variant with an IEEE 9-bus mixed example.
(PRs: #560, #570, #577) - EMT grid-following classes with refactored SSN variants, benchmarked against the averaged-VSI state-space inverter.
(PR: #683) - DP averaged-VSI state-space inverter for Ph1 and Ph3, with negative-sequence current control, an unbalanced single-line-to-ground validation, a cxx example and a cross-domain validation notebook.
(PRs: #545, #546, #547, #579, #586, #592) - Analytical linearization of the SSN grid-forming inverter.
(PR: #642)
Synchronous generator models & controls
- New exciter models, a new power system stabiliser, and steam and hydro turbine governors on a shared base.
(PRs: #402, #486, #491, #492) - TurbineGovernorType1 integrated with SynchronGenerator with Python bindings, a controller validation notebook, and an initialization fix.
(PRs: #490, #494, #493) - Reactive-power limits for the SP synchronous generator, and IEEE 9-bus 4th-order examples in SP, DP and EMT.
(PRs: #535, #575)
Power flow, matpower & CGMES
- Sparse-Jacobian power flow with KLU refactorization reuse for large grids, generator Q-limits via a PV-to-PQ outer loop, and a configurable base-power fallback.
(PRs: #514, #536, #552) - Zone-based base voltage verification, Newton-Raphson globalization, non-finite mismatch guards, and a series of stamping and caching fixes.
(PRs: #543, #512, #519, #520, #521, #525, #532, #551, #555) - Matpower reader: out-of-service equipment filtering, and an option to map synchronous machines to ideal voltage sources.
(PRs: #553, #601) - CGMES reader: EnergyConsumer SSH-derived P/Q, PQ-generator mapping and slack voltage units, injection target disambiguation, and breaker/disconnector mapping.
(PRs: #554, #558, #562, #556)
Components, topology & decoupling
- Diakoptics: KLU-based subnet solving with localized system matrices, DP_Ph3 and EMT_Ph1 PiLine with Ph3 diakoptics, and virtual-node collection fixes.
(PRs: #513, #436, #507, #523) - ITM decoupling, DP/EMT shunts, a DP_Ph3 current source with independent per-phase references, a DP::Ph3 matrix switch, and scalar EMT DC components.
(PRs: #423, #550, #538, #583, #630) SystemTopologyconsistency: node and component removal now maintainmComponentsAtNode, which is derived rather than hand-maintained, and the deprecatedaddalias is back.
(PRs: #621, #622, #634, #638)
Packaging & platforms
- Windows wheels are built and published, and the supported Python range is now 3.10 to 3.14.
(PRs: #633, #681) - Auto-generated
.pyistubs fordpsimpyvia pybind11-stubgen, and Python project config migrated topyproject.toml.
(PRs: #495, #485) - libcimpp built from source on ARM64 and macOS, the wheel build pinned to its target interpreter, and Windows build fixes for pybind,
std::filesystemand MSVC optimization flags.
(PRs: #610, #649, #470, #480, #641)
CI/CD, code quality & docs
- All workflows now run from a single CI entry point, fork pull requests go through the same pipeline, and container images are cached in the registry.
(PRs: #661, #674, #672) - Conventional commits are enforced by CI and a commit-msg hook, and a multi-stage LLM pull request reviewer was added.
(PRs: #607, #594, #595) - Python dependencies resolve with uv across every image and script, replacing the broken pip-tools path.
(PRs: #650, #651, #670, #648) - SonarCloud analyses fork pull requests without exposing secrets, and metadata resolution was fixed.
(PRs: #593, #598) - Documentation was restructured and its coverage gaps closed, with new pages on the MNA solver, component initialization, attribute usage guidelines and task scheduling, plus a CONTRIBUTING guide and a notebook output compliance check.
(PRs: #619, #505, #503, #506, #509)
Known issues
SystemTopology.render_to_file()and_repr_svg_()crash in the published Linux wheel: Graphviz layout plugins are not bundled, so the call writes an empty file and terminates the process. This is unchanged from v1.2.1 and a fix is planned for a follow-up release.
New Contributors
- @matthiasmees made their first contribution in #489
- @barismuutlu made their first contribution in #622
- @SystemsPurge made their first contribution in #645
Full Changelog: v1.2.1...v1.3.0