Installation
========
To build PowerFlow for your platform, you need `CMake `_ and a suitable
C++17 compiler. The instructions in this section assume the following compilers are used:
* Windows: MSVC (`Visual Studio >= 2022 `_)
* Linux: g++
* Mac: clang
In addition to CMake and a compiler, you may need additional software depending on the
build target.
Matlab
------
PowerFlow can be compiled into a `Matlab executable (MEX) `_
that can then be used like any other Matlab function. To be able to compile and run the MEX
file, Matlab must be installed and **added to the PATH** on your computer. PowerFlow has
been tested to work with Matlab version R2024b and R2025a.
To compile the MEX file, execute the following in a terminal/PowerShell inside the PowerFlow
root directory:
.. code-block:: bash
mkdir build
cd build
On Linux/macOS:
.. code-block:: bash
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --target PowerFlowMex
On Windows:
.. code-block:: bash
cmake ..
cmake --build . --target PowerFlowMex --config Release
The MEX file can then be found in ``build/Matlab`` (``build/Matlab/Release`` on Windows).
Copy the MEX file to your Matlab project along with the ``PowerFlow.m`` file, which provides
an interface to the MEX file.
Python
------
PowerFlow can be compiled into a `pybind11 module `_
that can then be imported into Python 3 scripts. To build and use the Python module, you
need Python 3 and pybind11 on your computer.
.. note::
On Windows, Python must be installed using the official installer (found
`here `_), **NOT** using the Microsoft Store! During the
installation, make sure to select the "Add to PATH" option.
.. note::
When installing pybind11 using pip, it may be necessary to select the "global" version.
On some Linux distributions, pybind11 may be installed using the package manager. For
example, on Ubuntu, the python3-pybind11 package can be installed using apt.
To compile the Python module, execute the following in a terminal/PowerShell inside the
PowerFlow root directory:
.. code-block:: bash
mkdir build
cd build
On Linux/macOS:
.. code-block:: bash
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --target PowerFlowPython
On Windows:
.. code-block:: bash
cmake ..
cmake --build . --target PowerFlowPython --config Release
The resulting Python module file can then be found in ``build/python``
(``build/python/Release`` on Windows). This file can be copied to your Python project.
Local development (with Type Support)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Alternatively, run the following on any platform to include Python type support. Please
ensure you first create and activate a new virtual environment using venv:
On Linux/macOS:
.. code-block:: bash
python3 -m venv .venv
source .venv/bin/activate
On Windows:
.. code-block:: bash
python -m venv .venv
.venv\Scripts\activate
Install and build
^^^^^^^^^^^^^^^^^
Once the environment is active, install the dependencies and build PowerFlow:
.. code-block:: bash
# Install requirements to compile PowerFlow
pip install -r requirements.txt
# Install PowerFlow in editable mode
pip install -e . --no-build-isolation
Once completed, the necessary files can be found in ``python/``. The most important files
generated are ``PowerFlowPython.cp314-win_amd64.pyd`` (or ``.so``) and
``PowerFlowPython.pyi``.
Linking to PowerFlow
--------------------
It is possible to use PowerFlow as a C++ library by statically linking to the
``PowerFlowLib`` CMake target. The ``standalone`` directory contains an example showing
how PowerFlow can be used within a C++ program.