Skip to content

Adding strahlenschutzverordnung waste limits#3898

Draft
shimwell wants to merge 4 commits intoopenmc-dev:developfrom
shimwell:adding-Strahlenschutzverordnung-waste-limits
Draft

Adding strahlenschutzverordnung waste limits#3898
shimwell wants to merge 4 commits intoopenmc-dev:developfrom
shimwell:adding-Strahlenschutzverordnung-waste-limits

Conversation

@shimwell
Copy link
Copy Markdown
Member

@shimwell shimwell commented Mar 24, 2026

Summary

  • Add German Strahlenschutzverordnung (StrlSchV) 2018 Anlage 4 clearance limits as predefined options
    for Material.waste_disposal_rating()
  • Support 8 clearance pathways covering unrestricted release, landfill disposal, incineration, metal recycling, soil, and building rubble
  • Clearance values are compared in Bq/g units (German convention), extending the existing Ci/m³ support for NRC/Fetter limits
  • When a depletion chain is provided, daughter nuclides already accounted for by a parent's '+' clearance value are excluded from the sum-of-fractions to avoid
    double-counting

Details

The German radiation protection regulation (StrlSchV 2018, Anlage 4, Tabelle 1) defines nuclide-specific clearance values for releasing radioactive materials from
regulatory control. A material passes clearance when the sum-of-fractions (activity/limit for each nuclide) is ≤ 1.0 — the same methodology already used by
waste_disposal_rating() for NRC and Fetter limits.

This PR adds 8 predefined limit sets, each corresponding to a column in Anlage 4:

Limit name Pathway Column
StrlSchV_unrestricted Unrestricted clearance of solid/liquid substances 3
StrlSchV_metal_recycling Metal scrap recycling 14
StrlSchV_landfill_100 Landfill disposal, facility receiving ≤100 Mg/a 8
StrlSchV_landfill_1000 Landfill disposal, facility receiving ≤1000 Mg/a 10
StrlSchV_incineration_100 Incineration, facility receiving ≤100 Mg/a 9
StrlSchV_incineration_1000 Incineration, facility receiving ≤1000 Mg/a 11
StrlSchV_soil Soil surface clearance 7
StrlSchV_rubble Building rubble clearance (>1000 Mg/a) 6

Usage:

rating = mat.waste_disposal_rating(limits='StrlSchV_unrestricted')                                                                                                      
breakdown = mat.waste_disposal_rating(limits='StrlSchV_metal_recycling', by_nuclide=True)                                                                               
 
Handling of '+' (daughter equilibrium) entries                                                                                                                          
                                                          
Some nuclides in Anlage 4 are listed with a '+' suffix (e.g., Cs-137+, Sr-90+), indicating that the clearance value accounts for daughter nuclides in secular           
equilibrium. This convention originates from the Euratom Basic Safety Standards (Council Directive 2013/59/Euratom, Annex VII), which the German StrlSchV implements.
The Euratom directive uses footnote markers rather than a '+' suffix but applies the same principlethe parent's clearance value already includes the dose            
contribution from equilibrium daughters.                  

Of the 91 '+'-only parents in the table, 47 have daughters that also appear as independent entries, which can lead to double-counting in the sum-of-fractions.          
 
An optional chain parameter allows providing a depletion chain to resolve this. When provided, the code walks the decay chain from each '+' parent using                
Nuclide.decay_modes and excludes all daughters whose half-life is shorter than the parent's (i.e., those in secular equilibrium):
                                                                                                                                                                        
from openmc.deplete import Chain                          
chain = Chain.from_xml('chain_endf_b8.0.xml')                                                                                                                           
rating = mat.waste_disposal_rating(limits='StrlSchV_unrestricted', chain=chain)                                                                                         
                                                                                                                                                                        
Without a chain, the calculation still works but may slightly overestimate the rating for materials containing both a '+' parent and its daughters.                     
                                                          
The clearance values were extracted from the official German legal database (https://www.gesetze-im-internet.de/strlschv_2018/anlage_4.html). A parser script           
(parse_strlschv.py) is attached to this PR for reproducibility and future updates to the regulation.
                  

Fixes # (issue)

# Checklist

- [x] I have performed a self-review of my own code
~- [ ] I have run [clang-format](https://docs.openmc.org/en/latest/devguide/styleguide.html#automatic-formatting) (version 18) on any C++ source files (if applicable)~
- [x] I have followed the [style guidelines](https://docs.openmc.org/en/latest/devguide/styleguide.html#python) for Python source files (if applicable)
- [x] I have made corresponding changes to the documentation (if applicable)
- [x] I have added tests that prove my fix is effective or that my feature works (if applicable)

@shimwell shimwell marked this pull request as draft March 27, 2026 14:27
@shimwell
Copy link
Copy Markdown
Member Author

shimwell commented Mar 27, 2026

Converting to draft as I think some more chain functions would be helpful before proceeding with this. So i shall make another PR for those

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants