Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7081a1e
Refactor superconducting model parameters to use SuperconductorModel …
chris-ashe Jun 12, 2026
7662158
Restrict TF coil turn calculations to cable superconductors only
chris-ashe Jun 12, 2026
2a3f79a
Initialize conductor parameters in SuperconductingTFData with default…
chris-ashe Jun 12, 2026
b8ae8e9
Refactor CROCOSuperconductingTFCoil to streamline superconductor prop…
chris-ashe Jun 12, 2026
1706b77
Refactor CROCOSuperconductingTFCoil to optimize critical current calc…
chris-ashe Jun 12, 2026
07d2cd2
Enhance TF coil plots by adding critical current density and field in…
chris-ashe Jun 12, 2026
7dcd5d5
Add output for peak inboard toroidal field with ripple in Superconduc…
chris-ashe Jun 12, 2026
cad3136
Add copper area calculations and update related attributes in CROCOSu…
chris-ashe Jun 12, 2026
bda7153
Refactor CROCOSuperconductingTFCoil to remove unused helium area calc…
chris-ashe Jun 12, 2026
eed150b
Refactor CROCOSuperconductingTFCoil to update conductor area calculat…
chris-ashe Jun 12, 2026
d38bb9d
Refactor TF coil variables to rename conductor width to conduit full …
chris-ashe Jun 12, 2026
08761da
Refactor SuperconductingTFData and related tests to rename conductor …
chris-ashe Jun 12, 2026
39ab432
Refactor TFData and SuperconductingTFCoil to clarify mass calculation…
chris-ashe Jun 12, 2026
4b5b7d9
Update tests for ST to use croco turn type for tapes
chris-ashe Jun 15, 2026
e43933b
Add strain calculation and superconductor temperature margin logic in…
chris-ashe Jun 15, 2026
aa1bf3c
Add mapping for obsolete variable 't_conductor' to 'dx_tf_turn_condui…
chris-ashe Jun 15, 2026
889003a
Remove outdated comments regarding critical current density in CICCSu…
chris-ashe Jun 15, 2026
bd1a013
Refactor code structure for improved readability and maintainability
chris-ashe Jun 15, 2026
e3addbc
Enhance CICC and CroCo TF coil area calculations and add new data str…
chris-ashe Jun 16, 2026
919f709
Update test values to try and align with previous solution
chris-ashe Jun 22, 2026
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
15 changes: 3 additions & 12 deletions process/core/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,9 @@ def __post_init__(self):
"crane_arm_h": InputVariable("buildings", float, range=(1.0, 100.0)),
"crane_clrnc_h": InputVariable("buildings", float, range=(0.0, 10.0)),
"crane_clrnc_v": InputVariable("buildings", float, range=(0.0, 10.0)),
"dx_tf_croco_strand_copper": InputVariable("rebco", float, range=(0.001, 0.1)),
"dx_tf_croco_strand_copper": InputVariable(
"superconducting_tfcoil", float, range=(0.001, 0.1)
),
"cryomag_h": InputVariable("buildings", float, range=(1.0, 100.0)),
"cryomag_l": InputVariable("buildings", float, range=(10.0, 1000.0)),
"cryomag_w": InputVariable("buildings", float, range=(10.0, 1000.0)),
Expand Down Expand Up @@ -673,17 +675,6 @@ def __post_init__(self):
"superconducting_tfcoil",
float,
range=(1e-08, 0.0001),
additional_actions=lambda _n, rt, _i, _c: (
rt <= 1e-6
or warn(
(
"the relationship between REBCO layer thickness and current density is not linear."
"REBCO layer thicknesses > 1um should be considered an aggressive extrapolation of"
"current HTS technology and any results must be considered speculative."
),
stacklevel=1,
)
),
),
"redun_vacp": InputVariable("costs", float, range=(0.0, 100.0)),
"residual_sig_hoop": InputVariable("cs_fatigue", float, range=(0.0, 1000000000.0)),
Expand Down
3 changes: 2 additions & 1 deletion process/core/io/obsolete_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"thkwp": "dr_tf_wp_with_insulation",
"leni": "dx_tf_turn_cable_space_average",
"leno": "t_turn",
"conductor_width": "t_conductor",
"conductor_width": "dx_tf_turn_conduit_full_average",
Comment thread
chris-ashe marked this conversation as resolved.
"deltf": "dr_tf_shld_gap",
"ddwi": "dr_vv_outboard",
"pnuccp": "pnuc_cp",
Expand Down Expand Up @@ -457,6 +457,7 @@
"dr_hts_tape": "dr_tf_hts_tape",
"coppera_m2_max": "tf_coppera_m2_max",
"f_ster_div_single": None,
"t_conductor": "dx_tf_turn_conduit_full_average",
}

OBS_VARS_HELP = {
Expand Down
4 changes: 4 additions & 0 deletions process/core/io/plot/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -7498,6 +7498,8 @@ def _pack_strands_rectangular_with_obstacles(
f"Critical field at zero \ntemperature and strain: {mfile.get('b_tf_superconductor_critical_zero_temp_strain', scan=scan):.4f} T\n"
f"Critical temperature at \nzero field and strain: {mfile.get('temp_tf_superconductor_critical_zero_field_strain', scan=scan):.4f} K\n"
f"Temperature at conductor: {mfile.get('tftmp', scan=scan):.4f} K\n"
f"Field at conductor: {mfile.get('b_tf_inboard_peak_with_ripple', scan=scan):.4f} T\n"
f"Superconductor critical current density at \noperating conditions: {mfile.get('j_tf_superconductor_critical', scan=scan):.2e} A/m$^2$\n"
f"$I_{{\\text{{TF,turn critical}}}}$: {mfile.get('c_turn_cables_critical', scan=scan):,.2f} A\n"
f"$I_{{\\text{{TF,turn}}}}$: {mfile.get('c_tf_turn', scan=scan):,.2f} A\n"
f"Critcal current ratio: {mfile.get('f_c_tf_turn_operating_critical', scan=scan):,.4f}\n"
Expand Down Expand Up @@ -7776,6 +7778,8 @@ def plot_tf_croco_turn(axis: plt.Axes, fig, mfile: MFile, scan: int):
f"Critical field at zero \ntemperature and strain: {mfile.get('b_tf_superconductor_critical_zero_temp_strain', scan=scan):.4f} T\n"
f"Critical temperature at \nzero field and strain: {mfile.get('temp_tf_superconductor_critical_zero_field_strain', scan=scan):.4f} K\n"
f"Temperature at conductor: {mfile.get('tftmp', scan=scan):.4f} K\n"
f"Field at conductor: {mfile.get('b_tf_inboard_peak_with_ripple', scan=scan):.4f} T\n"
f"Superconductor critical current density at \noperating conditions: {mfile.get('j_tf_superconductor_critical', scan=scan):.2e} A/m$^2$\n"
f"$I_{{\\text{{TF,turn critical}}}}$: {mfile.get('c_turn_cables_critical', scan=scan):,.2f} A\n"
f"$I_{{\\text{{TF,turn}}}}$: {mfile.get('c_tf_turn', scan=scan):,.2f} A\n"
f"Critcal current ratio: {mfile.get('f_c_tf_turn_operating_critical', scan=scan):,.4f}\n"
Expand Down
44 changes: 20 additions & 24 deletions process/data_structure/superconducting_tf_coil_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,11 @@ class SuperconductingTFData:
tan_theta_coil: float = 0.0
"""Tan half toroidal angular extent of a single TF coil inboard leg"""

t_conductor_radial: float = 0.0
"""Conductor area radial and toroidal dimension (integer turn only) [m]"""
dr_tf_turn_conduit_full: float = 0.0
"""Radial thickness of the full conduit around the cable space (integer turn only) [m]"""

t_conductor_toroidal: float = 0.0
"""Conductor area radial and toroidal dimension (integer turn only) [m]"""
dx_tf_turn_conduit_full_toroidal: float = 0.0
"""Toroidal thickness of the full conduit around the cable space (integer turn only) [m]"""

dr_tf_turn_cable_space: float = 0.0
"""Cable area radial and toroidal dimension (integer turn only) [m]"""
Expand Down Expand Up @@ -246,31 +246,27 @@ class SuperconductingTFData:
a_tf_croco_strand: float = 0.0
"""Total area of a CroCo strand (m²)"""

# croco_strand

tf_croco_strand_area: float = 0.0
cur_tf_turn_croco_strand_critical: float = 0.0
"""Critical current in the TF turn CroCo strand (A)"""

# conductor
a_tf_turn_croco_cable_space_copper: float = 0.0
"""Area of the copper in the CroCo cable space of the TF turn (includes tapes,
outer tube and central copper) (m²)"""

a_tf_turn_copper_total: float = 0.0
"""Area of all copper in the TF turn [m²]"""

f_a_tf_turn_copper: float = 0.0
"""Fraction of the TF turn area that is copper"""

a_tf_turn_croco_cable_space_copper: float = None
conductor_copper_fraction: float = None
a_tf_turn_croco_copper_bar: float = None
a_tf_turn_croco_copper_bar: float = 0.0
"""Area of the central copper strand in the CroCo TF turn [m²]"""
a_tf_turn_croco_hastelloy: float = None
conductor_hastelloy_fraction: float = None
conductor_helium_area: float = None
conductor_helium_fraction: float = None
conductor_solder_area: float = None
conductor_solder_fraction: float = None
conductor_jacket_area: float = None
conductor_jacket_fraction: float = None
conductor_rebco_area: float = None
conductor_rebco_fraction: float = None
conductor_critical_current: float = None
conductor_area: float = None
"""Area of cable space inside jacket"""

f_a_tf_turn_superconductor: float = 0.0
"""Fraction of the TF turn area that is superconducting material"""

a_tf_turn_croco_hastelloy: float = 0.0
"""Area of the Hastelloy in the CroCo cable space of the TF turn (includes tapes and outer tube) (m²)"""

t1: float = 0.0

Expand Down
9 changes: 6 additions & 3 deletions process/data_structure/tfcoil_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ class TFData:
tfc_sidewall_is_fraction: bool = False
"""logical switch to make dx_tf_side_case_min a fraction of TF coil thickness (`casths_fraction`)"""

t_conductor: float = 0.0
"""Conductor (cable + steel conduit) area averaged dimension [m]"""
dx_tf_turn_conduit_full_average: float = 0.0
"""Average full width of the conduit surrounding the TF turn cable space [m]"""

dx_tf_turn_general: float = 0.0
"""TF coil turn edge length including turn insulation [m]
Expand Down Expand Up @@ -757,7 +757,10 @@ class TFData:
"""mass of ground-wall insulation layer per coil (kg/coil)"""

m_tf_coils_total: float = 0.0
"""total mass of the TF coils (kg)"""
"""Total mass of all TF coils (kg)"""

m_tf_coil: float = 0.0
"""Total mass of one TF coil (kg)"""

dx_tf_wp_primary_toroidal: float = 0.0
"""width of first step of winding pack (m)"""
Expand Down
10 changes: 5 additions & 5 deletions process/models/superconductors.py
Original file line number Diff line number Diff line change
Expand Up @@ -809,34 +809,34 @@ def hijc_rebco(
# finding A(T); constants based on a Newton polynomial fit to pubished data
a_t = a_0 + (u * temp_conductor**2) + (v * temp_conductor)

# Critical current density (A/m2)
# Critical current
# In the original formula bcrit must be > bmax to prevent NaNs.
# However, negative jcrit is permissible (I think).
# So when bcrit < bmax, I reverse the sign of the bracket,
# giving a negative but real value of jcrit.

if b_critical > b_conductor:
j_critical = (
cur_critical = (
(a_t / b_conductor)
* b_critical**b
* (b_conductor / b_critical) ** p
* (1 - b_conductor / b_critical) ** q
)
else:
j_critical = (
cur_critical = (
(a_t / b_conductor)
* b_critical**b
* (b_conductor / b_critical) ** p
* (b_conductor / b_critical - 1) ** q
)

# Jc times HTS area: default area is width 4mm times HTS layer thickness 1 um,
# Critical current times HTS area: default area is width 4mm times HTS layer thickness 1 um,
# divided by the tape area to provide engineering Jc per tape,!
# A scaling factor of 0.4 used to be applied below to assume the difference
# between tape stacks and CORC cable layouts.

j_critical = (
j_critical
cur_critical
* (dr_hts_tape * dx_hts_tape_rebco)
/ (dr_hts_tape * dx_hts_tape_total)
)
Expand Down
Loading
Loading