Skip to main content

Python/C++ library for distribution power system analysis

Project description

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

Quality Gate Status Coverage Maintainability Rating Reliability Rating Security Rating Vulnerabilities

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 (both Intel and Arm-based), 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.

Project details


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.242-cp310-cp310-win_amd64.whl (391.8 kB view details)

Uploaded CPython 3.10 Windows x86-64

power_grid_model-1.3.242-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (524.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.242-cp310-cp310-macosx_11_0_arm64.whl (380.8 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

power_grid_model-1.3.242-cp310-cp310-macosx_10_15_x86_64.whl (426.5 kB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

power_grid_model-1.3.242-cp39-cp39-win_amd64.whl (391.3 kB view details)

Uploaded CPython 3.9 Windows x86-64

power_grid_model-1.3.242-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (523.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.242-cp39-cp39-macosx_11_0_arm64.whl (380.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

power_grid_model-1.3.242-cp39-cp39-macosx_10_15_x86_64.whl (426.0 kB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

power_grid_model-1.3.242-cp38-cp38-win_amd64.whl (391.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

power_grid_model-1.3.242-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (524.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.242-cp38-cp38-macosx_11_0_arm64.whl (380.2 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

power_grid_model-1.3.242-cp38-cp38-macosx_10_15_x86_64.whl (426.4 kB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 43a672eb1420e827d0279b7b6f8e947b90432215edc09962073366dfc276e44c
MD5 234ce950e9c4c37c5a900086b288942a
BLAKE2b-256 71ba3a8ed27b02e177b2d4b59f645f9afe71599a78b91a6bf9b57718cb524905

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 372217757393dda6980d29882268db4ea48513397a9f0e9c5768174e68b80f06
MD5 d301d40b9e8c50bf3b3075561bce5d7d
BLAKE2b-256 ae45223e4812493aa0075ce229db3ff7466e0922f65dcc8ebf21cac71a483214

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.242-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 418db8630e17b8b890d377172e22ae1a59062757e0627fdcd0c7f1a11ecf7bac
MD5 99776187dcf43dd930f463e471a83519
BLAKE2b-256 b9c28b75fcf2fadab4c8f6610b533a6da5e01a2c25bc7d598dc1beb9818cf90d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 4922d926cff36346b5db716be1b13de48b5bc102ff640506aab9c89f663a6853
MD5 b7d3bf73adbac18209bb45b3bf665a87
BLAKE2b-256 52f94a1115a989f9f1d919178d65dba598be26fe5779b2bbdc3a4a37688647be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ac1bfc44387599582f8bec2a6b07416facee23b3c92e2620e54c4cc3854dd622
MD5 36925a6345f08f191c63f7175357594c
BLAKE2b-256 b193ec3086497ff120fd501b1767fea4feee7b8cef1d0c399035ca7e8d63a0f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f39749dd3f354b9019ca6559c90525ece6796a9134d09babc75bd2d36d36e26
MD5 2f3eb9a320c9d4b0684e8a0e8987bf16
BLAKE2b-256 64f98cb6672336e30ac7645e7c28cb6993fa293084f163c88af8774e428430d5

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.242-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41d0f3947eae004c235b10764c7effa6cee0444b296304dde820b26b0e5d834b
MD5 340abd3fd2c5ac15b5a103056a365ed8
BLAKE2b-256 81d043e979faf1f446a656a40d346048eb34a2a87b4845b47ea6fdb406a58e2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 7f04e54d6063de01513aebf4f5ef9a92fbf40de63566e8438f7dd42582a0cfe4
MD5 ba43862d2a44ea4c9118922c7f02aea6
BLAKE2b-256 59b972a7fca2c8d4d03af8f1a5b22e844090921a24124c1d1dd519b4b18c3828

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 504379b6c5c7cd9dbd401d3fb52cce80abfa1f9a0b321ba227c61870860e0cf5
MD5 1868af21d3fedf1f4552b4e67a406c5f
BLAKE2b-256 8079274641c8d47de84682e3a98b93b1b5a98028152b7e6d4ba6efa39f6d39e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 963cb10f3ea10f992bf6cf35b3f94bd10d1846718dbd98dff3fca5c736d93003
MD5 d9f05bb86bc99d997e6d1fcf77a6be63
BLAKE2b-256 463501c00d5fbafda5cf11be5800978792568070ba3cc41ec3cf5831aa549b75

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.242-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2fa6b0b49c485fd1d68855c26ed5d20347d9f622508ccbc83347686bec2b3a0c
MD5 fef6cb14dfa75beb04eb471af91c4cab
BLAKE2b-256 6a5f30d69a373fa0791945dd239ba5fda60e02159e6df89d1ccfa96c5861262b

See more details on using hashes here.

File details

Details for the file power_grid_model-1.3.242-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for power_grid_model-1.3.242-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 2a8293482e19526c7da83c3a80174ebc6f768e9098422efcc0190733a52209fb
MD5 672178058d1976b554179db9735fa05b
BLAKE2b-256 8eea478ac06059377e8f565fbabb6228d9219aee5d35d920c040369118fdf8ec

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