GridPACK™ is a software framework consisting of a set of modules designed to simplify the development of programs that model the power grid and run on parallel, high performance computing platforms. The modules are available as a library and consist of components for setting up and distributing power grid networks, support for modeling the behavior of individual buses and branches in the network, converting the network models to the corresponding algebraic equations, and parallel routines for manipulating and solving large algebraic systems. Additional modules support input and output as well as basic profiling and error management.
The GridPACK framework will simplify parallel power grid application development by eliminating many of the index transformations and calculations required to distribute data in parallel applications and also to move data from one processor to another as the calculation proceeds. Application writers can focus primarily on the physics of their problem without worrying about much of the baggage associated with writing applications in parallel. GridPACK supplies core functionalities that will simplify parallel code development. These include a generic framework for setting up power grid networks and applying whatever physical properties to the bus and branches that developers want, functionality for distributing the networks across processors and managing the exchange of network data between processors, generic functionality for mapping data from the networks to matrices and vectors, and libraries of parallel matrix and vector operations, linear and non-linear solvers and preconditioners for solving the equations generated by power grid models. The framework will also supply routines for generating networks from standard format input files that describe power grid networks (e.g. PTI files), writing data from the network back out to files, and additional functionality for profiling and error management. The modules in the framework are being designed to compartmentalize functionality in a way that will simplify future code maintenance. This compartmentalization will also allow modules to be updated more easily without requiring modification of other modules or of the applications.