Skip to main content

Python/C++ library for distribution power system analysis

Project description

License: MIT Build and Test C++ and Python Format Code REUSE Compliance Check

Power Grid Model

power-grid-model is a Python library for steady-state distribution power system analysis. The core of the library is written in C++. Currently, it supports the following calculations:

  • Symmetric and asymmetric power flow calculation with Newton-Raphson method and linear method
  • Symmetric and asymmetric state estimation with iterative linear method

Installation

Runtime Dependencies

The only Python runtime dependency is numpy. It will be automatically installed as the requirements. Moreover, the library optionally depends on Intel Math Kernel Library (mkl), for its PARDISO sparse solver. It is recommended to install mkl because it gives huge performance boosts.

The easiest way to install mkl is using pip or conda:

pip install mkl

or

conda install -c conda-forge mkl

You need to add the path to the mkl runtime file libmkl_rt.so or mkl_rt.dll the environment variable LD_LIBRARY_PATH in Linux or Path in Windows (conda does this automatically in the environment). If the library can find mkl runtime, it uses it as the sparse solver. It is recommended to set the environment variable MKL_THREADING_LAYER to SEQUENTIAL, as multi-threading is handled in a higher level. If the library cannot find mkl runtime, it will fall back to an internally built-in (and much slower) Eigen SparseLU solver.

Install from Pre-built Binary Package

The power-grid-model python package is pre-built for Windows, Linux, and macOS, for Python version 3.8, 3.9, and 3.10. You can directly install the package from PyPI.

pip install power-grid-model

Build and install from Source

To install the library from source, refer to the Build Guide.

Quick Start

In this quick start a simple 10kV network as below is calculated. A line connects two nodes. One node has a source. One node has a symmetric load. The code in the quick start is in quick_example.py.

node_1 ---line_3--- node_2
 |                    |
source_5            sym_load_4

The library uses a graph data model to represent the physical components and their attributes, see Graph Data Model.

Firstly, import the main model class as well as some helper functions for enumerations and meta data.

from power_grid_model import LoadGenType
from power_grid_model import PowerGridModel
from power_grid_model import initialize_array

Input Data

The library uses dictionary of numpy structured arrays as the main (input and output) data exchange format between Python and C++ core. The documentation Native Data Interface explains the detailed design of this interface.

The helper function initialize_array can be used to easily generate an array of the correct format.

# node
node = initialize_array('input', 'node', 2)
node['id'] = [1, 2]
node['u_rated'] = [10.5e3, 10.5e3]

The code above generates a node input array with two nodes, and assigns the attributes of the nodes to the array. Similarly, we can create input arrays for line, load, and generation.

# line
line = initialize_array('input', 'line', 1)
line['id'] = [3]
line['from_node'] = [1]
line['to_node'] = [2]
line['from_status'] = [1]
line['to_status'] = [1]
line['r1'] = [0.25]
line['x1'] = [0.2]
line['c1'] = [10e-6]
line['tan1'] = [0.0]
line['i_n'] = [1000]
# load
sym_load = initialize_array('input', 'sym_load', 1)
sym_load['id'] = [4]
sym_load['node'] = [2]
sym_load['status'] = [1]
sym_load['type'] = [LoadGenType.const_power]
sym_load['p_specified'] = [2e6]
sym_load['q_specified'] = [0.5e6]
# source
source = initialize_array('input', 'source', 1)
source['id'] = [5]
source['node'] = [1]
source['status'] = [1]
source['u_ref'] = [1.0]
# all
input_data = {
    'node': node,
    'line': line,
    'sym_load': sym_load,
    'source': source
}

Instantiate Model

We can instantiate the model by calling the constructor of PowerGridModel

model = PowerGridModel(input_data, system_frequency=50.0)

Power Flow Calculation

To calculate power flow, call the method calculate_power_flow. This method has many optional arguments, see Python API Reference for a detailed explanation.

result = model.calculate_power_flow()

Both input and output data are dictionaries of structured numpy arrays. We can use pandas to convert them to data frames and print them.

print('Node Input')
print(pd.DataFrame(input_data['node']))
print('Node Result')
print(pd.DataFrame(result['node']))

You can print the data in tables.

Node Input
   id  u_rated
0   1  10500.0
1   2  10500.0
Node Result
   id  energized      u_pu             u   u_angle
0   1          1  0.999964  10499.619561 -0.000198
1   2          1  0.994801  10445.415523 -0.003096

Examples

Please refer to Examples for more detailed examples for power flow and state estimation.

License

This project is licensed under the Mozilla Public License, version 2.0 - see LICENSE for details.

Licenses third-party libraries

This project includes third-party libraries, which are licensed under their own respective Open-Source licenses. SPDX-License-Identifier headers are used to show which license is applicable. The concerning license files can be found in the LICENSES directory.

Intel Math Kernel Library License

The power-grid-model does not bundle or redistribute any MKL runtime library. It only detects if MKL library is installed in the target system. If so, it will use the library to accelerate the calculation. The user is responsible to acquire a suitable MKL license.

Contributing

Please read CODE_OF_CONDUCT and CONTRIBUTING for details on the process for submitting pull requests to us.

Contact

Please read SUPPORT for how to connect and get into contact with the Power Gird Model project.

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

power_grid_model-1.3.13-cp310-cp310-win_amd64.whl (406.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

power_grid_model-1.3.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.13-cp310-cp310-macosx_10_15_x86_64.whl (461.5 kB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

power_grid_model-1.3.13-cp39-cp39-win_amd64.whl (406.9 kB view details)

Uploaded CPython 3.9 Windows x86-64

power_grid_model-1.3.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.13-cp39-cp39-macosx_10_15_x86_64.whl (461.5 kB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

power_grid_model-1.3.13-cp38-cp38-win_amd64.whl (407.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

power_grid_model-1.3.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.13-cp38-cp38-macosx_10_14_x86_64.whl (461.3 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

File details

Details for the file power_grid_model-1.3.13-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: power_grid_model-1.3.13-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 406.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.2

File hashes

Hashes for power_grid_model-1.3.13-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c5260b5c0bc0f082edad73c95b80d135d1462347f45304e979a3cbd214905e6f
MD5 b4f542bd9148c4bc4d38da07909a5edd
BLAKE2b-256 60c8e9714c2f68d22cf34d69821c310a5c0b1eb916b034e21489bdff15bc3f39

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for power_grid_model-1.3.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cd607d401f8bd31d04d5c0e0cffaef76d4afdd93b30b2b3a64bb49fed458b391
MD5 9e616e2c9d412b05e0d147f274b39139
BLAKE2b-256 4591bf74afbf1b4312134fa48205ef4250cba6dd7e38e78de710374e199831e1

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: power_grid_model-1.3.13-cp310-cp310-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 461.5 kB
  • Tags: CPython 3.10, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.2

File hashes

Hashes for power_grid_model-1.3.13-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 e3552bbb827bcaae5955e32db89a8d7935f6b84be6ab98c1a5f1cc2d3412b055
MD5 9af4663d08161178be67b546b24089f3
BLAKE2b-256 8fc5b39e4000acb9f182e59bd9c481d99a4c743dfeb47e2017141c3a23c5951e

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: power_grid_model-1.3.13-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 406.9 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for power_grid_model-1.3.13-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1153c944fece1db3ea26c0e3ba96f3b0500d8788bf6a50dc03525c53faf326ec
MD5 eea71d35b81d73bef7e0cd4171ebd02e
BLAKE2b-256 fc6a2edcde912bee5ce5ce3064b931595282d9963fe0aceeb83dfc12d7bacceb

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for power_grid_model-1.3.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a966263b0fdeba64963231500485a4be9c1e4f5b8ed831dbb2a346a849764d7f
MD5 de422c8abc688eeabcfcc5126ed30d71
BLAKE2b-256 b2ac788cdf6161fa89487fd3af80a074bcb5a43efd935d21ca8330490697fd02

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: power_grid_model-1.3.13-cp39-cp39-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 461.5 kB
  • Tags: CPython 3.9, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for power_grid_model-1.3.13-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6d40c217f9fcbfee327fdc030937d059c19176884a54d44c98a72d22fae3ae56
MD5 c133fd93de9c9dd4b621c2c9d206fc9e
BLAKE2b-256 78070404865a4ab0cd8b06e25727b85bc215762d54f1b55cfbbbbc6a9339b466

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: power_grid_model-1.3.13-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 407.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for power_grid_model-1.3.13-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 92c17e94d4ed33d73e90cc3d3c57777943e8821c84ada1719c1d918b240c17ca
MD5 cff9c3e11be7410c826aee1c710f97c1
BLAKE2b-256 5eb1b9350080e2e9aa60f21faada72f98dd47fd3ed1bc9ed0e48b41012eb0305

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for power_grid_model-1.3.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e5985b03bebd94e1b3b0c63f5e667f5373dfb2523138418ac1a6f1745051719
MD5 de79d7d4e9a124de754900c52c2030af
BLAKE2b-256 46d46bfa95b7ef9157b65c693c2290c08c17de7dd3d415589dc617b345293617

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.13-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: power_grid_model-1.3.13-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 461.3 kB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for power_grid_model-1.3.13-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 dca908a1337344c7f425255cf85ce8b38a7b521e8bd210629342d47b47601289
MD5 0f3c9741650571892614fc316cdf7dba
BLAKE2b-256 9f2727aa87bbd3c1f566bef993f7b9c210fe516c78764c0726418dce89f883ab

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page