Skip to content

DPsim v1.3.0

Choose a tag to compare

@leonardocarreras leonardocarreras released this 14 Aug 09:01
· 30 commits to master since this release
v1.3.0

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 .pyi stubs 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 SystemTopology consistent, deriving mComponentsAtNode instead 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)
  • SystemTopology consistency: node and component removal now maintain mComponentsAtNode, which is derived rather than hand-maintained, and the deprecated add alias 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 .pyi stubs for dpsimpy via pybind11-stubgen, and Python project config migrated to pyproject.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::filesystem and 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

Full Changelog: v1.2.1...v1.3.0