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

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, 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.42-cp310-cp310-win_amd64.whl (407.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

power_grid_model-1.3.42-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.42-cp310-cp310-macosx_10_15_x86_64.whl (461.7 kB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

power_grid_model-1.3.42-cp39-cp39-win_amd64.whl (407.1 kB view details)

Uploaded CPython 3.9 Windows x86-64

power_grid_model-1.3.42-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.8 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.42-cp39-cp39-macosx_10_15_x86_64.whl (461.7 kB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

power_grid_model-1.3.42-cp38-cp38-win_amd64.whl (407.2 kB view details)

Uploaded CPython 3.8 Windows x86-64

power_grid_model-1.3.42-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

power_grid_model-1.3.42-cp38-cp38-macosx_10_14_x86_64.whl (461.5 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: power_grid_model-1.3.42-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 407.1 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.42-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 508548ed2d75667fdfc72699664003dbe2b293e4466b413ded127d6cfdcd3eb5
MD5 fd3aea0245b88e8d9b364360f7777128
BLAKE2b-256 1f4ab15be0187edb5d03c8cb5dfc5f76558cbf1fe1841002d4f385dc53ebc399

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.42-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b2c0e83b23b876a199a36dd69aa85e71fd2a95695fced66d3e95161d3e291c7f
MD5 d0d818844f1c783f2eeb0f2461e5fedb
BLAKE2b-256 bec3b81653226d0f3ef80e297174d8c971d70f80e4da94eb7815abed912b3c11

See more details on using hashes here.

File details

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

File metadata

  • Download URL: power_grid_model-1.3.42-cp310-cp310-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 461.7 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.42-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b855cb0d89fd18818209cdb097feec2dda46684c4e9428e56bac31cd291dd27c
MD5 18713caa019a5bd9c7b524947f6884fa
BLAKE2b-256 d2764feac5532ebab432dd9fe02e0231dc0793181e451d4310a5e03d75ef66fc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: power_grid_model-1.3.42-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 407.1 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.42-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8af16d3b3aa2732beb69d32d54dabd9c922d25c9a53b1262e6de04a93e9a1324
MD5 fedea6f698925a841bd4a12df531d4c1
BLAKE2b-256 bfc1102cad5151de54739ab3b7637a33e9263adebd381e17f97148be2426cc70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.42-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 848f430eb9cbe2e02c62c961947ea28e53f34c5b95b7e729ba210a245cd2a042
MD5 04f87028bd0ecca0f3ce35b0e345bc34
BLAKE2b-256 676fcefd3fa418fa716ec3e76726e3acb8310ef795dd8ff8cf8fe14a00f95b11

See more details on using hashes here.

File details

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

File metadata

  • Download URL: power_grid_model-1.3.42-cp39-cp39-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 461.7 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.42-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6ebef1ef7fac83f9a4155ebb47001fa0066d57b61881de00133018ae6ed3762d
MD5 55d5d73e27f9d40f9fbf9ded8d7618df
BLAKE2b-256 62804b0cd08aa5b29bb5873c10927edb3435fd39c9f149c74b422f9ade80a65e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: power_grid_model-1.3.42-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 407.2 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.42-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2676c9bf5c08134faa1fc47515391124538e3d1a3c95f84464bb295e437a2f9e
MD5 c5de8a7bf8c871a8b98d5ad57dbfa4be
BLAKE2b-256 ac6d4286a4d9c180fb7424fe3011ed2201514918d1d1b790d1c8307cefa3b977

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for power_grid_model-1.3.42-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 791a39da900c7d02f51ed88adcb32015a5618bdae464031cae87c88b52a91d5f
MD5 71d6518918b5b3217535d7d7c16379d2
BLAKE2b-256 01546155aa81cea4a8476de725bece0e514601ac00fa77ba24408555133aad3f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: power_grid_model-1.3.42-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 461.5 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.42-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 46ada8654ca02e199e833eaeb2b7b49357193692184cde83ebc483e8f533352b
MD5 7d4517e39d909cb58999f9936e3bea65
BLAKE2b-256 069efc9f009f8cecdd6ba9a5ddc189da22a9291f7aad9c9167ea7b03a593d69f

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