ORNL / ORNL/GridKit

Do we need `BusInfinite` to inherit from `BusBase`?

Open
#462 3 comments 0 reactions 1 assignee View on GitHub

@pelesh is already working on this.

Since Jun 24, 2026.

enhancement new model question
Dominant language
C++
Stars
27
Forks
11
Avg merge
3d 8h
Merged PRs (30d)
23

Description

Summary

I suggest to make BusInfinite a standalone class, not inheriting from BusBase. In that case, the system composer would have separate loops for buses and infinite buses. The latter might be needed only for component instantiation and not for allocation, residual evaluation or Jacobian evaluation.

In GridKit phasor dynamics module, similar example is SignalNode, which is also a standalone class.

CC @lukelowry @PhilipFackler @nkoukpaizan @abirchfield

Rationale

Inheritance is "is a" relationship and despite its name infinite bus is not really a bus. Rather it stands in for a connection to a grid that is much larger than the grid being modeled.

The infinite bus does not have internal variables or equations and can be skipped in SystemSolver when allocating workspace, evaluating residual or Jacobian, etc. Without the inheritance, the BusInfinite class could be simplified and BusBase could be merged with Bus class to further simplify the code.

Description

I suggest implementing BusInfinite as a standalone class that is treated separately from the Bus instances. We needed inheritance because component constructors needed pointers to buses. Since ComponentData instance has all the connectivity information for each component, pointers to the buses will be eventually removed.

Additional information

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.