Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
19b7c1d
🔄 - Rename variable 'croco_od' to 'dia_croco_strand' for improved cla…
chris-ashe Oct 9, 2025
bb25644
🔄 - Rename 'croco_thick' to 'dx_croco_strand_copper' for improved cla…
chris-ashe Oct 9, 2025
9eb4e56
🔄 Rename 'rebco_thickness' to 'dx_hts_tape_rebco' for improved clarit…
chris-ashe Oct 9, 2025
f7dae9b
🔄 Rename 'copper_thick' to 'dx_hts_tape_copper' for improved clarity …
chris-ashe Oct 9, 2025
fd15dee
🔄 Rename 'hastelloy_thickness' to 'dx_hts_tape_hastelloy' for improve…
chris-ashe Oct 9, 2025
8a867b2
🔄 Rename 'stack_thickness' to 'dx_croco_strand_tape_stack' for improv…
chris-ashe Oct 9, 2025
34d44c5
🔄 Rename 'tape_thickness' to 'dx_hts_tape_total' for improved clarity…
chris-ashe Oct 9, 2025
6c360f7
🔄 Rename 'tape_width' to 'dr_hts_tape' for improved clarity and consi…
chris-ashe Oct 9, 2025
ece23f1
🔄 Rename 'tapes' to 'n_croco_strand_hts_tapes' for improved clarity a…
chris-ashe Oct 9, 2025
fd81380
🔄 Rename 'rebco_area' to 'a_croco_strand_hts_tapes' for improved clar…
chris-ashe Oct 9, 2025
74d609a
🔄 Rename 'hastelloy_area' to 'a_croco_strand_hastelloy' for improved …
chris-ashe Oct 9, 2025
3fcb686
🔄 Rename 'solder_area' to 'a_croco_strand_solder' and update referenc…
chris-ashe Oct 9, 2025
5779a8f
🔄 Rename 'croco_id' to 'dia_croco_strand_tape_region' for improved cl…
chris-ashe Oct 9, 2025
1a75269
:fire: Remove unused variable 'croco_area' and its references for cod…
chris-ashe Oct 9, 2025
b4bf60b
🔄 Rename 'copper_area' to 'a_croco_strand_copper_total' and update re…
chris-ashe Oct 9, 2025
4446a13
:sparkle: Add 'calculate_croco_cable_geometry' function to compute ge…
chris-ashe Oct 9, 2025
d6eea32
:sparkle: Add 'a_croco_strand' variable to store total area of CroCo …
chris-ashe Oct 9, 2025
19554cc
:memo: Create docs page
chris-ashe Oct 9, 2025
c28f6d6
🔄 Rename 'a_croco_strand_hts_tapes' to 'a_croco_strand_rebco' and upd…
chris-ashe Oct 9, 2025
ea5bbd8
:sparkle: Add 'plot_corc_cable_geometry' function to visualize CroCo …
chris-ashe Oct 13, 2025
f33df00
:sparkle: Update obsolete variable mappings in 'obsolete_vars.py' for…
chris-ashe Oct 13, 2025
5366813
:sparkle: Remove unused parameter 'dr_hts_tape' from 'calculate_croco…
chris-ashe Oct 14, 2025
2eb1c55
Incorporate new croco strand calc into old function
chris-ashe Oct 14, 2025
69ab458
Review request changes
chris-ashe Oct 15, 2025
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
68 changes: 68 additions & 0 deletions documentation/eng-models/superconductors.md
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,74 @@ The critical current density for a single REBCO strand can be seen below:

-------------------------


### CroCo Cable Geometry | `calculate_croco_cable_geometry()`

The geometry of a single CroCo cable is calculated as follows:

1. The diameter of the circular internal tape region is given by the outer copper diameter minus its thickness:

$$
\overbrace{D_{\text{cable,internal}}}^{\texttt{dia_croco_strand_tape_region}} = \overbrace{D_{\text{cable}}}^{\texttt{dia_croco_strand}} - \overbrace{dx_{\text{cable,copper}}}^{\texttt{dx_croco_strand_copper}}
$$

2. The total thickness of the HTS tape is found:

$$
\overbrace{dx_{\text{tape}}}^{\texttt{dx_hts_tape_total}} = \overbrace{dx_{\text{tape,REBCO}}}^{\texttt{dx_hts_tape_rebco}} + \overbrace{dx_{\text{tape,copper}}}^{\texttt{dx_hts_tape_copper}} + \overbrace{dx_{\text{tape,Hastelloy}}}^{\texttt{dx_hts_tape_hastelloy}}
$$

3. The width of the tape is scaled to be:

$$
\overbrace{dr_{\text{tape}}^2}^{\texttt{dr_hts_tape}} = \frac{D_{\text{cable,internal}}\times 0.00375}{0.0054}
$$

4. The height of the tape stack at the centre of the cable is found using the tape width and diameter of the region:

$$
\overbrace{dx_{\text{tape,stack}}}^{\texttt{dx_croco_strand_tape_stack}} = \sqrt{D_{\text{cable,internal}}^2-\overbrace{dr_{\text{tape}}^2}^{\texttt{dr_hts_tape}}}
$$

5. The number of tapes in the stack is thus:

$$
\overbrace{N_{\text{cable,tapes}}}^{\texttt{n_croco_strand_hts_tapes}} = \frac{dx_{\text{tape,stack}}}{dx_{\text{tape}}}
$$

6. The total copper area in the strand (from the copper sheath and inside the tapes) is:

$$
\overbrace{A_{\text{cable,copper}}}^{\texttt{a_croco_strand_copper_total}} = \left(\left(\pi D_{\text{cable}} dx_{\text{cable,copper}}\right) - \pi dx_{\text{cable,copper}}^2\right)\\
+ \left(dx_{\text{tape,copper}}dr_{\text{tape}}N_{\text{cable,tapes}}\right)
$$

7. The total Hastelloy area in the strand is:

$$
\overbrace{A_{\text{cable,Hastelloy}}}^{\texttt{a_croco_strand_hastelloy}} = dx_{\text{tape,Hastelloy}}dr_{\text{tape}}N_{\text{cable,tapes}}
$$

8. The area of the solder surrounding the tape stack is:

$$
\overbrace{A_{\text{cable,solder}}}^{\texttt{a_croco_strand_solder}} = \frac{\pi}{4}D_{\text{cable,internal}}^2 - dx_{\text{tape,stack}}dr_{\text{tape}}
$$

9. The total area of REBCO in the tape stack is:

$$
\overbrace{A_{\text{cable,REBCO}}}^{\texttt{a_croco_strand_hts_tapes}} = dx_{\text{tape,REBCO}}dr_{\text{tape}}N_{\text{cable,tapes}}
$$

10. The total area of the cable is thus:

$$
\overbrace{A_{\text{cable}}}^{\texttt{a_croco_strand}} = \frac{\pi}{4}D_{\text{cable}}^2
$$

------------------------

### Durham Ginzburg-Landau Model Derivation

The Durham scaling law [^6] is derived from the well-known equation for the volume pinning force $F_p$:
Expand Down
6 changes: 3 additions & 3 deletions process/data_structure/numerics.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,8 +333,8 @@
* (135) f_nd_impurity_electrons(13) : Xenon density fraction relative to electron density
* (136) f_nd_impurity_electrons(14) : Tungsten density fraction relative to electron density
* (137) fplhsep (f-value for equation 73)
* (138) rebco_thickness : thickness of REBCO layer in tape (m)
* (139) copper_thick : thickness of copper layer in tape (m)
* (138) dx_hts_tape_rebco : thickness of REBCO layer in tape (m)
* (139) dx_hts_tape_copper : thickness of copper layer in tape (m)
* (140) dr_tf_wp_with_insulation : radial thickness of TFC winding pack (m)
* (141) ftemp_croco_quench_max : TF coil quench temperature < temp_croco_quench_max (f-value for equation 74)
* (142) nd_plasma_separatrix_electron : electron density at separatrix [m-3]
Expand All @@ -353,7 +353,7 @@
* (155) pfusife : IFE input fusion power (MW) (ifedrv=3 only)
* (156) rrin : Input IFE repetition rate (Hz) (ifedrv=3 only)
* (157) fvs_cs_pf_total_ramp : F-value for available to required start up flux (con. 51)
* (158) croco_thick : Thickness of CroCo copper tube (m)
* (158) dx_croco_strand_copper : Thickness of CroCo copper tube (m)
* (159) ftoroidalgap : F-value for toroidalgap > dx_tf_inboard_out_toroidal constraint (con. 82)
* (160) f_avspace (f-value for equation 83)
* (161) fbeta_min (f-value for equation 84)
Expand Down
102 changes: 55 additions & 47 deletions process/data_structure/rebco_variables.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
rebco_thickness: float = None
dx_hts_tape_rebco: float = None
"""thickness of REBCO layer in tape (m) (`iteration variable 138`)"""

copper_thick: float = None
dx_hts_tape_copper: float = None
"""thickness of copper layer in tape (m) (`iteration variable 139`)"""

hastelloy_thickness: float = None
dx_hts_tape_hastelloy: float = None
"""thickness of Hastelloy layer in tape (m)"""

tape_width: float = None
dr_hts_tape: float = None
"""Mean width of tape (m)"""

tape_thickness: float = None
dx_hts_tape_total: float = None
"""thickness of tape, inc. all layers (hts, copper, substrate, etc.) (m)"""

croco_od: float = None
dia_croco_strand: float = None
"""Outer diameter of CroCo strand (m)"""

croco_id: float = None
"""Inner diameter of CroCo copper tube (m)"""
dia_croco_strand_tape_region: float = None
"""Inner diameter of CroCo strand tape region (m)"""

croco_thick: float = None
"""Thickness of CroCo copper tube (m) (`iteration variable 158`)"""
dx_croco_strand_copper: float = None
"""Thickness of CroCo strand copper tube (m) (`iteration variable 158`)"""

copper_rrr: float = None
"""residual resistivity ratio copper in TF superconducting cable"""
Expand All @@ -43,64 +43,72 @@
f_copperaoh_m2: float = None
"""f-value for constraint 88: CS coil current / copper area < copperA_m2_max"""

stack_thickness: float = None
dx_croco_strand_tape_stack: float = None
"""Width / thickness of tape stack in CroCo strand (m)"""

tapes: float = None
n_croco_strand_hts_tapes: float = None
"""Number of HTS tapes in CroCo strand"""

rebco_area: float = None
a_croco_strand_rebco: float = None
"""Area of REBCO in CroCo strand (m2)"""

copper_area: float = None
a_croco_strand_copper_total: float = None
"""Area of copper in CroCo strand (includes tapes and outer tube) (m2)"""

hastelloy_area: float = None
a_croco_strand_hastelloy: float = None
"""Area of Hastelloy in CroCo strand (m2)"""

solder_area: float = None
a_croco_strand_solder: float = None
"""Area of solder in CroCo strand (m2)"""

croco_area: float = None
a_croco_strand: float = None
"""Total area of a CroCo strand (m2)"""


def init_rebco_variables():
"""Initialise the REBCO variables"""
global rebco_thickness
global copper_thick
global hastelloy_thickness
global tape_width
global croco_od
global croco_id
global croco_thick
global dx_hts_tape_rebco
global dx_hts_tape_copper
global dx_hts_tape_hastelloy
global dr_hts_tape
global dia_croco_strand
global dia_croco_strand_tape_region
global dx_croco_strand_copper
global copper_rrr
global coppera_m2_max
global f_coppera_m2
global tape_thickness
global stack_thickness
global tapes
global rebco_area
global copper_area
global hastelloy_area
global solder_area
global croco_area
global dx_hts_tape_total
global dx_croco_strand_tape_stack
global n_croco_strand_hts_tapes
global a_croco_strand_rebco
global a_croco_strand_copper_total
global a_croco_strand_hastelloy
global a_croco_strand_solder
global a_croco_strand
global copperA_m2
global copperaoh_m2_max
global f_copperaoh_m2
global copperaoh_m2

rebco_thickness = 1.0e-6
copper_thick = 100.0e-6
hastelloy_thickness = 50.0e-6
tape_width = 4.0e-3
croco_od = 0.0
croco_id = 0.0
croco_thick = 2.5e-3
dx_hts_tape_rebco = 1.0e-6
dx_hts_tape_copper = 100.0e-6
dx_hts_tape_hastelloy = 50.0e-6
dr_hts_tape = 4.0e-3
dia_croco_strand = 0.0
dia_croco_strand_tape_region = 0.0
dx_croco_strand_copper = 2.5e-3
copper_rrr = 100.0
coppera_m2_max = 1.0e8
f_coppera_m2 = 1.0
tape_thickness = 6.5e-5
stack_thickness = 0.0
tapes = 0.0
rebco_area = 0.0
copper_area = 0.0
hastelloy_area = 0.0
solder_area = 0.0
croco_area = 0.0
dx_hts_tape_total = 6.5e-5
dx_croco_strand_tape_stack = 0.0
n_croco_strand_hts_tapes = 0.0
a_croco_strand_rebco = 0.0
a_croco_strand_copper_total = 0.0
a_croco_strand_hastelloy = 0.0
a_croco_strand_solder = 0.0
a_croco_strand = 0.0

copperA_m2 = 0.0
copperaoh_m2_max = 1.0e8
f_copperaoh_m2 = 1.0
Expand Down
12 changes: 6 additions & 6 deletions process/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ def __post_init__(self):
"copper_rrr": InputVariable(
data_structure.rebco_variables, float, range=(1.0, 10000.0)
),
"copper_thick": InputVariable(
"dx_hts_tape_copper": InputVariable(
data_structure.rebco_variables, float, range=(0.0, 0.001)
),
"copperaoh_m2": InputVariable(
Expand Down Expand Up @@ -417,7 +417,7 @@ def __post_init__(self):
"crane_clrnc_v": InputVariable(
data_structure.buildings_variables, float, range=(0.0, 10.0)
),
"croco_thick": InputVariable(
"dx_croco_strand_copper": InputVariable(
data_structure.rebco_variables, float, range=(0.001, 0.1)
),
"cryomag_h": InputVariable(
Expand Down Expand Up @@ -1057,7 +1057,7 @@ def __post_init__(self):
"n_ecrh_harmonic": InputVariable(
data_structure.current_drive_variables, float, range=(1.0, 10.0)
),
"hastelloy_thickness": InputVariable(
"dx_hts_tape_hastelloy": InputVariable(
data_structure.rebco_variables, float, range=(1e-08, 0.001)
),
"hccl": InputVariable(data_structure.buildings_variables, float, range=(0.0, 10.0)),
Expand Down Expand Up @@ -1448,7 +1448,7 @@ def __post_init__(self):
"reactor_wall_thk": InputVariable(
data_structure.buildings_variables, float, range=(0.25, 25.0)
),
"rebco_thickness": InputVariable(
"dx_hts_tape_rebco": InputVariable(
data_structure.rebco_variables,
float,
range=(1e-08, 0.0001),
Expand Down Expand Up @@ -1639,10 +1639,10 @@ def __post_init__(self):
"t_turn_tf_max": InputVariable(
data_structure.tfcoil_variables, float, range=(0.0, 1.0)
),
"tape_thickness": InputVariable(
"dx_hts_tape_total": InputVariable(
data_structure.rebco_variables, float, range=(0.0, 0.1)
),
"tape_width": InputVariable(
"dr_hts_tape": InputVariable(
data_structure.rebco_variables, float, range=(0.0, 0.1)
),
"tauee_in": InputVariable(
Expand Down
6 changes: 6 additions & 0 deletions process/io/obsolete_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,12 @@
"t_structural_vertical": "dz_cs_turn_conduit",
"t_cable_tf": "dx_tf_turn_cable_space_general",
"t_turn_tf": "dx_tf_turn_general",
"copper_thick": "dx_hts_tape_copper",
"croco_thick": "dx_croco_strand_copper",
"hastelloy_thickness": "dx_hts_tape_hastelloy",
"rebco_thickness": "dx_hts_tape_rebco",
"tape_thickness": "dx_hts_tape_total",
"tape_width": "dr_hts_tape",
}

OBS_VARS_HELP = {
Expand Down
84 changes: 84 additions & 0 deletions process/io/plot_proc.py
Comment thread
timothy-nunn marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -10695,6 +10695,90 @@ def plot_plasma_poloidal_pressure_contours(
axis.set_title("Plasma Poloidal Pressure Contours")


def plot_corc_cable_geometry(
axis,
dia_croco_strand: float,
dx_croco_strand_copper: float,
dr_hts_tape: float,
dx_croco_strand_tape_stack: float,
n_croco_strand_hts_tapes: int,
):
"""
Plot the geometry of a CroCo strand cable.

:param axis: The matplotlib axis to plot on.
:type axis: matplotlib.axes._axes.Axes
:param dia_croco_strand: Diameter of the CroCo strand (in meters).
:type dia_croco_strand: float
:param dx_croco_strand_copper: Thickness of the copper layer (in meters).
:type dx_croco_strand_copper: float
:param dr_hts_tape: Radius of the HTS tape stack (in meters).
:type dr_hts_tape: float
:param dx_croco_strand_tape_stack: Height of the HTS tape stack (in meters).
:type dx_croco_strand_tape_stack: float
:param n_croco_strand_hts_tapes: Number of HTS tape layers in the stack.
:type n_croco_strand_hts_tapes: int
"""
# Plot a circle with the given diameter and copper edges
circle = Circle(
(0, 0),
radius=(dia_croco_strand / 2) * 1000,
edgecolor="#B87333",
facecolor="#B87333",
linewidth=2,
label="Copper jacket",
)
axis.add_patch(circle)

# Plot an inner circle with copper edges
circle = Circle(
(0, 0),
radius=((dia_croco_strand / 2) - dx_croco_strand_copper) * 1000,
edgecolor="grey",
facecolor="grey",
linewidth=2,
label="Solder",
)
axis.add_patch(circle)

# Plot a rectangular tape stack in the middle
rect = Rectangle(
(-dr_hts_tape / 2 * 1000, -(dx_croco_strand_tape_stack / 2) * 1000),
width=dr_hts_tape * 1000,
height=dx_croco_strand_tape_stack * 1000,
edgecolor="blue",
facecolor="blue",
linewidth=2,
label="HTS Tape Stack",
)
axis.add_patch(rect)

# Slice the tape stack into n_croco_strand_hts_tapes layers
for i in range(int(n_croco_strand_hts_tapes)):
y_start = -(dx_croco_strand_tape_stack / 2) * 1000 + i * (
dx_croco_strand_tape_stack / n_croco_strand_hts_tapes * 1000
)
rect = Rectangle(
(-dr_hts_tape / 2 * 1000, y_start),
width=dr_hts_tape * 1000,
height=(dx_croco_strand_tape_stack / n_croco_strand_hts_tapes) * 1000,
edgecolor="black",
facecolor="blue",
linewidth=1,
)
axis.add_patch(rect)

axis.set_xlim(-dia_croco_strand * 0.75 * 1000, dia_croco_strand * 0.75 * 1000)
axis.set_ylim(-dia_croco_strand * 1000, dia_croco_strand * 1000)
axis.set_aspect("equal", adjustable="datalim")
axis.set_title("CroCo Strand Geometry")
axis.grid(True)
axis.set_xlabel("X-axis (mm)")
axis.set_ylabel("Y-axis (mm)")
axis.minorticks_on()
axis.legend(loc="upper right")


def main_plot(
fig0,
fig1,
Expand Down
Loading