What’s New

Discover notable new features and improvements in each release.

v0.0.10 (30.06.2026)

API Changes

  • The dedicated Condenser component was removed. Heat-rejection units are now modelled with HeatExchanger, which decides whether a unit is dissipative or productive instead of always treating condensers as dissipative. The TESPy and Ebsilon parsers map their condensers to HeatExchanger automatically, and legacy exports labelled "Condenser" are still loaded (mapped to HeatExchanger with a deprecation warning).

New Features

  • A HeatExchanger is now treated as dissipative when its rejected heat is declared a loss, i.e. when one of its outlets is listed in E_L. This lets several condensers in the same network be handled individually without a manual mapping override (closes #37).

  • The dissipative flag of HeatExchanger is now tri-state: True forces dissipative behavior, False forces productive behavior, and None (default) decides automatically from the temperature case or the E_L specification.

Contributors

</content> </invoke>

v0.0.9 (17.06.2026)

New Features

  • Solar thermal components for the exergy analysis of concentrating-solar-power plants: Heliostatfield, ParabolicTrough and SolarTower. Incoming solar radiation is converted to exergy with the Petela/Spanner factor. These new components can be currently parsed only from Ebsilon models. Two examples were added (solar tower and parabolic trough). This contribution originates from the Bachelor thesis of Alexandros Breous (TU Berlin, 2025).

  • Mixer and Splitter now accept a num_branches scaling factor, so a single modelled branch can represent several identical parallel branches (collecting and distributing headers).

Bug Fixes

  • Turbine: the main outlet is now selected as the lowest-indexed material outlet, so models with extraction ports on other connectors no longer fail.

Other Changes

  • Logging: exerpy uses a dedicated exerpy logger instead of the root logger, so it no longer interferes with the logging of other libraries (e.g. TESPy). Its warnings are shown by default and are captured normally once an application configures logging.

  • analyse() now runs the component balances before summing the system E_F/E_P/E_L and performs sanity checks that surface physically impossible or suspicious results: negative exergy destruction, efficiency above 100 %, streams in E_F/E_P/E_L that carry no exergy, and system boundary connections missing from the fuel/product/loss definitions.

  • A component name may be used directly in the E_F/E_P/E_L definitions; it is resolved to the component’s synthetic heat connection.

  • Ebsilon solver messages are filtered: empty or purely numeric rows are skipped and only informative warnings are logged.

  • Import sorting: ruff’s isort rules were aligned with the project’s force_single_line style so the two import sorters no longer conflict.

Contributors

v0.0.8 (03.06.2026)

Bug Fixes

  • Chemical exergy: trace components are now filtered out of the molar composition (fractions below 1e-6) before the pure-substance check in calc_chemical_exergy(). Mixtures carrying tiny residual species are no longer misclassified as pure substances (#26).

  • Heat connections: add_total_exergy_flow() now identifies the SimpleHeatExchanger component on whichever end of a heat connection it sits, instead of assuming the source side. The opposite end is a heat source/sink that is not part of the component dictionary (#27).

Other Changes

  • Updated ExerPy for the latest TESPy API; the minimum supported TESPy version is now >=0.10.0 (#32). The TESPy example scripts (CCPP, CGAM) were adapted accordingly.

  • Bumped the tespy dependency pin to >=0.10.0. TESPy remains an optional dependency (the core install requires only pandas and numpy).

  • Dropped support for Python 3.10. ExerPy now requires Python >=3.11, following TESPy 0.10, which no longer supports Python 3.10.

  • Fixed the installation links in the documentation.

Contributors

v0.0.7 (24.02.2026)

Bug Fixes

  • Fixed floating-point temperature comparison in HeatExchanger and Condenser components. Added _temperature_case() helper with 0.01 K tolerance to prevent misclassification when stream temperatures are at exactly Tamb.

  • Changed case 6 (all streams at Tamb) log level from warning to info in HeatExchanger and Condenser.

New Features

  • Added full dissipative component support for Condenser: dis_eqs() method, is_dissipative detection in _construct_components() and analyse(), and NaN-safe exergoeconomic_balance().

  • Added dissipative HeatExchanger support: dis_eqs() method and is_dissipative detection in _construct_components() and analyse().

Contributors

v0.0.6 (12.02.2026)

Build & Packaging

  • Added explicit exclude rules in pyproject.toml for paths that should not be distributed.

  • Added CI verification step in the packaging workflow to check wheels for blocked paths.

Contributors

v0.0.5 (11.02.2026)

Bug fixes

  • Fixed bugs in Mixer and Deaerator exergoeconomic balance equations.

  • Fixed Splitter exergoeconomic analysis implementation.

  • Fixed CycleCloser and Compressor parsing from Ebsilon.

  • Fixed parsing of turbines from Aspen.

  • Fixed from_json method to correctly handle split_physical_exergy and chemical_exergy options.

  • Fixed bugs in various component exergoeconomic balance and auxiliary equations.

  • Removed E_M, E_T or E_CH columns from result tables when not imported.

New features

  • Added evaluate_results() method to ExergoeconomicAnalysis for ranking components by cost improvement potential.

  • Added least-squares solver option (allow_singular=True) for handling singular cost matrices.

  • Added print_dependency_report() method for diagnosing singular matrix issues.

  • Added check_cost_balance() method for verifying cost balance closure.

Documentation

  • Added comprehensive exergoeconomic analysis documentation with workflow guide, cost input format, and result interpretation.

  • Added exergoeconomic analysis section to the API documentation.

  • Added exergoeconomic analysis example tutorial with manually defined costs.

Testing

  • Added 55 unit tests for the ExergoeconomicAnalysis class.

  • Added integration tests for ExergyAnalysis covering from_json and from_tespy workflows.

Examples

  • Reorganized example directory structure for exergy and exergoeconomic analysis.

  • Added exergoeconomic analysis example with JSON-based manual cost definitions.

Contributors

v0.0.4 (05.02.2026)

Bug fixes

  • Fixed problem with exergoeconomic balance equations check.

  • Fixed issue in heat exchanger auxiliary equations (aux_eqs).

  • Minor fixes in turbomachinery components.

New features

  • Added waterfall diagram visualization for exergy analysis results.

Examples

  • Added exergoeconomic analysis example for a heat pump system.

  • Updated heat pump example to latest TESPy API.

Contributors

v0.0.3 (31.10.2025)

Bug fixes

  • Turbine, Pump and Compressor now consider all losses from simulation done with Ebsilon.

  • Substances that are not fluid under ambient conditions are now better handled in exergy calculations.

New features

  • Exergoeconomic analysis of SimpleHeatExchanger is now supported.

Documentation

  • Improved documentation for the exergy and exergoeconomic analysis modules.

Developers

Supervision

  • Prof. Dr.-Ing. Fontina Petrakopoulou — Project Supervisor

v0.0.2 (01.07.2025)

Bug fixes

  • HeatExchanger and SimpleHeatExchanger correctly parsed from Ebsilon

Documentation

  • Improved documentation for the exergoeconomic analysis module

Developers

Supervision

  • Prof. Dr.-Ing. Fontina Petrakopoulou — Project Supervisor

v0.0.1 (24.06.2025)

Initial release of ExerPy.

The exergy analysis module is fully functional and allows for comprehensive exergy analysis of thermal systems.

The exergoeconomic analysis module is in an early stage and will be further developed and tested in future releases.

Developers

Supervision

  • Prof. Dr.-Ing. Fontina Petrakopoulou — Project Supervisor

Acknowledgements

This project incorporates code originally developed by Friederike Roßberg (@FriederikeTUB)