Metadata-Version: 2.4
Name: pyrc
Version: 0.2.0
Summary: Framework to create partially automated networks made up of resistors and capacitors.
Author-email: "Joel Kimmich, Tim Jourdan" <pyrc@igte.uni-stuttgart.de>
License: GPL-3.0-or-later
Project-URL: Homepage, https://pyrc.de
Project-URL: Documentation, https://pyrc.de
Project-URL: Repository, https://codeberg.org/IGTE/pyrc
Project-URL: Issues, https://codeberg.org/IGTE/pyrc/issues
Project-URL: Changelog, https://pyrc.de/changelog.html
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Education
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Typing :: Typed
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Operating System :: Unix
Classifier: Operating System :: MacOS
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: matplotlib>=3.10.0
Requires-Dist: meshio>=5.3.5
Requires-Dist: numpy>=2.2.2
Requires-Dist: pandas>=2.2.3
Requires-Dist: psutil>=7.0.0
Requires-Dist: pvlib>=0.12.0
Requires-Dist: scipy>=1.15.1
Requires-Dist: sympy>=1.13.3
Requires-Dist: vpython>=7.6.5
Requires-Dist: rtree>=1.4.1
Requires-Dist: networkx>=3.6.0
Provides-Extra: docs
Requires-Dist: Sphinx~=8.2.3; extra == "docs"
Requires-Dist: sphinx_design~=0.6.1; extra == "docs"
Requires-Dist: roman-numerals-py; extra == "docs"
Requires-Dist: sphinx-gallery; extra == "docs"
Requires-Dist: pydata_sphinx_theme>=0.16.1; extra == "docs"
Provides-Extra: dev
Requires-Dist: ruff>=0.15.8; extra == "dev"
Requires-Dist: build>=1.4.2; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: twine; extra == "dev"
Requires-Dist: scipy-stubs; extra == "dev"
Dynamic: license-file

<h1 align="center">
<img src="https://codeberg.org/IGTE/pyrc/raw/commit/b356e77f85cf33decd9ebfa2fef8a93f49db6aad/docs/source/_static/logo_dark.svg" alt="PyRC Logo" height="65">
</h1><br>

[![PyPI - Version](https://shields.io/pypi/v/pyrc)](https://pypi.org/project/pyrc/)
[![PyPI - License](https://shields.io/pypi/l/pyrc)](https://pypi.org/project/pyrc/)
[![DOI](https://shields.io/badge/DOI-10.18419%2Fdarus--5765-blue)](https://dx.doi.org/10.18419/darus-5765)
[![Typing](https://shields.io/pypi/types/pyrc)](https://pypi.org/project/pyrc/)

PyRC is a package used to create and simulate resistance-capacity networks.

## Installation

```bash
pip install pyrc
```

## Notes:

- PyRC started as research software, built from scientists for scientists. It was initiated at the
  [IGTE](https://www.igte.uni-stuttgart.de) at the University of Stuttgart by Joel Kimmich and Tim Jourdan.
- PyRC becomes software in research.
- PyRC was initiated at the IGTE at the University of Stuttgart from Joel Kimmich and Tim Jourdan. Its first
  application was to simulate a dynamic thermal system with a constant mass flow under boundary conditions resulting
  from weather conditions (sun radiation and ambient temperatures) over a whole year. Parameter studies were also  
  conducted as part of this work. PyRC has therefore been tested in this regard. Additional functionality was added
  subsequently, and its performance was tested in individual cases. Nevertheless, more extensive testing is
  absolutely necessary.
- PyRC brings the simplicity of Python. Some people may miss the speed of C code but appreciate the
  user-friendliness of Python. Python is widely spread across the scientific community and the automation of
  geometric thermal problems build in PyRC makes it a great tool to easiely combine existing Python scripts with the
  accuracy of physics based dynamic models that can be represented in ODEs and solved efficiently by numeric algorithms.

## When to use PyRC

- When you have any thermal multidimensional dynamic problem
- When modeling systems where time scales span nanoseconds to decades
- When avoiding the complexity of CFD mesh generation
- When the thermal network has an unstructured topology
- When extending or customizing solvers directly in Python
- When parameterizing large-scale RC-networks with up to thousands of elements are required
- When parameterizing small-scale RC-networks with only a few elements
- When working with time-dependent system matrices or boundary conditions
- When creating networks to solve partial differential equations via lumped-parameter models
- When creating geometric networks with visual aid of VPython
- ...

## Fun Facts

- In principle, PyRC works not only for thermal problems but also for electrical ones. However, this has not yet been
  tested, and an `Induction` class modeling the behavior of an electrical coil is still missing. Contributions
  are welcome!
- Even when not interested in solving the ODE you can use PyRC as tool to get the state-space system of even complex
  system with hundreds and thousands of capacities and resistors.

## Publications

First publication:
> Kimmich, J. & Jourdan, T.: "Python Package for Generating Dynamic Systems and Simulating Resistance-Capacitance
> Networks (PyRC)", DaRUS, 2026. <https://dx.doi.org/10.18419/darus-5765>

Poster presented at the 1st Stuttgart Research Software Day, 2026:
> Kimmich, J. & Jourdan, T.: "PyRC", Zenodo, 2026. <https://doi.org/10.5281/zenodo.18832971>

Further publications are in progress.

## Experiences with PyRC:

- Network with weather data as boundary conditions and 280 radiation source terms; simulating one year with a
  maximum time step of 0.4 s on a single core at 3.2 GHz:
  - 3'302 capacities, 10'717 resistances
  - Pre-simulation to initialize: 2.5 hours (~7 simulated days)
  - Total simulation time: ~6.5 days
- Smaller systems (~400 nodes) run 1'000 times faster than simulated time.
- Largest simulated system: over 6'000 capacitors and 30'000 resistors.

## Contributing

See [CONTRIBUTING.rst](https://codeberg.org/IGTE/pyrc/src/commit/b9e78e57cf706f7a6dd3cf8735116d31b115b5ec/CONTRIBUTING.rst)
for how to contribute to PyRC.

## License

See [LICENSE.txt](https://codeberg.org/IGTE/pyrc/src/commit/b9e78e57cf706f7a6dd3cf8735116d31b115b5ec/LICENSE.txt)
for the license.

## Funding

Funded by the Federal Ministry for Economic Affairs and Energy (Bundesministerium für Wirtschaft und Energie), Germany.
