Skip to content

Latest commit

 

History

History
50 lines (36 loc) · 3.06 KB

core-design.md

File metadata and controls

50 lines (36 loc) · 3.06 KB

Design of the Power Grid Model core

The Power Grid Model at its core is a header-only C++ interface library, wrapped by a dynamic/shared C API library. The core itself is an engine called the MainModel that provides the C++ interface and exhibits logic for the various aspects that play a role in power grid calculations. The MainModel itself can be deconstructed into an API part, a dispatch part, the grid model and the actual calculation logic.

Calculation logic and data flow

The logic involved in power grid calculations in turn can be devided in a number of separate modules. Coincidentally, those phases also translate to fields of expertise, which enables a reasonably clean architecture.

Logic/control module Description Expertise
I/O Constructing, updating and outputting components in the power grid Software Engineering
Topology construction Constructing the topological graph of the grid Topology
$Y_{\text{bus}}$ construction/Component extraction Constructing $Y_{\text{bus}}$ from the power grid components and topology Electrical Engineering
Solver construction/Grid extraction Translation from $Y_{\text{bus}}$ to a solvable system of equations and from the solution back to physical values Physics
Solving Abstract solution to the system of equations Mathematics
Software Engineering obviously also plays a role in the general design, but that general design does not involve the logic/control flow and therefore is not listed in this table.

The data flow can be visualized as such:

graph TD
    ComponentInput(Input/Update data) -->|Input| Components[Power Grid Components]
    Components -->|Topology construction| Topo[Topology]

    Topo -->|Ybus construction| Ybus(Ybus)
    Components --> Ybus

    Ybus -->|Solver construction/extraction| Equations(Solvable system of equations)
    Equations -->|Solving| Solution(Solution)

    Solution -->|Grid extraction| GridResult(Grid result)
    Ybus --> GridResult

    GridResult -->|Component extraction| ComponentsOutput(Components result)
    Components --> ComponentsOutput

    ComponentsOutput -->|Output| Output(Output data)