Skip to content

Reject zero-thickness superconducting TF at input validation - #4535

Open
dallonby wants to merge 1 commit into
ukaea:mainfrom
dallonby:fix/zero-thickness-tf-validation
Open

Reject zero-thickness superconducting TF at input validation#4535
dallonby wants to merge 1 commit into
ukaea:mainfrom
dallonby:fix/zero-thickness-tf-validation

Conversation

@dallonby

Copy link
Copy Markdown

Closes #4534

Overview

Adds a check_process validation 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, raise ProcessValidationError when i_tf_sup is superconducting, neither ixc 13 nor ixc 140 is active, and dr_tf_inboard <= 0. The message tells the user the three ways to fix their file. Stellarators (istell != 0, which calculate dr_tf_inboard during the model run) and IFE are excluded.
  • New 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 run init_process on minimal input snippets (e.g. just epsvmc = 1.0) and relied on config validation never examining the TF geometry; their shared fixture scaffold now sets a valid dr_tf_inboard so 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

  • Full unit suite: 847 passed / 4 skipped; integration suite: 21 passed / 1 skipped (Python 3.12, local).

Found during an independent audit of v3.4.2.

🤖 Generated with Claude Code

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>
@dallonby
dallonby requested a review from a team as a code owner August 15, 2026 13:43
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.

Superconducting TF silently loses all inboard thickness when dr_tf_wp_with_insulation is not an iteration variable

1 participant