Open Sustainable Technology

A curated list of open technology projects to sustain a stable climate, energy supply, biodiversity and natural resources.

Browse accepted projects | Review proposed projects | Propose new project | Open Issues

ExaGO

High-performance power grid optimization for stochastic, security-constrained, and multi-period ACOPF problems.
https://github.com/pnnl/exago

Last synced: about 20 hours ago
JSON representation

Repository metadata

High-performance power grid optimization for stochastic, security-constrained, and multi-period ACOPF problems.

README

        

# Exascale Grid Optimization toolkit (ExaGOTM) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit) ![PNNL GitLab Push Mirror](https://github.com/pnnl/ExaGO/actions/workflows/pnnl_mirror.yaml/badge.svg) ![ORNL Ascent GitLab Push Mirror](https://github.com/pnnl/ExaGO/actions/workflows/ornl_ascent_mirror.yaml/badge.svg) ![pre-commit GitHub Action](https://github.com/pnnl/ExaGO/actions/workflows/pre_commit.yaml/badge.svg?event=pull_request) ![Spack CPU Build](https://github.com/pnnl/ExaGO/actions/workflows/spack_cpu_build.yaml/badge.svg?event=pull_request)


ExaGOTM is a package for solving large-scale power grid optimization problems on parallel and distributed architectures, particularly targeted for exascale machines with heteregenous architectures (GPU). Combinations of stochastic, contingency-constrained, multiperiod ACOPF problems can be solved with ExaGO. The package is written in C/C++ with python bindings available for python-based applications. An overview of the package is given on this page. For extended information, including the modeling details and formulations, see the [ExaGO manual](docs/manual/manual.pdf).

ExaGOTM includes the following applications for solving different power grid optimization problems:

- [OPFLOW](docs/web/opflow.md) solves an AC optimal power flow either on CPU and GPU
- [TCOPFLOW](docs/web/tcopflow.md) solves a multi-period optimal power flow
- [SCOPFLOW](docs/web/scopflow.md) solves a security-constrained (contingency-constrained) optimal power. Both single-period and multi-period problems can be solved.
- [SOPFLOW](docs/web/sopflow.md) solves a stochastic optimal power flow with (optional) security constraints for single and multiple periods.

ExaGOTM applications are interfaced with the following optimization solver packaages:

- [Ipopt](https://github.com/coin-or/Ipopt) is a popular optimization package for solving nonlinear optimization problems that uses an interior-point algorithm.
- [HiOp](https://github.com/LLNL/hiop) is a HPC package for optimization. ExaGO interfaces with two of its solvers -- a mixed sparse-dense interior-point solver (NewtonMDS) and a sparse interior-point solver (HiOPSparse). NewtonMDS allows execution of the optimization either on CPU and GPU. The sparse HiOp solver is currently supported on CPU only.

Note that not all applications can utilize all solvers yet. The following table lists the solver-application compatibility.

| Solver | OPFLOW | TCOPFLOW | SCOPLOW | SOPFLOW |
|:------:|:---------:|:-----:|:-------:|:-------:|
| Ipopt | Y | Y | Y | Y |
| HiOp | Y | | Y | Y |

Additionally, note that SCOPFLOW and SOPFLOW with HiOp solver use Ipopt to solve a portion of the problem (base problem). So one must also configure with Ipopt when using HiOp solver for these applications.

## Installing

Details installation instructions are given at [INSTALL.md](./INSTALL.md) for information on acquiring, building and installing ExaGO.

If you are a developer with access to the project, we also provide public binaries that are generated through our GitHub actions workflows documented in [README.md](.github/workflows/README.md), and with documentation about usage in the packages section of our repository. Check out a short (< 60s demo) of pulling down a version of ExaGO:

[![asciicast](
https://asciinema.org/a/KCi5TmUXc6zWDj7JYHzfSFxmw.png)](
https://asciinema.org/a/KCi5TmUXc6zWDj7JYHzfSFxmw)

## Developer Guide

You can view the following helpful documentation sources:
- [test_add.md](docs/web/test_add.md) markdown file for information on adding tets (outdated)
- [README.md](buildsystem/README.md) for our bash / spack buildsystem used in GitHub/GitLab CI/CD
- [README.md](buildsystem/spack/README.md) for our spack specific build scripts that support CI tcl modules on HPC target platforms
- [README.md](docs/devcontainer/README.md) for our devcontianer configuration information (codespace support coming soon)
- [exago_policy_compatiblility](docs/exago_policy_compatibility.md) for xSDK compatibility guidelines, and ways to enforce compliance
- [python_bindings.md](docs/python_bindings.md) for documentation about or Python bindings
- [README.md](performance_analysis/README.md) for information about profiling ExaGO with spack
- [README.md](.github/workflows/README.md) for details about our GitHub actions
- [README.ci_clusters.md](docs/web/README.ci_clusters.md) for CI cluster workflow documentation
- [README.summit.md](docs/web/README.summit.md) for ORNL's Summit specific configuration

## Vizualisation

Our ChatGrid frontend deployed with React, PSQL and LangChain has documentation in [README.md](viz/README.md) as well as a pdf [README.pdf](viz/README.pdf) in the `viz` subdirectory. Several of our tutorials install this through commands in Jupyter Notebooks as well.

## Usage
Instructions for executing the different ExaGOTM applications is given below.
- [OPFLOW](docs/web/opflow.md)
- [TCOPFLOW](docs/web/tcopflow.md)
- [SOPFLOW](docs/web/sopflow.md)
- [SCOPFLOW](docs/web/scopflow.md)
- [PFLOW](docs/web/pflow.md)

We also provide our user manual as a pdf [manual.pdf](docs/manual/manual.pdf) -> need to update this regularly with CI / move to quarto docs.

## Tutorials

- If you are using a devcontainer with VSCode, the following tutorials are provided:
- [tutorial.ipynb](docs/devcontainer/tutorial.ipynb) for basic configuration infromation and I/O
- [mpi4py-tutorial.ipynb](docs/devcontainer/mpi4py-tutorial.ipynb) for mpi4py pointers and best practices
- [viz-tutorial.ipynb](docs/devcontainer/viz-tutorial.ipynb) for spinning up our frontend visualization with ChatGrid integration
- Otherwise, you can check out our more in depth application tutorials in the `tutorials`subdirectory:
- [demo1.ipynb](tutorials/demo1.ipynb) run OPFLOW, SCOPFLOW and visualize your output
- [demo2.ipynb](tutorials/demo2.ipynb) run SOPFLOW on many ranks using MPI, and visualize outpu
- TODO - add fixes from `mpi4py` devcontainer example into this notebook to show working MPI workflow

### Options

Each application has a different set of options that are described in depth in the usage notes. These options can be passed optionally through an options file (`-optionsfile `), or directly on the command line.

Since options may be specified in more than one location (on the command line, and through an options file), it is worth noting that the option specified on the command line supersede those in the options file. For example, if `opflowoptions` options file set the network file via the option `-netfile case9mod.m`, the following behavior occurs:

```bash
# This uses case9mod.m
./opflow -optionsfile opflowoptions

# This uses case118.m
./opflow -netfile case118.m -options_file opflowoptions
```

## Visualization (experimental)
ExaGO has an experimental visualization to display the results of `OPFLOW` application on a map. See the [visualization README](viz/README.md) for more information.

## Contributing

Please see [the developer guidelines](docs/developer_guidelines.md) before attempting to contribute.
Feel free to raise an issue or contact the team if the guidelines are ambiguous or you have a particular question.

## Authors
- Shrirang Abhyankar
- Slaven Peles
- Asher Mancinelli
- Cameron Rutherford
- Bruce Palmer
- Jaelyn Litzinger
- William Perkins
- Sayef Azad Sakin
- Joseph Macam
- Ryan Danehy
- Nicholson Koukpaizan

## Acknowledgement
This package is developed as a part of [ExaSGD](https://www.exascaleproject.org/research-project/exasgd/) project under the [Exascale computing project](https://www.exascaleproject.org/).

## Copyright
Copyright © 2020, Battelle Memorial Institute.

ExaGOTM is a free software distributed under a BSD 2-clause license. You may reuse, modify, and redistribute the software. See the [license](LICENSE) file for details.

## Disclaimer
This material was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the United States Department of Energy, nor Battelle, nor any of their employees, nor any jurisdiction or organization that has cooperated in the development of these materials, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness or any information, apparatus, product, software, or process disclosed, or represents that its use would not infringe privately owned rights.
Reference herein to any specific commercial product, process, or service by trade name, trademark, manufacturer, or otherwise does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or any agency thereof, or Battelle Memorial Institute. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or any agency thereof.


Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 2 days ago

Total Commits: 770
Total Committers: 29
Avg Commits per committer: 26.552
Development Distribution Score (DDS): 0.583

Commits in past year: 60
Committers in past year: 14
Avg Commits per committer in past year: 4.286
Development Distribution Score (DDS) in past year: 0.733

Name Email Commits
Shri Abhyankar s****i@p****v 321
Shrirang s****r@p****v 94
Rutherford, Cameron r****d@p****v 77
Mancinelli, Asher J a****i@p****v 72
Hong Zhang h****g@m****v 40
Rylee Sundermann r****n@s****u 27
Jaelyn Litzinger j****r@p****v 26
Palmer, Bruce J b****r@p****v 22
Asher Mancinelli a****i@g****m 15
Perkins, William A w****s@p****v 14
Peles, Slaven s****s@p****v 13
Arun Sukumaran Nair a****r@p****v 13
Jaelyn Litzinger 9****z 6
Nicholson Koukpaizan 7****n 6
Amatya, Vinay C v****a@p****v 4
Nicholson Koukpaizan k****k@o****v 3
Bill w****s 3
bjpalmer b****r 2
Orestis Vasios 1****s 2
Bruce J Palmer d****3@c****v 1
Bruce J Palmer d****3@n****v 1
Danehy, Ryan r****y@p****v 1
Jaya Preethi Mohan (JP) m****5@g****m 1
Jin, Sichen s****n@p****v 1
Macam, Joseph D j****m@p****v 1
sichenjin 5****n 1
nedpfeiffer 1****r 1
Sakin, Sayef A s****9@p****v 1
Tamara Becejac t****c@p****v 1

Committer domains:


Issue and Pull Request metadata

Last synced: 2 days ago

Total issues: 75
Total pull requests: 73
Average time to close issues: 27 days
Average time to close pull requests: 13 days
Total issue authors: 14
Total pull request authors: 11
Average comments per issue: 1.69
Average comments per pull request: 3.08
Merged pull request: 51
Bot issues: 0
Bot pull requests: 0

Past year issues: 75
Past year pull requests: 73
Past year average time to close issues: 27 days
Past year average time to close pull requests: 13 days
Past year issue authors: 14
Past year pull request authors: 11
Past year average comments per issue: 1.69
Past year average comments per pull request: 3.08
Past year merged pull request: 51
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/pnnl/exago

Top Issue Authors

  • cameronrutherford (34)
  • jaelynlitz (11)
  • paulrigor (6)
  • wperkins (5)
  • nedpfeiffer (3)
  • nkoukpaizan (3)
  • nychiang (3)
  • samachnpl (3)
  • pelesh (2)
  • abdelrahman-ayad (1)
  • bjpalmer (1)
  • Jayapreethi (1)
  • SalehSG (1)
  • tabholt (1)

Top Pull Request Authors

  • cameronrutherford (25)
  • jaelynlitz (13)
  • abhyshr (11)
  • nkoukpaizan (7)
  • wperkins (5)
  • nedpfeiffer (4)
  • Jayapreethi (2)
  • bjpalmer (2)
  • ovasios (2)
  • nychiang (1)
  • sichenjin (1)

Top Issue Labels

  • bug (5)
  • xSDK (2)
  • enhancement (2)
  • opflow (2)
  • question (1)
  • sopflow (1)
  • documentation (1)
  • spack-build (1)

Top Pull Request Labels

  • enhancement (4)
  • xSDK (4)
  • opflow (3)
  • sopflow (1)
  • scopflow (1)
  • documentation (1)
  • manual (1)
  • bug (1)

Package metadata

spack.io: exago

ExaGO is a package for solving large-scale power grid optimization problems on parallel and distributed architectures, particularly targeted for exascale machines.

  • Homepage: https://github.com/pnnl/ExaGO
  • Licenses: []
  • Latest release: 1.4.1 (published about 2 years ago)
  • Last Synced: 2024-05-10T07:04:58.323Z (2 days ago)
  • Versions: 12
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent repos count: 0.0%
    • Average: 28.637%
    • Dependent packages count: 57.274%
  • Maintainers (3)

Dependencies

tests/interfaces/python/pyproject.toml pypi
.github/workflows/file_naming.yaml actions
  • actions/checkout v3 composite
  • shogo82148/actions-setup-perl v1 composite
.github/workflows/ornl_ascent_mirror.yaml actions
  • actions/checkout v1 composite
  • yesolutions/mirror-action master composite
.github/workflows/pnnl_mirror.yaml actions
  • actions/checkout v1 composite
  • yesolutions/mirror-action master composite
.github/workflows/pre_commit.yaml actions
  • EndBug/add-and-commit v9.1.3 composite
  • actions/checkout v3 composite
  • actions/setup-python v3 composite
  • pre-commit/action v3.0.0 composite
.github/workflows/spack_cpu_build.yaml actions
  • actions/checkout v2 composite

Score: 9.175438319966918