Welcome to ExaPF! All help is welcome to improve the current state of ExaPF. If you are interested in contributing to ExaPF, this document details the development procedure we are using.
The issue tracker tracks all the bugs and feature requests. If you find a bug in ExaPF, and/or you would like to add a new feature, you are welcome to open a new issue ticket!
Our development workflow is based on a mildly simplified version of gitflow. Thus, we have at least two active branches
main
which is the lastest stable release of ExaPF,
At each release, a release
branch is created
before tagging the next release. While in the release
branch we check that
- the unit tests passed,
- we haven't introduced any performance regression (this is tested in the folder
ExaPF/benchmark/
), - the documentation is building properly, and is up-to-date.
The code is split in four parts:
ExaPF/PowerSystem/
: in this directory, we implement everything related to network's data (MATPOWER's parsers, specification of the incidence matrix, etc.)ExaPF/LinearSolvers/
: this directory implements wrappers to various linear solvers, both direct and iterative, on the CPU and on the GPU. All linear solvers should overload theLinearSolvers.ldiv!
function as an interface to solve linear system.ExaPF/PolarForm/
implements the polar formulation of the network equations.ExaPF/Evaluators/
implements various evaluators objects, allowing interfacing ExaPF with different optimization solvers to solve the Optimal Power Flow (OPF) problem.
ExaPF is following closely the Julia style guide, as extended by the JuMP style guide. In each pull-request, we will ensure that the following requirements are fulfilled:
- all new features are tested with proper unit-tests.
- all functions exposed in the API are documented properly.
- the code style is consistent (we are using 4-space indent!).