Skip to content

Commit 866cf5a

Browse files
committed
feat(materials): v0.3.1 refresh — +10 industry-current presets (additive)
Additive-only update. No existing preset or dataclass field modified, no existing test changed. Baseline 98 → 101 tests green. Added: - Membranes (+3): Gore-Select M820 (reinforced 18 µm), Nafion XL (reinforced 27.5 µm), Aquivion R79-02S (short-side-chain, 50 µm) - Anode catalysts (+3): Ir-black (Rozain 2016), IrOx-ATO (Sb-doped SnO2), Heraeus H2EL-IrO (commercial 2023) - Cathode catalysts (+2): Pt/C ultra-low 0.05 mg/cm², PtRu/C startup-tolerant - GDL/PTL (+2): Ti sintered powder (Mott 0.25 mm), Au-coated Ti sintered Rationale: audit found v0.3 presets were research-era; commercial 2023-2025 EC-stacks use ePTFE-reinforced membranes and low-loading Ir catalysts. New presets added alongside existing ones to preserve reproducibility. Refs: Goswami 2023 JPS 578, Rozain 2016 ACS Catal. 6, Bernt 2020 JES 167, Liu 2022 Nat. Catal. 5, Tao 2024 SusMat, RSC Energy Adv. 2026 D5YA00274E.
1 parent c5dec54 commit 866cf5a

3 files changed

Lines changed: 159 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,37 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · SemVer.
1111
- Vergleichs-Modus (2 Zellen/Stacks nebeneinander)
1212
- 2. Validation gegen experimentelle Paper-Kurve
1313

14+
## [0.3.1] — 2026-04-20
15+
16+
### Added
17+
- **Materials refresh** (`src/materials.py`) — 10 neue Presets, rein additiv
18+
(keine bestehenden Presets oder Felder geändert, keine Tests gebrochen):
19+
- **Membranen (+3):**
20+
- Gore-Select M820 (reinforced, 18 μm) — ePTFE-verstärkt,
21+
Industrie-Standard moderner EC-Stacks
22+
- Nafion XL (reinforced, 27.5 μm) — ePTFE-verstärkte Nafion-Variante
23+
- Aquivion R79-02S (50 μm, EW 790) — Short-side-chain PFSA
24+
- **Anoden-Katalysatoren (+3):**
25+
- Ir-black (Rozain 2016, 0.5 mg/cm²) — Low-loading Referenz
26+
- IrOx-ATO (Sb-doped SnO₂ Support, 0.3 mg/cm²) — moderner Ersatz für IrO₂-TiO₂
27+
- Heraeus H2EL-IrO (commercial 2023, 0.6 mg/cm²) — reduzierter Ir-Einsatz
28+
- **Kathoden-Katalysatoren (+2):**
29+
- Pt/C ultra-low (0.05 mg/cm²) — HER nicht PGM-limitiert
30+
- PtRu/C (startup-tolerant, 0.15 mg/cm²) — SU/SD-robust
31+
- **GDLs/PTLs (+2, anodenseitig):**
32+
- Ti sintered powder (Mott, 0.25 mm) — kommerzieller Sinter-PTL
33+
- Au-coated Ti sintered (0.25 mm) — Au-Coating schlägt Pt in Langzeit
34+
- **3 neue Tests** (total 101, alle grün): presence + basic sanity der neuen Presets
35+
36+
### References
37+
- Goswami et al. (2023) J. Power Sources 578 — Gore M820
38+
- Rozain et al. (2016) ACS Catal. 6(3), 1949–1957 — Ir-black low-loading
39+
- Oh et al. (2016) JACS 138; Liu et al. (2022) Nat. Catal. 5 — IrOx-ATO
40+
- Bernt et al. (2020) J. Electrochem. Soc. 167 — Pt/C ultra-low
41+
- Gazdzicki et al. (2020) Appl. Catal. B 265 — PtRu/C SU/SD
42+
- Tao et al. (2024) SusMat; Liu et al. (2018) JES 165(13);
43+
RSC Energy Advances (2026) D5YA00274E — Ti sintered PTL, Au-coating
44+
1445
## [0.3.0] — 2026-04-20
1546

1647
### Added
@@ -126,7 +157,8 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · SemVer.
126157
- Keine Multi-phase Flow
127158
- Nur 1 Validation-Datensatz (analytisch, noch nicht gegen Experiment)
128159

129-
[Unreleased]: https://github.com/Tools00/pem-ec-designer/compare/v0.3.0...HEAD
160+
[Unreleased]: https://github.com/Tools00/pem-ec-designer/compare/v0.3.1...HEAD
161+
[0.3.1]: https://github.com/Tools00/pem-ec-designer/compare/v0.3.0...v0.3.1
130162
[0.3.0]: https://github.com/Tools00/pem-ec-designer/compare/v0.2.0...v0.3.0
131163
[0.2.0]: https://github.com/Tools00/pem-ec-designer/compare/v0.1.0...v0.2.0
132164
[0.1.0]: https://github.com/Tools00/pem-ec-designer/releases/tag/v0.1.0

src/materials.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,33 @@ class MembraneSpec:
9090
ref="FumaTech Datasheet (2020)",
9191
valid_temp_k=(298.15, 373.15),
9292
),
93+
"Gore-Select M820 (reinforced)": MembraneSpec(
94+
name="Gore-Select M820 (reinforced)",
95+
thickness_m=18e-6,
96+
conductivity_sm=10.0,
97+
water_uptake=22.0,
98+
ewt_g_mol=800.0,
99+
ref="W. L. Gore PEM Water Electrolysis Datasheet (2024); Goswami et al. (2023) J. Power Sources 578 — ePTFE-reinforced, industrial EC-stack standard",
100+
valid_temp_k=(298.15, 363.15),
101+
),
102+
"Nafion XL (reinforced)": MembraneSpec(
103+
name="Nafion XL (reinforced)",
104+
thickness_m=27.5e-6,
105+
conductivity_sm=9.0,
106+
water_uptake=22.0,
107+
ewt_g_mol=1100.0,
108+
ref="Chemours Nafion XL Datasheet (2023); Shi et al. (2016) J. Membrane Sci. 517 — ePTFE-reinforced variant",
109+
valid_temp_k=(298.15, 363.15),
110+
),
111+
"Aquivion R79-02S": MembraneSpec(
112+
name="Aquivion R79-02S",
113+
thickness_m=50e-6,
114+
conductivity_sm=15.0,
115+
water_uptake=20.0,
116+
ewt_g_mol=790.0,
117+
ref="Solvay Specialty Polymers Datasheet (2021); Skulimowska et al. (2014) IJHE 39 — short-side-chain PFSA, next-gen",
118+
valid_temp_k=(298.15, 393.15),
119+
),
93120
}
94121

95122

@@ -148,6 +175,33 @@ class CatalystSpec:
148175
activation_energy_j_mol=56_000.0,
149176
ref="Siracusano et al. (2017), Appl. Catal. B 219; E_a: support-stabilized IrO₂",
150177
),
178+
"Ir-black (Rozain 2016)": CatalystSpec(
179+
name="Ir-black (Rozain 2016)",
180+
side="anode",
181+
j0_a_m2=20.0,
182+
alpha=0.5,
183+
loading_mg_cm2=0.5,
184+
activation_energy_j_mol=55_000.0,
185+
ref="Rozain et al. (2016) ACS Catal. 6(3), 1949–1957 — unsupported Ir, low-loading reference",
186+
),
187+
"IrOx-ATO (Sb-doped SnO2 support)": CatalystSpec(
188+
name="IrOx-ATO (Sb-doped SnO2 support)",
189+
side="anode",
190+
j0_a_m2=15.0,
191+
alpha=0.5,
192+
loading_mg_cm2=0.3,
193+
activation_energy_j_mol=58_000.0,
194+
ref="Oh et al. (2016) JACS 138, 12552; Liu et al. (2022) Nat. Catal. 5 — replaces IrO2-TiO2 as modern support",
195+
),
196+
"Heraeus H2EL-IrO (commercial 2023)": CatalystSpec(
197+
name="Heraeus H2EL-IrO (commercial 2023)",
198+
side="anode",
199+
j0_a_m2=30.0,
200+
alpha=0.5,
201+
loading_mg_cm2=0.6,
202+
activation_energy_j_mol=53_000.0,
203+
ref="Heraeus Precious Metals Product Release (2023) — reduced-Ir commercial catalyst, ~0.3 gIr/kW",
204+
),
151205
}
152206

153207

@@ -179,6 +233,24 @@ class CatalystSpec:
179233
activation_energy_j_mol=22_000.0,
180234
ref="Huang et al. (2015), Science 348(6240); E_a: Pt-alloy HER",
181235
),
236+
"Pt/C ultra-low (0.05 mg/cm²)": CatalystSpec(
237+
name="Pt/C ultra-low (0.05 mg/cm²)",
238+
side="cathode",
239+
j0_a_m2=0.9e3,
240+
alpha=0.5,
241+
loading_mg_cm2=0.05,
242+
activation_energy_j_mol=25_000.0,
243+
ref="Bernt et al. (2020) J. Electrochem. Soc. 167 — HER is not PGM-limited, loading can drop 10×",
244+
),
245+
"PtRu/C (startup-tolerant)": CatalystSpec(
246+
name="PtRu/C (startup-tolerant)",
247+
side="cathode",
248+
j0_a_m2=1.2e3,
249+
alpha=0.5,
250+
loading_mg_cm2=0.15,
251+
activation_energy_j_mol=23_000.0,
252+
ref="Gazdzicki et al. (2020) Appl. Catal. B 265 — reverse-current robustness at SU/SD",
253+
),
182254
}
183255

184256

@@ -214,6 +286,22 @@ class GDLSpec:
214286
thickness_m=0.5e-3,
215287
ref="Lettenmeier et al. (2016), Energy Environ. Sci. 9(8)",
216288
),
289+
"Ti sintered powder (Mott, 0.25 mm)": GDLSpec(
290+
name="Ti sintered powder (Mott, 0.25 mm)",
291+
side="anode",
292+
r_specific_ohm_m2=8e-6,
293+
porosity=0.4,
294+
thickness_m=0.25e-3,
295+
ref="Mott Corp. PTL Datasheet (2023); Tao et al. (2024) SusMat — sintered Ti powder, IFC ~80 mΩ·cm² uncoated",
296+
),
297+
"Au-coated Ti sintered (0.25 mm)": GDLSpec(
298+
name="Au-coated Ti sintered (0.25 mm)",
299+
side="anode",
300+
r_specific_ohm_m2=5e-7,
301+
porosity=0.4,
302+
thickness_m=0.25e-3,
303+
ref="Liu et al. (2018) JES 165(13); RSC Energy Advances (2026) D5YA00274E — Au coating outperforms Pt for long-term durability",
304+
),
217305
}
218306

219307
GDL_CATHODE: dict[str, GDLSpec] = {

tests/test_materials.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,41 @@ def test_name_helpers_return_nonempty_lists():
8585

8686
def test_membrane_names_match_dict_keys():
8787
assert set(membrane_names()) == set(MEMBRANES.keys())
88+
89+
90+
# ---------------- v0.3.1 additive presets ---------------- #
91+
92+
93+
def test_v031_new_membranes_present():
94+
for name in (
95+
"Gore-Select M820 (reinforced)",
96+
"Nafion XL (reinforced)",
97+
"Aquivion R79-02S",
98+
):
99+
assert name in MEMBRANES, f"missing v0.3.1 membrane: {name}"
100+
m = MEMBRANES[name]
101+
assert m.thickness_m > 0 and m.conductivity_sm > 0
102+
assert m.ref, f"{name}: reference required"
103+
104+
105+
def test_v031_new_catalysts_present():
106+
for name in (
107+
"Ir-black (Rozain 2016)",
108+
"IrOx-ATO (Sb-doped SnO2 support)",
109+
"Heraeus H2EL-IrO (commercial 2023)",
110+
):
111+
assert name in CATALYSTS_ANODE, f"missing v0.3.1 anode catalyst: {name}"
112+
assert CATALYSTS_ANODE[name].activation_energy_j_mol > 0
113+
for name in ("Pt/C ultra-low (0.05 mg/cm\u00b2)", "PtRu/C (startup-tolerant)"):
114+
assert name in CATALYSTS_CATHODE, f"missing v0.3.1 cathode catalyst: {name}"
115+
assert CATALYSTS_CATHODE[name].activation_energy_j_mol > 0
116+
117+
118+
def test_v031_new_gdls_present():
119+
for name in (
120+
"Ti sintered powder (Mott, 0.25 mm)",
121+
"Au-coated Ti sintered (0.25 mm)",
122+
):
123+
assert name in GDL_ANODE, f"missing v0.3.1 anode GDL: {name}"
124+
g = GDL_ANODE[name]
125+
assert g.thickness_m > 0 and 0 < g.porosity < 1

0 commit comments

Comments
 (0)