GridPACK is written using an object-oriented development model and makes extensive use of the inheritance and templating capabilities of C++ to provide users with as much functionality as possible while simultaneously providing them with the flexibility to develop a broad range of applications using the framework. The four core GridPACK functionalities are networks, bus and branch components, the mappers and the math module.
A full description of a power grid network requires specification of both the network topology and the physical properties of the bus and branch components. The combination of the models and the network generate algebraic equations that can be solved to get desired system properties. GridPACK supplies numerous modules to simplify the process of specifying the model and solving it. These include power grid components that describe the physics of the different network models or analyses, grid component factories that initialize the grid components, mappers that convert the current state of the grid components into matrices and vectors, solvers that supply the preconditioner and solver functionality necessary to implement solution algorithms, input and output modules that allow developers to import and export data, and other utility modules that support standard code develop operations like timing, event logging, and error handling.
Many of these modules are constructed using libraries developed elsewhere so as to minimize framework development time. However, by wrapping them in interfaces geared towards power grid applications these libraries can be made easier to use by power grid engineers. The interfaces also make it possible in the future to exchange libraries for new or improved implementations of specific functionality without requiring application developers to rewrite their codes. This can significantly reduce the cost of introducing new technology into the framework.
The original focus of GridPACK was to provide a framework to support development of HPC applications. As the project has developed, several applications have been incorporated into the framework to be used as either standalone applications or as modules that can be incorporated into larger simulation workflows. These applications include:
- Power flow
- Dynamic simulation with detailed device models
- State estimation
- Contingency analysis
- Kalman Filter (dynamic state estimation)
The GridPACK framework also has support for basic programming constructs that are useful for developing parallel power grid simulations. These include distributed networks, mappings from networks to distributed vectors and matrices, parallel solvers, IO and distributed data constructs for analysis.
A schematic diagram of the GridPACK framework software stack is shown in Figure 1.