diff --git a/documentation/development/standards.md b/documentation/development/standards.md index 3767925f44..2950200091 100644 --- a/documentation/development/standards.md +++ b/documentation/development/standards.md @@ -447,7 +447,7 @@ The unit declaration `_fpy` can be used to specify that it is the full-power yea ##### Forces -- Forces should start with the `forc_` prefix. +- Forces should start with the `force_` prefix. --------------------- diff --git a/process/data_structure/tfcoil_variables.py b/process/data_structure/tfcoil_variables.py index d1d56ed36f..48c0b765aa 100644 --- a/process/data_structure/tfcoil_variables.py +++ b/process/data_structure/tfcoil_variables.py @@ -174,8 +174,8 @@ """TF outboard leg current density (A/m2) (resistive coils only)""" -cforce: float = None -"""centering force on inboard leg (per coil) (N/m)""" +force_tf_coil_inboard_centering: float = None +"""Centering force on inboard leg (per coil) (N)""" cplen: float = None @@ -841,17 +841,17 @@ """max voltage across TF coil during quench (kV) (`iteration variable 52`)""" -vforce: float = None -"""vertical tension on inboard leg/coil (N)""" +force_tf_coil_inboard_vertical: float = None +"""Vertical tension on inboard leg of TF coil (N)""" -f_vforce_inboard: float = None +f_force_tf_coil_inboard_vertical: float = None """Fraction of the total vertical force taken by the TF inboard leg tension Not used for resistive `itart=1` (sliding joints) """ -vforce_outboard: float = None +force_tf_coil_outboard_vertical: float = None """Vertical tension on outboard leg/coil (N)""" @@ -1121,7 +1121,7 @@ def init_tfcoil_variables(): global i_dx_tf_turn_cable_space_general_input global acs global cdtfleg - global cforce + global force_tf_coil_inboard_centering global cplen global c_tf_turn global c_tf_turn_max @@ -1249,9 +1249,9 @@ def init_tfcoil_variables(): global temp_tf_cryo global n_tf_coil_turns global v_tf_coil_dump_quench_max_kv - global vforce - global f_vforce_inboard - global vforce_outboard + global force_tf_coil_inboard_vertical + global f_force_tf_coil_inboard_vertical + global force_tf_coil_outboard_vertical global f_a_tf_turn_cable_space_extra_void global voltfleg global vtfkv @@ -1337,7 +1337,7 @@ def init_tfcoil_variables(): t_turn_tf_max = 0.05 acs = 0.0 cdtfleg = 0.0 - cforce = 0.0 + force_tf_coil_inboard_centering = 0.0 cplen = 0.0 c_tf_turn = 7.0e4 c_tf_turn_max = 9.0e4 @@ -1484,9 +1484,9 @@ def init_tfcoil_variables(): temp_tf_cryo = 4.5 n_tf_coil_turns = 0.0 v_tf_coil_dump_quench_max_kv = 20.0 - vforce = 0.0 - f_vforce_inboard = 0.5 - vforce_outboard = 0.0 + force_tf_coil_inboard_vertical = 0.0 + f_force_tf_coil_inboard_vertical = 0.5 + force_tf_coil_outboard_vertical = 0.0 f_a_tf_turn_cable_space_extra_void = 0.4 voltfleg = 0.0 vtfkv = 0.0 diff --git a/process/input.py b/process/input.py index 91c7eebfc1..e9946448e2 100644 --- a/process/input.py +++ b/process/input.py @@ -733,7 +733,7 @@ def __post_init__(self): "f_beam_tritium": InputVariable( data_structure.current_drive_variables, float, range=(0.0, 1.0) ), - "f_vforce_inboard": InputVariable( + "f_force_tf_coil_inboard_vertical": InputVariable( data_structure.tfcoil_variables, float, range=(0.0, 1.0) ), "f_w": InputVariable(data_structure.stellarator_variables, float, range=(0.1, 1.0)), diff --git a/process/io/plot_proc.py b/process/io/plot_proc.py index d4c6a31258..a64aabd7b4 100644 --- a/process/io/plot_proc.py +++ b/process/io/plot_proc.py @@ -12434,6 +12434,177 @@ def plot_ion_charge_profile(axis, mfile_data, scan): axis.grid(which="both", linestyle="--", alpha=0.5) +def plot_tf_coil_forces(axis, mfile_data, scan, colour_scheme=1): + # Plot the TF coil poloidal cross-section + plot_tf_coils(axis, mfile_data, scan, colour_scheme) + + force_tf_coil_inboard_centering = mfile_data.data[ + "force_tf_coil_inboard_centering" + ].get_scan(scan) + force_tf_coil_inboard_vertical = mfile_data.data[ + "force_tf_coil_inboard_vertical" + ].get_scan(scan) + force_tf_coil_outboard_vertical = mfile_data.data[ + "force_tf_coil_outboard_vertical" + ].get_scan(scan) + z_tf_inside_half = mfile_data.data["z_tf_inside_half"].get_scan(scan) + + # ============================== + + # Get the left side of the inboard leg (r_tf_inboard_in) + r_tf_inboard_in = mfile_data.data["r_tf_inboard_in"].get_scan(scan) + y_center = 0.0 # Assume midplane for arrow + + # Draw a red arrow pointing right from the left side of the inboard leg + axis.annotate( + "", + xy=(0, y_center), + xytext=(r_tf_inboard_in, y_center), + arrowprops={"arrowstyle": "-|>", "color": "red", "lw": 4}, + annotation_clip=False, + ) + + # Show the centering force in MN next to the arrow + axis.text( + r_tf_inboard_in - 0.55, + z_tf_inside_half / 3, + f"{force_tf_coil_inboard_centering / 1e6:.2f} MN", + color="red", + fontsize=10, + va="center", + ha="right", + fontweight="bold", + bbox={ + "boxstyle": "round,pad=0.2", + "facecolor": "white", + "edgecolor": "red", + "alpha": 0.8, + }, + ) + + # Draw vertical arrows at the inboard to show the separation vertical force (up and down) + axis.annotate( + "", + xy=(r_tf_inboard_in, z_tf_inside_half / 2), + xytext=(r_tf_inboard_in, 0), + arrowprops={"arrowstyle": "-|>", "color": "blue", "lw": 4}, + annotation_clip=False, + ) + axis.annotate( + "", + xy=(r_tf_inboard_in, -z_tf_inside_half / 2), + xytext=(r_tf_inboard_in, 0), + arrowprops={"arrowstyle": "-|>", "color": "blue", "lw": 4}, + annotation_clip=False, + ) + + # Show the vertical separation force in MN next to the arrows (up) + axis.text( + r_tf_inboard_in + 0.1, + z_tf_inside_half / 2, + f"{force_tf_coil_inboard_vertical / 1e6:.2f} MN", + color="blue", + fontsize=10, + va="center", + ha="left", + fontweight="bold", + bbox={ + "boxstyle": "round,pad=0.2", + "facecolor": "white", + "edgecolor": "blue", + "alpha": 0.8, + }, + ) + # Show the vertical separation force in MN next to the arrows (down) + axis.text( + r_tf_inboard_in + 0.1, + -z_tf_inside_half / 2, + f"{force_tf_coil_inboard_vertical / 1e6:.2f} MN", + color="blue", + fontsize=10, + va="center", + ha="left", + fontweight="bold", + bbox={ + "boxstyle": "round,pad=0.2", + "facecolor": "white", + "edgecolor": "blue", + "alpha": 0.8, + }, + ) + + # Draw vertical arrows at the outboard to show the outboard vertical tension force (up and down) + r_tf_outboard_in = mfile_data.data["r_tf_outboard_in"].get_scan(scan) + force_tf_coil_outboard_vertical = mfile_data.data[ + "force_tf_coil_outboard_vertical" + ].get_scan(scan) + z_tf_inside_half = mfile_data.data["z_tf_inside_half"].get_scan(scan) + + axis.annotate( + "", + xy=(r_tf_outboard_in, z_tf_inside_half / 2), + xytext=(r_tf_outboard_in, 0), + arrowprops={"arrowstyle": "-|>", "color": "purple", "lw": 4}, + annotation_clip=False, + ) + axis.annotate( + "", + xy=(r_tf_outboard_in, -z_tf_inside_half / 2), + xytext=(r_tf_outboard_in, 0), + arrowprops={"arrowstyle": "-|>", "color": "purple", "lw": 4}, + annotation_clip=False, + ) + + axis.text( + r_tf_outboard_in + 0.1, + z_tf_inside_half / 2, + f"{force_tf_coil_outboard_vertical / 1e6:.2f} MN", + color="purple", + fontsize=10, + va="center", + ha="left", + fontweight="bold", + bbox={ + "boxstyle": "round,pad=0.2", + "facecolor": "white", + "edgecolor": "purple", + "alpha": 0.8, + }, + ) + axis.text( + r_tf_outboard_in + 0.1, + -z_tf_inside_half / 2, + f"{force_tf_coil_outboard_vertical / 1e6:.2f} MN", + color="purple", + fontsize=10, + va="center", + ha="left", + fontweight="bold", + bbox={ + "boxstyle": "round,pad=0.2", + "facecolor": "white", + "edgecolor": "purple", + "alpha": 0.8, + }, + ) + + # Plot a red dot at (0,0) + axis.plot(0, 0, marker="o", color="red", markersize=7) + + # Plot a red dashed vertical line at R=0 + axis.axvline(0, color="red", linestyle="--", linewidth=1) + + # Add centre line at + axis.axhline(y=0, color="red", linestyle="--", linewidth=1) + # axis.set_xlim(-3.0, (r_tf_outboard_in + dr_tf_outboard) * 1.4) + # axis.set_ylim((y4 - dr_tf_inboard) * 1.2, (y2 + dr_tf_inboard) * 1.2) + axis.set_xlabel("R [m]") + axis.set_ylabel("Z [m]") + axis.set_title("TF Coil Poloidal Cross-Section") + axis.minorticks_on() + axis.grid(True, which="both", linestyle="--", linewidth=0.5, alpha=0.2) + + def main_plot( fig0, fig1, @@ -12462,6 +12633,7 @@ def main_plot( fig24, fig25, fig26, + fig27, m_file_data, scan, imp="../data/lz_non_corona_14_elements/", @@ -12744,6 +12916,11 @@ def main_plot( ax24.set_position([0.08, 0.35, 0.84, 0.57]) plot_system_power_profiles_over_time(ax24, m_file_data, scan, fig26) + ax_tf_forces = fig27.add_subplot(121, aspect="equal") + # Set position: [left, bottom, width, height] -- width ~0.66 (2/3), height ~0.8 (taller) + ax_tf_forces.set_position([0.08, 0.15, 0.66, 0.8]) + plot_tf_coil_forces(ax_tf_forces, m_file_data, scan, colour_scheme) + def main(args=None): # TODO The use of globals here isn't ideal, but is required to get main() @@ -13062,6 +13239,7 @@ def main(args=None): page24 = plt.figure(figsize=(12, 9), dpi=80) page25 = plt.figure(figsize=(12, 9), dpi=80) page26 = plt.figure(figsize=(12, 9), dpi=80) + page27 = plt.figure(figsize=(12, 9), dpi=80) # run main_plot main_plot( @@ -13092,6 +13270,7 @@ def main(args=None): page24, page25, page26, + page27, m_file, scan=scan, demo_ranges=demo_ranges, @@ -13127,6 +13306,7 @@ def main(args=None): pdf.savefig(page24) pdf.savefig(page25) pdf.savefig(page26) + pdf.savefig(page27) # show fig if option used if args.show: @@ -13159,6 +13339,7 @@ def main(args=None): plt.close(page24) plt.close(page25) plt.close(page26) + plt.close(page27) if __name__ == "__main__": diff --git a/process/io/variable_metadata.py b/process/io/variable_metadata.py index 58bcb3a061..727f28056c 100644 --- a/process/io/variable_metadata.py +++ b/process/io/variable_metadata.py @@ -69,7 +69,7 @@ class VariableMetadata: description="Outer FW to plasma gap", units="m", ), - "vforce": VariableMetadata( + "force_tf_coil_inboard_vertical": VariableMetadata( latex=r"$F_\mathrm{z}^\mathrm{in}$ [$N$]", description="TF coil vertical force", units="N", diff --git a/process/resistive_tf_coil.py b/process/resistive_tf_coil.py index cf51f19949..980f83fff1 100644 --- a/process/resistive_tf_coil.py +++ b/process/resistive_tf_coil.py @@ -56,11 +56,11 @@ def run(self, output: bool): ) ( - tfcoil_variables.cforce, - tfcoil_variables.vforce, - tfcoil_variables.vforce_outboard, + tfcoil_variables.force_tf_coil_inboard_centering, + tfcoil_variables.force_tf_coil_inboard_vertical, + tfcoil_variables.force_tf_coil_outboard_vertical, superconducting_tf_coil_variables.vforce_inboard_tot, - tfcoil_variables.f_vforce_inboard, + tfcoil_variables.f_force_tf_coil_inboard_vertical, ) = self.tf_field_and_force( i_tf_sup=tfcoil_variables.i_tf_sup, r_tf_wp_inboard_outer=superconducting_tf_coil_variables.r_tf_wp_inboard_outer, @@ -77,7 +77,7 @@ def run(self, output: bool): r_cp_top=build_variables.r_cp_top, itart=physics_variables.itart, i_cp_joints=tfcoil_variables.i_cp_joints, - f_vforce_inboard=tfcoil_variables.f_vforce_inboard, + f_force_tf_coil_inboard_vertical=tfcoil_variables.f_force_tf_coil_inboard_vertical, ) # Calculate TF coil areas and masses @@ -190,7 +190,7 @@ def run(self, output: bool): superconducting_tf_coil_variables.vforce_inboard_tot, tfcoil_variables.i_tf_tresca, tfcoil_variables.a_tf_coil_inboard_case, - tfcoil_variables.vforce, + tfcoil_variables.force_tf_coil_inboard_vertical, tfcoil_variables.a_tf_turn_steel, ) diff --git a/process/superconducting_tf_coil.py b/process/superconducting_tf_coil.py index 0d4fbe3794..ea13f65b5c 100644 --- a/process/superconducting_tf_coil.py +++ b/process/superconducting_tf_coil.py @@ -80,11 +80,11 @@ def run(self, output: bool): ) ( - tfcoil_variables.cforce, - tfcoil_variables.vforce, - tfcoil_variables.vforce_outboard, + tfcoil_variables.force_tf_coil_inboard_centering, + tfcoil_variables.force_tf_coil_inboard_vertical, + tfcoil_variables.force_tf_coil_outboard_vertical, superconducting_tf_coil_variables.vforce_inboard_tot, - tfcoil_variables.f_vforce_inboard, + tfcoil_variables.f_force_tf_coil_inboard_vertical, ) = self.tf_field_and_force( i_tf_sup=tfcoil_variables.i_tf_sup, r_tf_wp_inboard_outer=superconducting_tf_coil_variables.r_tf_wp_inboard_outer, @@ -101,7 +101,8 @@ def run(self, output: bool): r_cp_top=build_variables.r_cp_top, itart=physics_variables.itart, i_cp_joints=tfcoil_variables.i_cp_joints, - f_vforce_inboard=tfcoil_variables.f_vforce_inboard, + f_force_tf_coil_inboard_vertical=tfcoil_variables.f_force_tf_coil_inboard_vertical, + z_tf_inside_half=build_variables.z_tf_inside_half, ) # Calculate TF coil areas and masses @@ -214,7 +215,7 @@ def run(self, output: bool): superconducting_tf_coil_variables.vforce_inboard_tot, tfcoil_variables.i_tf_tresca, tfcoil_variables.a_tf_coil_inboard_case, - tfcoil_variables.vforce, + tfcoil_variables.force_tf_coil_inboard_vertical, tfcoil_variables.a_tf_turn_steel, ) diff --git a/process/tf_coil.py b/process/tf_coil.py index 9927b2e541..b6227fa06d 100644 --- a/process/tf_coil.py +++ b/process/tf_coil.py @@ -1652,29 +1652,29 @@ def outtf(self): po.ovarre( self.outfile, "Inboard vertical tension per coil (N)", - "(vforce)", - tfcoil_variables.vforce, + "(force_tf_coil_inboard_vertical)", + tfcoil_variables.force_tf_coil_inboard_vertical, "OP ", ) po.ovarre( self.outfile, "Outboard vertical tension per coil (N)", - "(vforce_outboard)", - tfcoil_variables.vforce_outboard, + "(force_tf_coil_outboard_vertical)", + tfcoil_variables.force_tf_coil_outboard_vertical, "OP ", ) po.ovarre( self.outfile, "inboard vertical tension fraction (-)", - "(f_vforce_inboard)", - tfcoil_variables.f_vforce_inboard, + "(f_force_tf_coil_inboard_vertical)", + tfcoil_variables.f_force_tf_coil_inboard_vertical, "OP ", ) po.ovarre( self.outfile, - "Centring force per coil (N/m)", - "(cforce)", - tfcoil_variables.cforce, + "Centring force per coil (N)", + "(force_tf_coil_inboard_centering)", + tfcoil_variables.force_tf_coil_inboard_centering, "OP ", ) @@ -2563,7 +2563,8 @@ def tf_field_and_force( r_cp_top: float, itart: int, i_cp_joints: int, - f_vforce_inboard: float, + f_force_tf_coil_inboard_vertical: float, + z_tf_inside_half: float, ) -> tuple[float, float, float, float, float]: """ Calculates the Toroidal Field (TF) coil field, forces, vacuum vessel (VV) quench considerations, @@ -2599,15 +2600,17 @@ def tf_field_and_force( :type itart: int :param i_cp_joints: Centrepost joints switch (1 = with sliding joints, 0 = without) :type i_cp_joints: int - :param f_vforce_inboard: Inboard vertical tension fraction - :type f_vforce_inboard: float + :param f_force_tf_coil_inboard_vertical: Inboard vertical tension fraction + :type f_force_tf_coil_inboard_vertical: float + :param z_tf_inside_half: Half height of the TF coil inside the bore [m] + :param z_tf_inside_half: float :returns: Tuple containing: - - cforce (float): Centering force per TF coil [N/m] - - vforce (float): Inboard vertical tension [N] - - vforce_outboard (float): Outboard vertical tension [N] + - force_tf_coil_inboard_centering (float): Centering force per TF coil [N/m] + - force_tf_coil_inboard_vertical (float): Inboard vertical tension [N] + - force_tf_coil_outboard_vertical (float): Outboard vertical tension [N] - vforce_inboard_tot (float): Total inboard vertical force [N] - - f_vforce_inboard (float): Inboard vertical tension fraction + - f_force_tf_coil_inboard_vertical (float): Inboard vertical tension fraction :rtype: tuple[float, float, float, float] :raises: None @@ -2642,7 +2645,12 @@ def tf_field_and_force( # In plane forces # --- # Centering force = net inwards radial force per meters per TF coil [N/m] - cforce = 0.5e0 * b_tf_inboard_peak_symmetric * c_tf_total / n_tf_coils + force_tf_coil_inboard_centering = ( + 0.5e0 + * b_tf_inboard_peak_symmetric + * (c_tf_total / n_tf_coils) + * (2 * z_tf_inside_half) + ) # Vertical force per coil [N] # *** @@ -2669,7 +2677,7 @@ def tf_field_and_force( r_tf_wp_inboard_inner_conductor = 1.0e-9 # May the force be with you - vforce_tot = ( + force_tf_coil_vertical_total = ( 0.5e0 * (b_plasma_toroidal_on_axis * rmajor * c_tf_total) / (n_tf_coils * dr_tf_wp_inboard_conductor**2) @@ -2711,7 +2719,7 @@ def tf_field_and_force( # Rem SK : casing/insulation thickness not subtracted as part of the CP is genuinely connected to the legs.. if itart == 1 and i_cp_joints == 1: # CP vertical tension [N] - vforce = ( + force_tf_coil_inboard_vertical = ( 0.25e0 * (b_plasma_toroidal_on_axis * rmajor * c_tf_total) / (n_tf_coils * dr_tf_wp_inboard_conductor**2) @@ -2740,23 +2748,37 @@ def tf_field_and_force( ) # Vertical tension applied on the outer leg [N] - vforce_outboard = vforce_tot - vforce + force_tf_coil_outboard_vertical = ( + force_tf_coil_vertical_total - force_tf_coil_inboard_vertical + ) # Inboard vertical tension fraction - f_vforce_inboard = vforce / vforce_tot + f_force_tf_coil_inboard_vertical = ( + force_tf_coil_inboard_vertical / force_tf_coil_vertical_total + ) # Case of TF without joints or with clamped joints vertical tension else: # Inboard vertical tension [N] - vforce = f_vforce_inboard * vforce_tot + force_tf_coil_inboard_vertical = ( + f_force_tf_coil_inboard_vertical * force_tf_coil_vertical_total + ) # Ouboard vertical tension [N] - vforce_outboard = vforce * ((1.0e0 / f_vforce_inboard) - 1.0e0) + force_tf_coil_outboard_vertical = force_tf_coil_inboard_vertical * ( + (1.0e0 / f_force_tf_coil_inboard_vertical) - 1.0e0 + ) # Total vertical force - vforce_inboard_tot = vforce * n_tf_coils + vforce_inboard_tot = force_tf_coil_inboard_vertical * n_tf_coils - return cforce, vforce, vforce_outboard, vforce_inboard_tot, f_vforce_inboard + return ( + force_tf_coil_inboard_centering, + force_tf_coil_inboard_vertical, + force_tf_coil_outboard_vertical, + vforce_inboard_tot, + f_force_tf_coil_inboard_vertical, + ) @staticmethod def he_density(temp: float) -> float: @@ -3197,7 +3219,7 @@ def stresscl( vforce_inboard_tot, i_tf_tresca, a_tf_coil_inboard_case, - vforce, + force_tf_coil_inboard_vertical, a_tf_turn_steel, ): """TF coil stress routine @@ -3768,7 +3790,7 @@ def stresscl( ) # Vertical stress [Pa] - sig_tf_z[:] = vforce / ( + sig_tf_z[:] = force_tf_coil_inboard_vertical / ( a_tf_coil_inboard_case + a_tf_turn_steel * n_tf_coil_turns ) # Array equation [EDIT: Are you sure? It doesn't look like one to me] diff --git a/tests/unit/test_tfcoil.py b/tests/unit/test_tfcoil.py index 41e79f2482..ad8edae445 100644 --- a/tests/unit/test_tfcoil.py +++ b/tests/unit/test_tfcoil.py @@ -432,7 +432,7 @@ class TfFieldAndForceParam(NamedTuple): r_cp_top: Any = None - vforce: Any = None + force_tf_coil_inboard_vertical: Any = None n_tf_coils: Any = None @@ -440,7 +440,7 @@ class TfFieldAndForceParam(NamedTuple): sigvvall: Any = None - cforce: Any = None + force_tf_coil_inboard_centering: Any = None c_tf_total: Any = None @@ -448,9 +448,9 @@ class TfFieldAndForceParam(NamedTuple): i_tf_sup: Any = None - f_vforce_inboard: Any = None + f_force_tf_coil_inboard_vertical: Any = None - vforce_outboard: Any = None + force_tf_coil_outboard_vertical: Any = None dx_tf_wp_insulation: Any = None @@ -482,6 +482,8 @@ class TfFieldAndForceParam(NamedTuple): expected_vforce_inboard_tot: Any = None + z_tf_inside_half: Any = None + @pytest.mark.parametrize( "tffieldandforceparam", @@ -495,16 +497,17 @@ class TfFieldAndForceParam(NamedTuple): r_vv_inboard_out=0.20483000000000001, r_tf_inboard_mid=0.077415000000000012, r_cp_top=0.87643571428571443, - vforce=0, + force_tf_coil_inboard_vertical=0, n_tf_coils=12, taucq=30, + z_tf_inside_half=3.0, sigvvall=93000000, - cforce=0, + force_tf_coil_inboard_centering=0, c_tf_total=25500000, b_tf_inboard_peak_symmetric=34.862617362267024, i_tf_sup=0, - f_vforce_inboard=0.5, - vforce_outboard=0, + f_force_tf_coil_inboard_vertical=0.5, + force_tf_coil_outboard_vertical=0, dx_tf_wp_insulation=0, dx_tf_turn_insulation=0.00080000000000000004, dr_tf_wp_with_insulation=0.15483000000000002, @@ -530,16 +533,17 @@ class TfFieldAndForceParam(NamedTuple): r_vv_inboard_out=0.20483000000000001, r_tf_inboard_mid=0.077415000000000012, r_cp_top=0.85843571428571441, - vforce=12380916.66459452, + force_tf_coil_inboard_vertical=12380916.66459452, n_tf_coils=12, taucq=30, + z_tf_inside_half=3.0, sigvvall=93000000, - cforce=37041530.947408713, + force_tf_coil_inboard_centering=37041530.947408713, c_tf_total=25500000, b_tf_inboard_peak_symmetric=34.862617362267024, i_tf_sup=0, - f_vforce_inboard=0.59539634897566385, - vforce_outboard=8413494.7991220243, + f_force_tf_coil_inboard_vertical=0.59539634897566385, + force_tf_coil_outboard_vertical=8413494.7991220243, dx_tf_wp_insulation=0, dx_tf_turn_insulation=0.00080000000000000004, dr_tf_wp_with_insulation=0.14708850000000001, @@ -568,36 +572,45 @@ def test_tf_field_and_force(tffieldandforceparam, tfcoil): :type tffieldandforceparam: tffieldandforceparam """ - cforce, vforce, vforce_outboard, vforce_inboard_tot, f_vforce_inboard = ( - tfcoil.tf_field_and_force( - i_tf_sup=tffieldandforceparam.i_tf_sup, - r_tf_wp_inboard_outer=tffieldandforceparam.r_tf_wp_inboard_outer, - r_tf_wp_inboard_inner=tffieldandforceparam.r_tf_wp_inboard_inner, - r_tf_outboard_in=tffieldandforceparam.r_tf_outboard_in, - dx_tf_wp_insulation=tffieldandforceparam.dx_tf_wp_insulation, - dx_tf_wp_insertion_gap=tffieldandforceparam.dx_tf_wp_insertion_gap, - b_tf_inboard_peak_symmetric=tffieldandforceparam.b_tf_inboard_peak_symmetric, - c_tf_total=tffieldandforceparam.c_tf_total, - n_tf_coils=tffieldandforceparam.n_tf_coils, - dr_tf_plasma_case=tffieldandforceparam.dr_tf_plasma_case, - rmajor=tffieldandforceparam.rmajor, - b_plasma_toroidal_on_axis=tffieldandforceparam.b_plasma_toroidal_on_axis, - r_cp_top=tffieldandforceparam.r_cp_top, - itart=tffieldandforceparam.itart, - i_cp_joints=tffieldandforceparam.i_cp_joints, - f_vforce_inboard=tffieldandforceparam.f_vforce_inboard, - ) + ( + force_tf_coil_inboard_centering, + force_tf_coil_inboard_vertical, + force_tf_coil_outboard_vertical, + vforce_inboard_tot, + f_force_tf_coil_inboard_vertical, + ) = tfcoil.tf_field_and_force( + i_tf_sup=tffieldandforceparam.i_tf_sup, + r_tf_wp_inboard_outer=tffieldandforceparam.r_tf_wp_inboard_outer, + r_tf_wp_inboard_inner=tffieldandforceparam.r_tf_wp_inboard_inner, + r_tf_outboard_in=tffieldandforceparam.r_tf_outboard_in, + dx_tf_wp_insulation=tffieldandforceparam.dx_tf_wp_insulation, + dx_tf_wp_insertion_gap=tffieldandforceparam.dx_tf_wp_insertion_gap, + b_tf_inboard_peak_symmetric=tffieldandforceparam.b_tf_inboard_peak_symmetric, + c_tf_total=tffieldandforceparam.c_tf_total, + n_tf_coils=tffieldandforceparam.n_tf_coils, + dr_tf_plasma_case=tffieldandforceparam.dr_tf_plasma_case, + rmajor=tffieldandforceparam.rmajor, + b_plasma_toroidal_on_axis=tffieldandforceparam.b_plasma_toroidal_on_axis, + r_cp_top=tffieldandforceparam.r_cp_top, + itart=tffieldandforceparam.itart, + i_cp_joints=tffieldandforceparam.i_cp_joints, + f_force_tf_coil_inboard_vertical=tffieldandforceparam.f_force_tf_coil_inboard_vertical, + z_tf_inside_half=tffieldandforceparam.z_tf_inside_half, ) - assert vforce == pytest.approx(tffieldandforceparam.expected_vforce) + assert force_tf_coil_inboard_vertical == pytest.approx( + tffieldandforceparam.expected_vforce + ) - assert cforce == pytest.approx(tffieldandforceparam.expected_cforce) + assert force_tf_coil_inboard_centering == pytest.approx( + tffieldandforceparam.expected_cforce + ) - assert f_vforce_inboard == pytest.approx( + assert f_force_tf_coil_inboard_vertical == pytest.approx( tffieldandforceparam.expected_f_vforce_inboard ) - assert vforce_outboard == pytest.approx( + assert force_tf_coil_outboard_vertical == pytest.approx( tffieldandforceparam.expected_vforce_outboard ) @@ -866,7 +879,7 @@ class StressclParam(NamedTuple): a_tf_turn_cable_space_no_void: Any = None - vforce: Any = None + force_tf_coil_inboard_vertical: Any = None c_tf_total: Any = None @@ -1038,7 +1051,7 @@ class StressclParam(NamedTuple): dr_tf_wp_with_insulation=0.54261087836601019, i_tf_tresca=0, a_tf_turn_cable_space_no_void=0.001293323051622732, - vforce=250545611.13801825, + force_tf_coil_inboard_vertical=250545611.13801825, c_tf_total=236885604.60000002, j_tf_wp=23124470.793774806, sig_tf_cs_bucked=0, @@ -1161,7 +1174,7 @@ class StressclParam(NamedTuple): dr_tf_wp_with_insulation=0.54261087836601019, i_tf_tresca=0, a_tf_turn_cable_space_no_void=0.001293323051622732, - vforce=250545611.13801825, + force_tf_coil_inboard_vertical=250545611.13801825, c_tf_total=236885604.60000002, j_tf_wp=23124470.793774806, sig_tf_cs_bucked=0, @@ -1386,7 +1399,7 @@ def test_stresscl(stressclparam, monkeypatch, tfcoil): stressclparam.vforce_inboard_tot, stressclparam.i_tf_tresca, stressclparam.a_tf_coil_inboard_case, - stressclparam.vforce, + stressclparam.force_tf_coil_inboard_vertical, stressclparam.a_tf_turn_steel, )