From 9b0121b52dd9063df920e2fd14223c6ac3086478 Mon Sep 17 00:00:00 2001 From: mn3981 Date: Fri, 5 Jun 2026 16:49:24 +0100 Subject: [PATCH 1/2] Refactor inboard blanket handling to use build data structure --- process/core/init.py | 2 +- process/data_structure/build_variables.py | 6 +++ process/data_structure/fwbs_variables.py | 6 --- process/models/blankets/blanket_library.py | 46 +++++++++---------- process/models/blankets/dcll.py | 4 +- .../models/blankets/test_blanket_library.py | 8 ++-- tests/unit/models/blankets/test_ccfe_hcpb.py | 2 +- tests/unit/models/test_dcll.py | 4 +- 8 files changed, 40 insertions(+), 38 deletions(-) diff --git a/process/core/init.py b/process/core/init.py index 3d368500c5..f22ed5c4c1 100644 --- a/process/core/init.py +++ b/process/core/init.py @@ -1042,7 +1042,7 @@ def check_process(inputs, data): # noqa: ARG001 # Set inboard blanket thickness to zero if no inboard blanket switch # used (Issue #732) - if data.fwbs.i_blkt_inboard == 0: + if data.build.i_blkt_inboard == 0: data.build.dr_blkt_inboard = 0.0 # Ensure that blanket material fractions allow non-zero space for steel diff --git a/process/data_structure/build_variables.py b/process/data_structure/build_variables.py index 89297e4344..4e214572a2 100644 --- a/process/data_structure/build_variables.py +++ b/process/data_structure/build_variables.py @@ -303,5 +303,11 @@ class BuildData: the ripple calculation, else 0 """ + i_blkt_inboard: int = 1 + """switch for inboard blanket: + - =0 No inboard blanket (dr_blkt_inboard=0.0) + - =1 Inboard blanket present + """ + CREATE_DICTS_FROM_DATACLASS = BuildData diff --git a/process/data_structure/fwbs_variables.py b/process/data_structure/fwbs_variables.py index 3f1041e677..0bc6208d9b 100644 --- a/process/data_structure/fwbs_variables.py +++ b/process/data_structure/fwbs_variables.py @@ -81,12 +81,6 @@ class FWBSData: - please use i_p_coolant_pumping = 0 or 1. """ - i_blkt_inboard: int = 1 - """switch for inboard blanket: - - =0 No inboard blanket (dr_blkt_inboard=0.0) - - =1 Inboard blanket present - """ - inuclear: int = 0 """switch for nuclear heating in the coils: - =0 Frances Fox model (default) diff --git a/process/models/blankets/blanket_library.py b/process/models/blankets/blanket_library.py index 8975142f9e..b696d323fa 100644 --- a/process/models/blankets/blanket_library.py +++ b/process/models/blankets/blanket_library.py @@ -981,7 +981,7 @@ def set_blanket_module_geometry(self): # If liquid breeder or dual coolant blanket then calculate if self.data.fwbs.i_blkt_dual_coolant > 0: # Use smallest space available to pipes for pipe sizes in pumping calculations (worst case) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: # Radial direction self.data.fwbs.b_bz_liq = ( min( @@ -1181,7 +1181,7 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): flow_density=self.data.fwbs.den_liq, ) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: # Calc total num of pipes (in all inboard modules) from # coolant frac and channel dimensions # Assumes up/down flow, two 90 deg bends per length @@ -1270,7 +1270,7 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): flow_density=self.data.fwbs.den_liq, ) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: # Calc total num of pipes (in all inboard modules) from # coolant frac and channel dimensions # Assumes up/down flow, two 90 deg bends per length @@ -1347,7 +1347,7 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): flow_density=self.data.fwbs.den_blkt_coolant, ) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: # Calc total num of pipes (in all inboard modules) from # coolant frac and channel dimensions # Assumes up/down flow, two 90 deg bends per length @@ -1427,7 +1427,7 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): ) # Long polodal flows - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: npoltoti = self.data.fwbs.nopol * npblkti_liq npoltoto = self.data.fwbs.nopol * npblkto_liq @@ -1446,7 +1446,7 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): label="Outboard blanket", ) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: dpres_blkt_inboard_coolant = self.total_pressure_drop( output, icoolpump=1, @@ -1478,7 +1478,7 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): nopolchan=npoltoto, label="Outboard blanket breeder liquid", ) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: deltap_bli_liq = self.total_pressure_drop( output, icoolpump=2, @@ -1509,7 +1509,7 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): deltap_blo_liq, ] - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: return [ dpres_fw_inboard_coolant, dpres_fw_outboard_coolant, @@ -1851,7 +1851,7 @@ def liquid_breeder_properties(self, output: bool = False): # Magnetic feild strength in T for Hartmann calculation # IB - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: self.data.fwbs.b_mag_blkt[0] = ( self.data.physics.b_plasma_toroidal_on_axis * self.data.physics.rmajor @@ -1862,7 +1862,7 @@ def liquid_breeder_properties(self, output: bool = False): ) ) # We do not use this if there is no IB blanket, but will use edge as fill value - if self.data.fwbs.i_blkt_inboard == 0: + if self.data.build.i_blkt_inboard == 0: self.data.fwbs.b_mag_blkt[0] = ( self.data.physics.b_plasma_toroidal_on_axis * self.data.physics.rmajor @@ -2098,7 +2098,7 @@ def thermo_hydraulic_model(self, output: bool): # IB/OB Blanket (MW) # Neutron power deposited in inboard blanket (MW) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: self.data.blanket.p_blkt_nuclear_heat_inboard_mw = ( self.data.fwbs.p_blkt_nuclear_heat_total_mw * self.data.fwbs.vol_blkt_inboard @@ -2194,7 +2194,7 @@ def thermo_hydraulic_model(self, output: bool): ) # Outlet FW/inlet BB temp (mass flow FW = mass flow BB) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: fwoutleti = (f_nuc_fwi * self.data.fwbs.temp_blkt_coolant_out) + ( 1 - f_nuc_fwi ) * self.data.fwbs.temp_fw_coolant_in @@ -2289,7 +2289,7 @@ def thermo_hydraulic_model(self, output: bool): ) # If there is an IB blanket... - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: # Mass flow rates for inboard blanket coolants (kg/s) self.data.blanket.mflow_blkt_inboard_coolant = ( 1.0e6 @@ -2331,7 +2331,7 @@ def thermo_hydraulic_model(self, output: bool): ) / (24 * 3600) # If there is an IB blanket... - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: # Mass flow rate for inboard blanket coolant (kg/s) self.data.blanket.mflow_blkt_inboard_coolant = ( 1.0e6 @@ -2360,7 +2360,7 @@ def thermo_hydraulic_model(self, output: bool): # If there is an IB blanket... # Mass flow rate for inboard blanket coolant (kg/s) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: self.data.blanket.mflow_blkt_inboard_coolant = ( 1.0e6 * (self.data.blanket.p_blkt_nuclear_heat_inboard_mw) @@ -2384,13 +2384,13 @@ def thermo_hydraulic_model(self, output: bool): deltap_fwo = deltap[1] deltap_blo = deltap[2] if self.data.fwbs.i_blkt_dual_coolant > 0: - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: deltap_bli = deltap[3] deltap_blo_liq = deltap[4] deltap_bli_liq = deltap[5] else: deltap_blo_liq = deltap[3] - elif self.data.fwbs.i_blkt_inboard == 1: + elif self.data.build.i_blkt_inboard == 1: deltap_bli = deltap[3] # Pumping Power @@ -2398,9 +2398,9 @@ def thermo_hydraulic_model(self, output: bool): if self.data.fwbs.i_fw_blkt_shared_coolant == FWBlktCoolantLoopTypes.SHARED_LOOP: # Total pressure drop in the first wall/blanket (Pa) if i_p_coolant_pumping == PumpingPowerModelTypes.MECHANICAL: - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: deltap_fw_blkt = deltap_fwi + deltap_bli + deltap_fwo + deltap_blo - if self.data.fwbs.i_blkt_inboard == 0: + if self.data.build.i_blkt_inboard == 0: deltap_fw_blkt = deltap_fwi + deltap_fwo + deltap_blo elif ( i_p_coolant_pumping @@ -2439,9 +2439,9 @@ def thermo_hydraulic_model(self, output: bool): deltap_fw = deltap_fwi + deltap_fwo # Total pressure drop in the blanket (Pa) - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: deltap_blkt = deltap_bli + deltap_blo - if self.data.fwbs.i_blkt_inboard == 0: + if self.data.build.i_blkt_inboard == 0: deltap_blkt = deltap_blo elif ( i_p_coolant_pumping @@ -2501,9 +2501,9 @@ def thermo_hydraulic_model(self, output: bool): if self.data.fwbs.i_blkt_dual_coolant > 0: # Total pressure drop in the blanket (Pa) if i_p_coolant_pumping == PumpingPowerModelTypes.MECHANICAL: - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: deltap_bl_liq = deltap_bli_liq + deltap_blo_liq - if self.data.fwbs.i_blkt_inboard == 0: + if self.data.build.i_blkt_inboard == 0: deltap_bl_liq = deltap_blo_liq elif ( i_p_coolant_pumping diff --git a/process/models/blankets/dcll.py b/process/models/blankets/dcll.py index 19d67f1e2e..04abf02534 100644 --- a/process/models/blankets/dcll.py +++ b/process/models/blankets/dcll.py @@ -549,7 +549,7 @@ def dcll_masses(self, output: bool): self.data.dcll.f_vol_mfbss_pbli = 0.4436 # Calculate Volumes - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: # IB and OB blanket # BZ @@ -770,7 +770,7 @@ def dcll_masses(self, output: bool): ) # Total mass of IB/OB segment - if self.data.fwbs.i_blkt_inboard == 1: + if self.data.build.i_blkt_inboard == 1: self.data.dcll.mass_segm_ib = ( self.data.fwbs.m_blkt_total * (self.data.fwbs.vol_blkt_inboard / self.data.fwbs.vol_blkt_total) diff --git a/tests/unit/models/blankets/test_blanket_library.py b/tests/unit/models/blankets/test_blanket_library.py index 1afe7e16d7..55ac5ed1b2 100644 --- a/tests/unit/models/blankets/test_blanket_library.py +++ b/tests/unit/models/blankets/test_blanket_library.py @@ -959,7 +959,7 @@ def test_liquid_breeder_properties( liquidbreederpropertiesparam.b_mag_blkt, ) monkeypatch.setattr( - blanket_library.data.fwbs, + blanket_library.data.build, "i_blkt_inboard", liquidbreederpropertiesparam.i_blkt_inboard, ) @@ -1647,7 +1647,7 @@ def test_liquid_breeder_properties_part_1(monkeypatch, blanket_library): monkeypatch.setattr(blanket_library.data.physics, "aspect", 3.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_inboard", 0.1) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_outboard", 0.2) - monkeypatch.setattr(blanket_library.data.fwbs, "i_blkt_inboard", 1) + monkeypatch.setattr(blanket_library.data.build, "i_blkt_inboard", 1) monkeypatch.setattr(blanket_library.data.fwbs, "inlet_temp_liq", 1.0) monkeypatch.setattr(blanket_library.data.fwbs, "outlet_temp_liq", 1.0) @@ -1721,7 +1721,7 @@ def test_liquid_breeder_properties_part_2(monkeypatch, blanket_library): monkeypatch.setattr(blanket_library.data.physics, "aspect", 3.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_inboard", 0.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_outboard", 0.2) - monkeypatch.setattr(blanket_library.data.fwbs, "i_blkt_inboard", 0) + monkeypatch.setattr(blanket_library.data.build, "i_blkt_inboard", 0) monkeypatch.setattr(blanket_library.data.fwbs, "i_blkt_liquid_breeder_type", 0) monkeypatch.setattr(blanket_library.data.fwbs, "inlet_temp_liq", 0.0) monkeypatch.setattr(blanket_library.data.fwbs, "outlet_temp_liq", 0.0) @@ -1746,7 +1746,7 @@ def test_liquid_breeder_properties_part_3(monkeypatch, blanket_library): monkeypatch.setattr(blanket_library.data.physics, "aspect", 3.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_inboard", 0.1) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_outboard", 0.2) - monkeypatch.setattr(blanket_library.data.fwbs, "i_blkt_inboard", 1) + monkeypatch.setattr(blanket_library.data.build, "i_blkt_inboard", 1) monkeypatch.setattr(blanket_library.data.fwbs, "inlet_temp_liq", 0.0) monkeypatch.setattr(blanket_library.data.fwbs, "outlet_temp_liq", 1.0) diff --git a/tests/unit/models/blankets/test_ccfe_hcpb.py b/tests/unit/models/blankets/test_ccfe_hcpb.py index d1676788bb..04943678bc 100644 --- a/tests/unit/models/blankets/test_ccfe_hcpb.py +++ b/tests/unit/models/blankets/test_ccfe_hcpb.py @@ -1590,7 +1590,7 @@ def test_component_masses(componentmassesparam, monkeypatch, ccfe_hcpb): ccfe_hcpb.data.fwbs, "vol_blkt_outboard", componentmassesparam.vol_blkt_outboard ) monkeypatch.setattr( - ccfe_hcpb.data.fwbs, "i_blkt_inboard", componentmassesparam.i_blkt_inboard + ccfe_hcpb.data.build, "i_blkt_inboard", componentmassesparam.i_blkt_inboard ) monkeypatch.setattr(ccfe_hcpb.data.fwbs, "fblhebmi", componentmassesparam.fblhebmi) monkeypatch.setattr(ccfe_hcpb.data.fwbs, "fblhebpi", componentmassesparam.fblhebpi) diff --git a/tests/unit/models/test_dcll.py b/tests/unit/models/test_dcll.py index ae43764d4a..d6133dd075 100644 --- a/tests/unit/models/test_dcll.py +++ b/tests/unit/models/test_dcll.py @@ -828,7 +828,9 @@ def test_dcll_masses(dcllmassesparam, monkeypatch, dcll): dcllmassesparam.a_plasma_surface_outboard, ) - monkeypatch.setattr(dcll.data.fwbs, "i_blkt_inboard", dcllmassesparam.i_blkt_inboard) + monkeypatch.setattr( + dcll.data.build, "i_blkt_inboard", dcllmassesparam.i_blkt_inboard + ) monkeypatch.setattr(dcll.data.fwbs, "vol_blkt_total", dcllmassesparam.vol_blkt_total) From 8fd0c621077a8b7a02189ba3134bbf64ed7fc564 Mon Sep 17 00:00:00 2001 From: mn3981 Date: Fri, 5 Jun 2026 17:04:32 +0100 Subject: [PATCH 2/2] Apply enum logic --- process/core/init.py | 3 +- process/data_structure/build_variables.py | 10 +- process/models/blankets/blanket_library.py | 116 ++++++++++++++---- process/models/blankets/dcll.py | 11 +- .../models/blankets/test_blanket_library.py | 23 +++- tests/unit/models/blankets/test_ccfe_hcpb.py | 3 +- tests/unit/models/test_dcll.py | 6 +- 7 files changed, 137 insertions(+), 35 deletions(-) diff --git a/process/core/init.py b/process/core/init.py index f22ed5c4c1..79cbd5e575 100644 --- a/process/core/init.py +++ b/process/core/init.py @@ -17,6 +17,7 @@ from process.core.solver import iteration_variables from process.core.solver.constraints import ConstraintManager from process.data_structure.blanket_variables import BlktModelTypes +from process.data_structure.build_variables import InboardBlanketConfiguration from process.data_structure.impurity_radiation_variables import N_IMPURITIES from process.data_structure.numerics import FiguresOfMerit, PROCESSRunMode from process.data_structure.physics_variables import DivertorNumberModels @@ -1042,7 +1043,7 @@ def check_process(inputs, data): # noqa: ARG001 # Set inboard blanket thickness to zero if no inboard blanket switch # used (Issue #732) - if data.build.i_blkt_inboard == 0: + if data.build.i_blkt_inboard == InboardBlanketConfiguration.NO_INBOARD_BLANKET: data.build.dr_blkt_inboard = 0.0 # Ensure that blanket material fractions allow non-zero space for steel diff --git a/process/data_structure/build_variables.py b/process/data_structure/build_variables.py index 4e214572a2..6099057e16 100644 --- a/process/data_structure/build_variables.py +++ b/process/data_structure/build_variables.py @@ -1,4 +1,12 @@ from dataclasses import dataclass +from enum import IntEnum + + +class InboardBlanketConfiguration(IntEnum): + """Switch for inboard blanket, controlled through `BuildData.i_blkt_inboard`""" + + NO_INBOARD_BLANKET = 0 + INBOARD_BLANKET_PRESENT = 1 @dataclass(slots=True) @@ -304,7 +312,7 @@ class BuildData: """ i_blkt_inboard: int = 1 - """switch for inboard blanket: + """Switch for inboard blanket, controlled through InboardBlanketConfiguration enum: - =0 No inboard blanket (dr_blkt_inboard=0.0) - =1 Inboard blanket present """ diff --git a/process/models/blankets/blanket_library.py b/process/models/blankets/blanket_library.py index b696d323fa..13540ff61b 100644 --- a/process/models/blankets/blanket_library.py +++ b/process/models/blankets/blanket_library.py @@ -11,6 +11,7 @@ from process.core.exceptions import ProcessValueError from process.core.model import Model from process.data_structure.blanket_variables import BlktModelTypes +from process.data_structure.build_variables import InboardBlanketConfiguration from process.models.build import FwBlktVVShape from process.models.engineering.ivc_functions import ( calculate_pipe_bend_radius, @@ -981,7 +982,10 @@ def set_blanket_module_geometry(self): # If liquid breeder or dual coolant blanket then calculate if self.data.fwbs.i_blkt_dual_coolant > 0: # Use smallest space available to pipes for pipe sizes in pumping calculations (worst case) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): # Radial direction self.data.fwbs.b_bz_liq = ( min( @@ -1181,7 +1185,10 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): flow_density=self.data.fwbs.den_liq, ) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): # Calc total num of pipes (in all inboard modules) from # coolant frac and channel dimensions # Assumes up/down flow, two 90 deg bends per length @@ -1270,7 +1277,10 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): flow_density=self.data.fwbs.den_liq, ) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): # Calc total num of pipes (in all inboard modules) from # coolant frac and channel dimensions # Assumes up/down flow, two 90 deg bends per length @@ -1347,7 +1357,10 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): flow_density=self.data.fwbs.den_blkt_coolant, ) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): # Calc total num of pipes (in all inboard modules) from # coolant frac and channel dimensions # Assumes up/down flow, two 90 deg bends per length @@ -1427,7 +1440,10 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): ) # Long polodal flows - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): npoltoti = self.data.fwbs.nopol * npblkti_liq npoltoto = self.data.fwbs.nopol * npblkto_liq @@ -1446,7 +1462,10 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): label="Outboard blanket", ) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): dpres_blkt_inboard_coolant = self.total_pressure_drop( output, icoolpump=1, @@ -1478,7 +1497,10 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): nopolchan=npoltoto, label="Outboard blanket breeder liquid", ) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): deltap_bli_liq = self.total_pressure_drop( output, icoolpump=2, @@ -1509,7 +1531,10 @@ def thermo_hydraulic_model_pressure_drop_calculations(self, output: bool): deltap_blo_liq, ] - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): return [ dpres_fw_inboard_coolant, dpres_fw_outboard_coolant, @@ -1851,7 +1876,10 @@ def liquid_breeder_properties(self, output: bool = False): # Magnetic feild strength in T for Hartmann calculation # IB - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): self.data.fwbs.b_mag_blkt[0] = ( self.data.physics.b_plasma_toroidal_on_axis * self.data.physics.rmajor @@ -1862,7 +1890,10 @@ def liquid_breeder_properties(self, output: bool = False): ) ) # We do not use this if there is no IB blanket, but will use edge as fill value - if self.data.build.i_blkt_inboard == 0: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.NO_INBOARD_BLANKET + ): self.data.fwbs.b_mag_blkt[0] = ( self.data.physics.b_plasma_toroidal_on_axis * self.data.physics.rmajor @@ -2098,7 +2129,10 @@ def thermo_hydraulic_model(self, output: bool): # IB/OB Blanket (MW) # Neutron power deposited in inboard blanket (MW) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): self.data.blanket.p_blkt_nuclear_heat_inboard_mw = ( self.data.fwbs.p_blkt_nuclear_heat_total_mw * self.data.fwbs.vol_blkt_inboard @@ -2194,7 +2228,10 @@ def thermo_hydraulic_model(self, output: bool): ) # Outlet FW/inlet BB temp (mass flow FW = mass flow BB) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): fwoutleti = (f_nuc_fwi * self.data.fwbs.temp_blkt_coolant_out) + ( 1 - f_nuc_fwi ) * self.data.fwbs.temp_fw_coolant_in @@ -2289,7 +2326,10 @@ def thermo_hydraulic_model(self, output: bool): ) # If there is an IB blanket... - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): # Mass flow rates for inboard blanket coolants (kg/s) self.data.blanket.mflow_blkt_inboard_coolant = ( 1.0e6 @@ -2331,7 +2371,10 @@ def thermo_hydraulic_model(self, output: bool): ) / (24 * 3600) # If there is an IB blanket... - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): # Mass flow rate for inboard blanket coolant (kg/s) self.data.blanket.mflow_blkt_inboard_coolant = ( 1.0e6 @@ -2360,7 +2403,10 @@ def thermo_hydraulic_model(self, output: bool): # If there is an IB blanket... # Mass flow rate for inboard blanket coolant (kg/s) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): self.data.blanket.mflow_blkt_inboard_coolant = ( 1.0e6 * (self.data.blanket.p_blkt_nuclear_heat_inboard_mw) @@ -2384,13 +2430,19 @@ def thermo_hydraulic_model(self, output: bool): deltap_fwo = deltap[1] deltap_blo = deltap[2] if self.data.fwbs.i_blkt_dual_coolant > 0: - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): deltap_bli = deltap[3] deltap_blo_liq = deltap[4] deltap_bli_liq = deltap[5] else: deltap_blo_liq = deltap[3] - elif self.data.build.i_blkt_inboard == 1: + elif ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): deltap_bli = deltap[3] # Pumping Power @@ -2398,9 +2450,15 @@ def thermo_hydraulic_model(self, output: bool): if self.data.fwbs.i_fw_blkt_shared_coolant == FWBlktCoolantLoopTypes.SHARED_LOOP: # Total pressure drop in the first wall/blanket (Pa) if i_p_coolant_pumping == PumpingPowerModelTypes.MECHANICAL: - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): deltap_fw_blkt = deltap_fwi + deltap_bli + deltap_fwo + deltap_blo - if self.data.build.i_blkt_inboard == 0: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.NO_INBOARD_BLANKET + ): deltap_fw_blkt = deltap_fwi + deltap_fwo + deltap_blo elif ( i_p_coolant_pumping @@ -2439,9 +2497,15 @@ def thermo_hydraulic_model(self, output: bool): deltap_fw = deltap_fwi + deltap_fwo # Total pressure drop in the blanket (Pa) - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): deltap_blkt = deltap_bli + deltap_blo - if self.data.build.i_blkt_inboard == 0: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.NO_INBOARD_BLANKET + ): deltap_blkt = deltap_blo elif ( i_p_coolant_pumping @@ -2501,9 +2565,15 @@ def thermo_hydraulic_model(self, output: bool): if self.data.fwbs.i_blkt_dual_coolant > 0: # Total pressure drop in the blanket (Pa) if i_p_coolant_pumping == PumpingPowerModelTypes.MECHANICAL: - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): deltap_bl_liq = deltap_bli_liq + deltap_blo_liq - if self.data.build.i_blkt_inboard == 0: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.NO_INBOARD_BLANKET + ): deltap_bl_liq = deltap_blo_liq elif ( i_p_coolant_pumping diff --git a/process/models/blankets/dcll.py b/process/models/blankets/dcll.py index 04abf02534..25b49073eb 100644 --- a/process/models/blankets/dcll.py +++ b/process/models/blankets/dcll.py @@ -2,6 +2,7 @@ from process.core import ( process_output as po, ) +from process.data_structure.build_variables import InboardBlanketConfiguration from process.models.blankets.blanket_library import InboardBlanket, OutboardBlanket from process.models.engineering.ivc_functions import ( calculate_pipe_bend_radius, @@ -549,7 +550,10 @@ def dcll_masses(self, output: bool): self.data.dcll.f_vol_mfbss_pbli = 0.4436 # Calculate Volumes - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): # IB and OB blanket # BZ @@ -770,7 +774,10 @@ def dcll_masses(self, output: bool): ) # Total mass of IB/OB segment - if self.data.build.i_blkt_inboard == 1: + if ( + self.data.build.i_blkt_inboard + == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT + ): self.data.dcll.mass_segm_ib = ( self.data.fwbs.m_blkt_total * (self.data.fwbs.vol_blkt_inboard / self.data.fwbs.vol_blkt_total) diff --git a/tests/unit/models/blankets/test_blanket_library.py b/tests/unit/models/blankets/test_blanket_library.py index 55ac5ed1b2..348a807999 100644 --- a/tests/unit/models/blankets/test_blanket_library.py +++ b/tests/unit/models/blankets/test_blanket_library.py @@ -3,6 +3,7 @@ import numpy as np import pytest +from process.data_structure.build_variables import InboardBlanketConfiguration from process.models.blankets.blanket_library import InboardBlanket @@ -823,7 +824,7 @@ class LiquidBreederPropertiesParam(NamedTuple): np.array((0.0, 0.0), order="F"), order="F" ).transpose(), b_mag_blkt=np.array(np.array((5.0, 5.0), order="F"), order="F").transpose(), - i_blkt_inboard=1, + i_blkt_inboard=InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT, i_blkt_dual_coolant=0, b_plasma_toroidal_on_axis=5.7000000000000002, aspect=3, @@ -861,7 +862,7 @@ class LiquidBreederPropertiesParam(NamedTuple): np.array((0.0, 0.0), order="F"), order="F" ).transpose(), b_mag_blkt=np.array(np.array((5.0, 5.0), order="F"), order="F").transpose(), - i_blkt_inboard=1, + i_blkt_inboard=InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT, i_blkt_dual_coolant=0, b_plasma_toroidal_on_axis=5.7000000000000002, aspect=3, @@ -1647,7 +1648,11 @@ def test_liquid_breeder_properties_part_1(monkeypatch, blanket_library): monkeypatch.setattr(blanket_library.data.physics, "aspect", 3.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_inboard", 0.1) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_outboard", 0.2) - monkeypatch.setattr(blanket_library.data.build, "i_blkt_inboard", 1) + monkeypatch.setattr( + blanket_library.data.build, + "i_blkt_inboard", + InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT, + ) monkeypatch.setattr(blanket_library.data.fwbs, "inlet_temp_liq", 1.0) monkeypatch.setattr(blanket_library.data.fwbs, "outlet_temp_liq", 1.0) @@ -1721,7 +1726,11 @@ def test_liquid_breeder_properties_part_2(monkeypatch, blanket_library): monkeypatch.setattr(blanket_library.data.physics, "aspect", 3.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_inboard", 0.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_outboard", 0.2) - monkeypatch.setattr(blanket_library.data.build, "i_blkt_inboard", 0) + monkeypatch.setattr( + blanket_library.data.build, + "i_blkt_inboard", + InboardBlanketConfiguration.NO_INBOARD_BLANKET, + ) monkeypatch.setattr(blanket_library.data.fwbs, "i_blkt_liquid_breeder_type", 0) monkeypatch.setattr(blanket_library.data.fwbs, "inlet_temp_liq", 0.0) monkeypatch.setattr(blanket_library.data.fwbs, "outlet_temp_liq", 0.0) @@ -1746,7 +1755,11 @@ def test_liquid_breeder_properties_part_3(monkeypatch, blanket_library): monkeypatch.setattr(blanket_library.data.physics, "aspect", 3.0) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_inboard", 0.1) monkeypatch.setattr(blanket_library.data.build, "dr_blkt_outboard", 0.2) - monkeypatch.setattr(blanket_library.data.build, "i_blkt_inboard", 1) + monkeypatch.setattr( + blanket_library.data.build, + "i_blkt_inboard", + InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT, + ) monkeypatch.setattr(blanket_library.data.fwbs, "inlet_temp_liq", 0.0) monkeypatch.setattr(blanket_library.data.fwbs, "outlet_temp_liq", 1.0) diff --git a/tests/unit/models/blankets/test_ccfe_hcpb.py b/tests/unit/models/blankets/test_ccfe_hcpb.py index 04943678bc..8e9f8ae9b9 100644 --- a/tests/unit/models/blankets/test_ccfe_hcpb.py +++ b/tests/unit/models/blankets/test_ccfe_hcpb.py @@ -3,6 +3,7 @@ import pytest from process.data_structure import global_variables +from process.data_structure.build_variables import InboardBlanketConfiguration @pytest.fixture @@ -1409,7 +1410,7 @@ class ComponentMassesParam(NamedTuple): armour_fw_bl_mass=0, vol_blkt_inboard=315.83946385183026, vol_blkt_outboard=866.70391336775992, - i_blkt_inboard=1, + i_blkt_inboard=InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT, fblhebmi=0.40000000000000002, fblhebpi=0.65949999999999998, fblhebmo=0.40000000000000002, diff --git a/tests/unit/models/test_dcll.py b/tests/unit/models/test_dcll.py index d6133dd075..08c0d1585f 100644 --- a/tests/unit/models/test_dcll.py +++ b/tests/unit/models/test_dcll.py @@ -2,6 +2,8 @@ import pytest +from process.data_structure.build_variables import InboardBlanketConfiguration + @pytest.fixture def dcll(process_models): @@ -548,7 +550,7 @@ class DcllMassesParam(NamedTuple): blbmoth=0.27000000000000002, a_plasma_surface=1403.2719775669307, a_plasma_surface_outboard=949.22962703393853, - i_blkt_inboard=1, + i_blkt_inboard=InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT, vol_blkt_total=1397.9003011502937, vol_blkt_inboard=401.90579863726225, vol_blkt_outboard=995.99450251303142, @@ -667,7 +669,7 @@ class DcllMassesParam(NamedTuple): blbmoth=0.49699999999999994, a_plasma_surface=1403.2719775669307, a_plasma_surface_outboard=949.22962703393853, - i_blkt_inboard=1, + i_blkt_inboard=InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT, vol_blkt_total=1400.4860764869636, vol_blkt_inboard=402.02180553751157, vol_blkt_outboard=998.46427094945204,