@@ -3446,46 +3446,87 @@ def tf_cable_in_conduit_averaged_turn_geometry(
34463446
34473447 def tf_step_vertical_tape_averaged_turn_geometry (
34483448 self ,
3449- j_tf_wp ,
3450- dx_tf_turn_steel ,
3451- dx_tf_turn_insulation ,
3452- i_tf_sc_mat ,
3453- dx_tf_turn_general ,
3454- c_tf_turn ,
3455- i_dx_tf_turn_general_input ,
3456- i_dx_tf_turn_cable_space_general_input ,
3457- dx_tf_turn_cable_space_general ,
3458- layer_ins ,
3459- a_tf_wp_no_insulation ,
3460- dia_tf_turn_coolant_channel ,
3461- f_a_tf_turn_cable_space_extra_void ,
3462- ):
3463- """
3464- subroutine straight from Python, see comments in tf_averaged_turn_geom_wrapper
3465- Authors : J. Morris, CCFE
3466- Authors : S. Kahn, CCFE
3467- Setting the TF WP turn geometry for SC magnets from the number
3468- the current per turn.
3469- This calculation has two purposes, first to check if a turn can exist
3470- (positive cable space) and the second to provide its dimensions,
3471- areas and the (float) number of turns
3449+ j_tf_wp : float ,
3450+ dx_tf_turn_insulation : float ,
3451+ dx_tf_turn_general : float ,
3452+ c_tf_turn : float ,
3453+ i_dx_tf_turn_general_input : bool ,
3454+ dia_tf_turn_coolant_channel : float ,
3455+ c_tf_coil : float ,
3456+ a_tf_wp_no_insulation : float ,
3457+ ) -> tuple [
3458+ float , # dr_tf_turn
3459+ float , # dx_tf_turn
3460+ float , # c_tf_turn
3461+ float , # n_tf_coil_turns
3462+ float , # dr_tf_turn_stabiliser
3463+ float , # dx_tf_turn_stabiliser
3464+ float , # x_tf_turn_coolant_channel_centre
3465+ float , # dr_tf_turn_tape_stack
3466+ float , # dx_tf_turn_tape_stack
3467+ float , # a_tf_turn_tape_stack
3468+ float , # a_tf_turn_insulation
3469+ float , # a_tf_turn_stabiliser
3470+ ]:
34723471 """
3472+ Calculate the integer-turn geometry for TF coil turns using a vertical
3473+ stacked tape (REBCO-style) conductor.
34733474
3474- # Turn dimension is a an input
3475- if i_dx_tf_turn_general_input :
3476- # Turn area [m2]
3477- a_tf_turn = dx_tf_turn_general ** 2
3475+ :param float dr_tf_wp_with_insulation:
3476+ Radial thickness of the winding pack including insulation (m).
3477+ :param float dx_tf_wp_insulation:
3478+ Thickness of winding-pack insulation (m).
3479+ :param float dx_tf_wp_insertion_gap:
3480+ Insertion gap thickness inside the winding pack (m).
3481+ :param int n_tf_wp_layers:
3482+ Number of radial layers (turn rows).
3483+ :param float dx_tf_wp_toroidal_min:
3484+ Minimum toroidal thickness of the winding pack (m).
3485+ :param int n_tf_wp_pancakes:
3486+ Number of toroidal pancakes per radial layer.
3487+ :param float c_tf_coil:
3488+ Total TF coil current (A).
3489+ :param float dx_tf_turn_insulation:
3490+ Thickness of the turn (intra-turn) insulation (m).
3491+ :param float dia_tf_turn_coolant_channel:
3492+ Diameter of the coolant channel inside the conductor (m).
34783493
3479- # Current per turn [A]
3480- c_tf_turn = a_tf_turn * j_tf_wp
3494+ :returns: Tuple containing:
3495+ - dr_tf_turn (float): Radial turn dimension (m).
3496+ - dx_tf_turn (float): Toroidal turn dimension (m).
3497+ - c_tf_turn (float): Current per turn (A).
3498+ - n_tf_coil_turns (float): Total number of turns in a TF coil
3499+ (float, integer-valued).
3500+ - dr_tf_turn_stabiliser (float): Radial dimension of conductor
3501+ stabiliser region (m).
3502+ - dx_tf_turn_stabiliser (float): Toroidal dimension of conductor
3503+ stabiliser region (m).
3504+ - x_tf_turn_coolant_channel_centre (float): Centre position of the
3505+ coolant channel measured from the inner face (m).
3506+ - dr_tf_turn_tape_stack (float): Width of the tape stack in the
3507+ radial direction (m).
3508+ - dx_tf_turn_tape_stack (float): Height of the tape stack in the
3509+ toroidal direction (m).
3510+ - a_tf_turn_tape_stack (float): Cross-sectional area of the tape
3511+ stack per turn (m^2).
3512+ :rtype: tuple[float, float, float, float, float, float, float, float, float, float]
34813513
3482- # Turn cable dimension is an input
3483- elif i_dx_tf_turn_cable_space_general_input :
3484- # Turn squared dimension [m]
3485- dx_tf_turn_general = dx_tf_turn_cable_space_general + 2.0e0 * (
3486- dx_tf_turn_insulation + dx_tf_turn_steel
3487- )
3514+ :notes:
3515+ - Assumes rectangular turns and places the coolant channel near the
3516+ bottom of the conductor with a small clearance from the tape stack.
3517+ - Basic consistency checks are emitted via logger.error() if
3518+ calculated dimensions are non-positive or if the coolant channel
3519+ conflicts with the conductor geometry.
3520+
3521+ :references:
3522+ - E. Nasr, S. C. Wimbush, P. Noonan, P. Harris, R. Gowland, and A. Petrov,
3523+ “The magnetic cage,” Philosophical Transactions of the Royal Society A Mathematical Physical and Engineering Sciences,
3524+ vol. 382, no. 2280, Aug. 2024, doi: https://doi.org/10.1098/rsta.2023.0407.
3525+
3526+ """
34883527
3528+ # Turn dimension is a an input
3529+ if i_dx_tf_turn_general_input :
34893530 # Turn area [m2]
34903531 a_tf_turn = dx_tf_turn_general ** 2
34913532
@@ -3504,105 +3545,89 @@ def tf_step_vertical_tape_averaged_turn_geometry(
35043545
35053546 # Square turn assumption
35063547 dr_tf_turn = dx_tf_turn_general
3548+
3549+ if dr_tf_turn <= (2.0e0 * dx_tf_turn_insulation ):
3550+ logger .error (
3551+ "Negative cable space dimension; reduce conduit thicknesses or raise c_tf_turn. "
3552+ f"{ dr_tf_turn = } { dx_tf_turn_insulation = } "
3553+ )
3554+
35073555 dx_tf_turn = dx_tf_turn_general
35083556
3509- # See derivation in the following document
3510- # k:\power plant physics and technology\process\hts\hts coil module for process.docx
3511- t_conductor = (
3512- - layer_ins + np . sqrt ( layer_ins ** 2 + 4.0e00 * a_tf_turn )
3513- ) / 2 - 2.0e0 * dx_tf_turn_insulation
3557+ if dx_tf_turn <= ( 2.0e0 * dx_tf_turn_insulation ):
3558+ logger . error (
3559+ "Negative cable space dimension; reduce conduit thicknesses or raise c_tf_turn. "
3560+ f" { dx_tf_turn = } { dx_tf_turn_insulation = } "
3561+ )
35143562
35153563 # Total number of turns per TF coil (not required to be an integer)
35163564 n_tf_coil_turns = a_tf_wp_no_insulation / a_tf_turn
35173565
3518- # Area of inter-turn insulation: single turn [m2]
3519- a_tf_turn_insulation = a_tf_turn - t_conductor ** 2
3520-
3521- # NOTE: Fortran has a_tf_turn_cable_space_no_void as an intent(out) variable that was outputting
3522- # into tfcoil_variables.a_tf_turn_cable_space_no_void. The local variable, however, appears to
3523- # initially hold the value of tfcoil_variables.a_tf_turn_cable_space_no_void despite not being
3524- # intent(in). I have replicated this behaviour in Python for now.
3525- a_tf_turn_cable_space_no_void = copy .copy (
3526- tfcoil_variables .a_tf_turn_cable_space_no_void
3527- )
3528-
3529- # ITER like turn structure
3530- if i_tf_sc_mat != 6 :
3531- # Radius of rounded corners of cable space inside conduit [m]
3532- radius_tf_turn_cable_space_corners = dx_tf_turn_steel * 0.75e0
3533-
3534- # Dimension of square cable space inside conduit [m]
3535- dx_tf_turn_cable_space_average = t_conductor - 2.0e0 * dx_tf_turn_steel
3566+ # Current per turn [A/turn]
3567+ c_tf_turn = c_tf_coil / n_tf_coil_turns
35363568
3537- # Cross-sectional area of cable space per turn
3538- # taking account of rounded inside corners [m2]
3539- a_tf_turn_cable_space_no_void = (
3540- dx_tf_turn_cable_space_average ** 2
3541- - (4.0e0 - np .pi ) * radius_tf_turn_cable_space_corners ** 2
3542- )
3569+ # Radial and toroidal dimension of conductor region containing tape stack and cooling pipe [m]
3570+ dr_tf_turn_stabiliser = dr_tf_turn - 2.0e0 * dx_tf_turn_insulation
3571+ dx_tf_turn_stabiliser = dx_tf_turn - 2.0e0 * dx_tf_turn_insulation
35433572
3544- # Calculate the true effective cable space by taking away the cooling
3545- # channel and the extra void fraction
3573+ # Place coolant channel at bottom of turn with a gap equal to 10% of conductor height
3574+ x_tf_turn_coolant_channel_centre = (
3575+ dx_tf_turn_insulation
3576+ + (0.1 * dx_tf_turn_stabiliser )
3577+ + (dia_tf_turn_coolant_channel / 2 )
3578+ )
35463579
3547- a_tf_turn_cable_space_effective = (
3548- a_tf_turn_cable_space_no_void
3549- -
3550- # Coolant channel area
3551- (
3552- (np .pi / 4.0e0 )
3553- * dia_tf_turn_coolant_channel
3554- * dia_tf_turn_coolant_channel
3555- )
3556- # Additional void area deduction
3557- - (a_tf_turn_cable_space_no_void * f_a_tf_turn_cable_space_extra_void )
3580+ # Check to make sure coolant channel leaves some gap to the tape stack
3581+ if x_tf_turn_coolant_channel_centre > (dx_tf_turn_stabiliser / 2 ) - (
3582+ 0.1 * dx_tf_turn_stabiliser
3583+ ) - (dia_tf_turn_coolant_channel / 2 ):
3584+ logger .error (
3585+ "Coolant channel too big for turn conductor dimension; reduce coolant channel diameter or increase turn dimensions."
3586+ f"{ x_tf_turn_coolant_channel_centre = } { dx_tf_turn_stabiliser = } "
35583587 )
35593588
3560- f_a_tf_turn_cable_space_cooling = 1 - (
3561- a_tf_turn_cable_space_effective / a_tf_turn_cable_space_no_void
3562- )
3589+ # Width of the tape stack allows for 10% of copper stabiliser on each side
3590+ dr_tf_turn_tape_stack = dr_tf_turn_stabiliser * 0.8
35633591
3564- if a_tf_turn_cable_space_no_void <= 0.0e0 :
3565- if t_conductor < 0.0e0 :
3566- logger .error (
3567- f"Negative cable space dimension. { a_tf_turn_cable_space_no_void = } "
3568- f"{ dx_tf_turn_cable_space_average = } "
3569- )
3570- else :
3571- logger .error (
3572- "Cable space area problem; artificially set rounded corner radius to 0. "
3573- f"{ a_tf_turn_cable_space_no_void = } { dx_tf_turn_cable_space_average = } "
3574- )
3575- radius_tf_turn_cable_space_corners = 0.0e0
3576- a_tf_turn_cable_space_no_void = dx_tf_turn_cable_space_average ** 2
3592+ # Bottom of tape stack starts at the centre of the turn and allows for 10% of conductor height above
3593+ dx_tf_turn_tape_stack = (dx_tf_turn / 2 ) - (
3594+ dx_tf_turn_insulation + (0.1 * dx_tf_turn_stabiliser )
3595+ )
35773596
3578- # Cross-sectional area of conduit jacket per turn [m2 ]
3579- a_tf_turn_steel = t_conductor ** 2 - a_tf_turn_cable_space_no_void
3597+ # Cross-sectional area of tape stack per turn [m² ]
3598+ a_tf_turn_tape_stack = dr_tf_turn_tape_stack * dx_tf_turn_tape_stack
35803599
3581- # REBCO turn structure
3582- elif i_tf_sc_mat == 6 :
3583- # Diameter of circular cable space inside conduit [m]
3584- dx_tf_turn_cable_space_average = t_conductor - 2.0e0 * dx_tf_turn_steel
3600+ # Area of inter- turn insulation: single turn [m²]
3601+ a_tf_turn_insulation = ( dr_tf_turn * dx_tf_turn ) - (
3602+ dr_tf_turn_stabiliser * dx_tf_turn_stabiliser
3603+ )
35853604
3586- # Cross-sectional area of conduit jacket per turn [m2]
3587- a_tf_turn_steel = t_conductor ** 2 - a_tf_turn_cable_space_no_void
3605+ # Area of stabiliser region per turn [m²]
3606+ a_tf_turn_stabiliser = (
3607+ dr_tf_turn_stabiliser * dx_tf_turn_stabiliser
3608+ - a_tf_turn_tape_stack
3609+ - (np .pi / 4.0e0 )
3610+ * dia_tf_turn_coolant_channel
3611+ * dia_tf_turn_coolant_channel
3612+ )
35883613
35893614 return (
3590- a_tf_turn_cable_space_no_void ,
3591- a_tf_turn_steel ,
3592- a_tf_turn_insulation ,
3593- n_tf_coil_turns ,
3594- dx_tf_turn_general ,
3595- c_tf_turn ,
3596- dx_tf_turn_general ,
35973615 dr_tf_turn ,
35983616 dx_tf_turn ,
3599- t_conductor ,
3600- radius_tf_turn_cable_space_corners ,
3601- dx_tf_turn_cable_space_average ,
3602- a_tf_turn_cable_space_effective ,
3603- f_a_tf_turn_cable_space_cooling ,
3617+ c_tf_turn ,
3618+ n_tf_coil_turns ,
3619+ dr_tf_turn_stabiliser ,
3620+ dx_tf_turn_stabiliser ,
3621+ x_tf_turn_coolant_channel_centre ,
3622+ dr_tf_turn_tape_stack ,
3623+ dx_tf_turn_tape_stack ,
3624+ a_tf_turn_tape_stack ,
3625+ a_tf_turn_insulation ,
3626+ a_tf_turn_stabiliser ,
36043627 )
36053628
3629+ # -------------
3630+
36063631 def superconducting_tf_coil_areas_and_masses (self ):
36073632 # Mass of case [kg]
36083633 # ***
0 commit comments