Reject zero-thickness superconducting TF at input validation - #4535
Reject zero-thickness superconducting TF at input validation#4535dallonby wants to merge 1 commit into
Conversation
Build.calculate_radial_build only derives dr_tf_inboard from the winding pack and case thicknesses when dr_tf_wp_with_insulation (ixc = 140) is an iteration variable. If a user supplies the winding pack thickness as a plain input instead, dr_tf_inboard silently stays at its default of 0: the TF coil vanishes from the radial build and the run fails far downstream with unexplained radial-build inconsistency and multi-GPa TF stresses. Add a check_process validation that a superconducting TF has a positive dr_tf_inboard when neither ixc = 13 nor ixc = 140 is active, with an actionable message. Stellarators (which calculate dr_tf_inboard during the model run) and IFE are excluded. Test-suite change, per CONTRIBUTING: the parser tests in tests/unit/core/test_input.py run init_process on minimal input snippets and relied on config validation not examining the TF geometry; their fixture scaffold now sets a valid dr_tf_inboard. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4535 +/- ##
==========================================
+ Coverage 49.32% 49.34% +0.02%
==========================================
Files 150 150
Lines 29802 29804 +2
==========================================
+ Hits 14700 14707 +7
+ Misses 15102 15097 -5 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
@ukaea/process-model-review this may adversely effect the optimiser as it is currently allowed to search invalid regions of space I think? I suppose this is only checking init |
|
Obviously this needs to be fixed - maybe someone who has looked at this code more recently than me - @chris-ashe or someone? |
|
Init only. To be sure I wasn't reasoning my way past something, I instrumented it on the branch: 1 call to Two things I should say explicitly though. It is a deliberate behaviour change for scaffold inputs that rely on the |
Closes #4534
Overview
Adds a
check_processvalidation so that the silent zero-thickness-TF failure mode described in the issue becomes an immediate, actionable input error instead of an unexplained downstream solver failure.Changes
process/core/init.py: after the existing ixc 13/140 mutual-exclusion check, raiseProcessValidationErrorwheni_tf_supis superconducting, neither ixc 13 nor ixc 140 is active, anddr_tf_inboard <= 0. The message tells the user the three ways to fix their file. Stellarators (istell != 0, which calculatedr_tf_inboardduring the model run) and IFE are excluded.tests/unit/core/test_init.py: five tests — the rejected configuration, plus accepted configurations for explicit thickness, ixc 140 active, resistive TF, and stellarator.tests/unit/core/test_input.py(test-suite change, per CONTRIBUTING): the parser tests runinit_processon minimal input snippets (e.g. justepsvmc = 1.0) and relied on config validation never examining the TF geometry; their shared fixture scaffold now sets a validdr_tf_inboardso the parser tests keep testing parsing. No expected values change.Behavioural impact
Valid configurations are unaffected (all seven shipped regression inputs pass: they each set ixc 13/140 or
dr_tf_inboard, or are stellarator/IFE). The only newly-rejected configurations are ones that previously produced a machine with no inboard TF coil.Verification
Found during an independent audit of v3.4.2.
🤖 Generated with Claude Code