Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/python-app.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,18 @@ jobs:
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Update CITATION.cff
run: |
VERSION=${GITHUB_REF#refs/tags/v}
DATE=$(date +%Y-%m-%d)
sed -i "s/^version: .*/version: $VERSION/" CITATION.cff
sed -i "s/^date-released: .*/date-released: $DATE/" CITATION.cff
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
git add CITATION.cff
git commit -m "Update CITATION.cff to $VERSION" || true
git push origin HEAD:main

- name: Extract release notes
run: |
VERSION=${GITHUB_REF#refs/tags/v}
Expand Down
87 changes: 87 additions & 0 deletions .zenodo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"title": "FlixOpt: Progressive Flow System Optimization",
"description": "FlixOpt (Flexible, Low-entry, Investment, X-sector OPTimization) is a comprehensive framework for modeling and optimizing energy and material flow systems in Python. It enables optimization of diverse applications including district heating networks, industrial production lines, renewable energy portfolios, and supply chain logistics. Built on modern scientific Python stack (linopy and xarray), it provides a progressive enhancement approach allowing users to start with simple models and incrementally add complexity such as multi-period investments, stochastic scenarios, and custom constraints. The framework simplifies the creation of global constraints and switching objectives through its 'effect' concept. The framework is designed for researchers and engineers in energy systems, industrial process optimization, and operations research. \\n\\nCitation Notice: If you use FlixOpt in scientific work, please cite both this software version and the following publication: Panitz, F., Behrends, T., & Stange, P. (2022). Software-supported Investment Optimization for District Heating Supply Systems. In EuroSun 2022 Proceedings. DOI: 10.18086/eurosun.2022.04.07",
"version": "{{VERSION}}",
"license": "MIT",
"access_right": "open",
"upload_type": "software",
"creators": [
{
"name": "Bumann, Felix",
"affiliation": "SachsenEnergie AG",
"orcid": "https://orcid.org/0009-0006-0765-4789"
},
{
"name": "Panitz, Felix",
"affiliation": "Fraunhofer Research Institution for Energy Infrastructures and Geotechnologies IEG",
"orcid": "https://orcid.org/0009-0007-7030-6987"
},
{
"name": "Stange, Peter",
"affiliation": "Chair of Building Energy Systems and Heat Supply, TU Dresden",
"orcid": "https://orcid.org/0009-0001-6407-1495"
}
],
"contributors": [
{
"name": "Chair of Building Energy Systems and Heat Supply, TU Dresden",
"type": "HostingInstitution"
}
],
"keywords": [
"optimization",
"energy systems",
"energy flow modeling",
"linear programming",
"mixed-integer programming",
"MILP",
"operations research",
"python",
"district heating",
"renewable energy",
"multi-period optimization",
"investment optimization",
"capacity planning",
"energy modeling",
"sector coupling",
"energy transition",
"industrial processes",
"stochastic optimization",
"linopy",
"xarray"
],
"language": "eng",
"grants": [
{"id": "03KB159B"}
],
"related_identifiers": [
{
"identifier": "https://github.com/flixOpt/flixopt",
"relation": "isSupplementTo",
"scheme": "url"
},
{
"identifier": "10.18086/eurosun.2022.04.07",
"relation": "isDocumentedBy",
"scheme": "doi"
},
{
"identifier": "https://flixopt.github.io/flixopt/",
"relation": "isDocumentedBy",
"scheme": "url"
},
{
"identifier": "https://pypi.org/project/flixopt/",
"relation": "isIdenticalTo",
"scheme": "url"
}
],
"communities": [
{
"identifier": "energy"
},
{
"identifier": "zenodo"
}
]
}
Comment on lines 1 to 87
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

❓ Verification inconclusive

Verify Zenodo grants field supports funding source context; add ministry information.

The JSON syntax is correct and access_right field is now properly included—past issues are resolved. However, the PR objectives (comment from PStange) specifically request inclusion of funding information: "This project was founded by the German Federal Ministry for Economic Affairs and Energy (FKZ: 03KB159B)."

The grants field (lines 54–56) currently contains only the FKZ ID. The funding source (ministry name) is absent from all metadata fields, which does not satisfy the stated requirement.

To determine the best way to include the ministry information, I need to verify Zenodo's grants field structure. The standard Zenodo grants field typically accepts only an "id" subfield, but some versions may support additional metadata. Please check the Zenodo API documentation or metadata schema for your target Zenodo instance to confirm:

  1. Whether the grants field supports additional subfields (e.g., "title", "funder", or similar) beyond "id".
  2. If not, whether the ministry name should be prepended to the description field or added as a separate metadata entry.

Once confirmed, apply this fix (or similar) to include the ministry name. For example, if grants supports a funder field:

   "grants": [
-    {"id": "03KB159B"}
+    {"id": "03KB159B", "funder": "German Federal Ministry for Economic Affairs and Energy"}
   ],

Alternatively, if the description is the correct place, ensure it includes the funding source attribution.


Add German Federal Ministry attribution to description field.

The previous JSON syntax and access_right issues are resolved. However, the grants field accepts only OpenAIRE-formatted IDs—it cannot store additional funder context. Zenodo's .zenodo.json grants field supports only the "id" subfield.

The PR objective requests: "This project was founded by the German Federal Ministry for Economic Affairs and Energy (FKZ: 03KB159B)." This information is currently absent from the metadata. Following practice in other German-funded research deposits, the funding attribution should be added to the description field.

Update line 3 (description) to include the ministry name and grant code, for example:

"description": "FlixOpt is a comprehensive framework... [existing description text] ...Funded by the German Federal Ministry for Economic Affairs and Energy (FKZ: 03KB159B). Citation Notice: If you use FlixOpt...",
🤖 Prompt for AI Agents
In .zenodo.json lines 1-87, the description field is missing the requested
German Federal Ministry attribution; update the "description" value to append a
sentence stating the funding attribution exactly (e.g. "Funded by the German
Federal Ministry for Economic Affairs and Energy (FKZ: 03KB159B).") before the
existing "Citation Notice" text so the ministry name and grant code are included
in the metadata description.

5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,13 @@ If upgrading from v2.x, see the [v3.0.0 release notes](https://github.com/flixOp
### 📦 Dependencies

### 📝 Docs
- Added Zenodo DOI badge to README.md (placeholder, to be updated after first Zenodo release)

### 👷 Development
- Added Zenodo integration for automatic archival and citation
- Created `CITATION.cff` file for software citation following CFF 1.2.0 specification
- Created `.zenodo.json` file for Zenodo metadata configuration
- Repository now ready for DOI assignment upon next release

### 🚧 Known Issues

Expand Down
47 changes: 47 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
type: software
title: "flixopt"
version: 3.1.1
date-released: 2025-10-20
url: "https://github.com/flixOpt/flixopt"
repository-code: "https://github.com/flixOpt/flixopt"
license: MIT
abstract: "Progressive flow system optimization in Python. Build simple models quickly, then incrementally add multi-period planning, stochastic scenarios, and custom constraints without refactoring."
keywords:
- optimization
- energy systems
- energy flow modeling
- linear programming
- mixed-integer programming
- MILP
- operations research
- python
- district heating
- renewable energy
- multi-period optimization
- investment optimization
- capacity planning
- energy modeling
- sector coupling
- energy transition
- industrial processes
- stochastic optimization
- linopy
- xarray
authors:
- family-names: Bumann
given-names: Felix
email: felixbumann387@gmail.com
affiliation: "SachsenEnergie AG"
orcid: "https://orcid.org/0009-0006-0765-4789"
- family-names: Panitz
given-names: Felix
email: baumbude@googlemail.com
affiliation: "Fraunhofer Research Institution for Energy Infrastructures and Geotechnologies IEG"
orcid: "https://orcid.org/0009-0007-7030-6987"
- family-names: Stange
given-names: Peter
email: peter.stange@tu-dresden.de
affiliation: "Chair of Building Energy Systems and Heat Supply, TU Dresden"
orcid: "https://orcid.org/0009-0001-6407-1495"
19 changes: 15 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
# FlixOpt: Energy and Material Flow Optimization Framework
# FlixOpt: Progressive Flow System Optimization

<p align="center">
<b>F</b>lexible &nbsp;•&nbsp; <b>L</b>ow-entry &nbsp;•&nbsp; <b>I</b>nvestment &nbsp;•&nbsp; <b>X</b>-sector &nbsp;•&nbsp; <b>OPT</b>imization
</p>

<p align="center">
<i>Model more than costs</i> · <i>Easy to prototype</i> · <i>Based on dispatch</i> · <i>Sector coupling</i> · <i>Mathematical optimization</i>
</p>

[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg)](https://flixopt.github.io/flixopt/latest/)
[![Build Status](https://github.com/flixOpt/flixopt/actions/workflows/python-app.yaml/badge.svg)](https://github.com/flixOpt/flixopt/actions/workflows/python-app.yaml)
Expand All @@ -9,18 +17,18 @@
[![PyPI downloads](https://img.shields.io/pypi/dm/flixopt)](https://pypi.org/project/flixopt/)
[![GitHub last commit](https://img.shields.io/github/last-commit/flixOpt/flixopt)](https://github.com/flixOpt/flixopt/commits/main)
[![GitHub issues](https://img.shields.io/github/issues/flixOpt/flixopt)](https://github.com/flixOpt/flixopt/issues)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/flixOpt/flixopt/main.svg)](https://results.pre-commit.ci/latest/github/flixOpt/flixopt/main)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![Powered by linopy](https://img.shields.io/badge/powered%20by-linopy-blue)](https://github.com/PyPSA/linopy/)
[![Powered by xarray](https://img.shields.io/badge/powered%20by-xarray-blue)](https://xarray.dev/)
[![DOI](https://zenodo.org/badge/540378857.svg)](https://doi.org/10.5281/zenodo.17448623)
[![DOI](https://img.shields.io/badge/DOI-10.18086%2Feurosun.2022.04.07-blue)](https://doi.org/10.18086/eurosun.2022.04.07)
[![GitHub stars](https://img.shields.io/github/stars/flixOpt/flixopt?style=social)](https://github.com/flixOpt/flixopt/stargazers)

---

**FlixOpt is a Python framework for optimizing energy and material flow systems** - from district heating networks to industrial production lines, from renewable energy portfolios to supply chain logistics.
**FlixOpt is a Python framework for progressive flow system optimization** - from district heating networks to industrial production lines, from renewable energy portfolios to supply chain logistics.

**Start simple, scale complex:** Build a working optimization model in minutes, then progressively add detail - multi-period investments, stochastic scenarios, custom constraints - without rewriting your code.
Build simple models quickly, then incrementally add investment decision, multi-period planning, stochastic scenarios, and custom constraints without refactoring.

---

Expand Down Expand Up @@ -185,6 +193,9 @@ If FlixOpt supports your research or project, please cite:
- **Main Citation:** [DOI:10.18086/eurosun.2022.04.07](https://doi.org/10.18086/eurosun.2022.04.07)
- **Short Overview:** [DOI:10.13140/RG.2.2.14948.24969](https://doi.org/10.13140/RG.2.2.14948.24969)

To pinpoint which version you used in your work, please reference one of these doi's here:
- [![DOI](https://zenodo.org/badge/540378857.svg)](https://doi.org/10.5281/zenodo.17448623)

---

## 📄 License
Expand Down
4 changes: 3 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ hide:

<h1>flixOpt</h1>

<p class="tagline">Energy and Material Flow Optimization Framework</p>
<p class="backronym"><span class="letter">F</span>lexible · <span class="letter">L</span>ow-entry · <span class="letter">I</span>nvestment · <span class="letter">X</span>-sector · <span class="letter">OPT</span>imization</p>

<p class="backronym-desc"><em>Model more than costs</em> · <em>Easy to prototype</em> · <em>Based on dispatch</em> · <em>Sector coupling</em> · <em>Mathematical optimization</em></p>

<p>Model, optimize, and analyze complex energy systems with a powerful Python framework designed for flexibility and performance.</p>

Expand Down
24 changes: 22 additions & 2 deletions docs/stylesheets/extra.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* ============================================================================
flixOpt Custom Styling with Custom Palette
FlixOpt Custom Styling with Custom Palette
========================================================================= */

/* Root variables for easy customization */
Expand Down Expand Up @@ -526,10 +526,30 @@
.hero-section .tagline {
font-size: 1.5rem;
color: var(--md-default-fg-color--light);
margin-bottom: 2rem;
margin-bottom: 1rem;
font-weight: 300;
}

/* Backronym styling */
.hero-section .backronym {
font-size: 1.3rem;
font-weight: 500;
letter-spacing: 0.05em;
margin-bottom: 0.5rem;
}

.hero-section .backronym .letter {
color: var(--md-primary-fg-color);
font-weight: 700;
}

.hero-section .backronym-desc {
font-size: 0.95rem;
color: var(--md-default-fg-color--light);
margin-bottom: 2rem;
opacity: 0.85;
}

.hero-buttons {
display: flex;
gap: 1rem;
Expand Down
6 changes: 3 additions & 3 deletions mkdocs.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# flixOpt Documentation Configuration
# FlixOpt Documentation Configuration
# https://mkdocstrings.github.io/python/usage/configuration/docstrings/
# https://squidfunk.github.io/mkdocs-material/setup/

Expand Down Expand Up @@ -278,10 +278,10 @@ extra:
social:
- icon: fontawesome/brands/github
link: https://github.com/flixOpt/flixopt
name: flixOpt on GitHub
name: FlixOpt on GitHub
- icon: fontawesome/brands/python
link: https://pypi.org/project/flixopt/
name: flixOpt on PyPI
name: FlixOpt on PyPI

analytics:
provider: google
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "flixopt"
dynamic = ["version"]
description = "Vector based energy and material flow optimization framework in Python."
description = "Progressive flow system optimization in Python - start simple, scale to complex."
readme = "README.md"
requires-python = ">=3.10"
license = "MIT"
Expand Down