From 06bccb6543deb3ca498d43ba7dd077e7b918cabe Mon Sep 17 00:00:00 2001 From: Clair Mould <86794332+clmould@users.noreply.github.com> Date: Mon, 18 May 2026 12:13:10 +0100 Subject: [PATCH] convert pf power vars to dataclass --- process/core/init.py | 2 - process/core/input.py | 8 +- process/core/model.py | 2 + process/core/solver/constraints.py | 6 +- process/core/solver/objectives.py | 3 +- process/data_structure/pf_power_variables.py | 120 ++++++++----------- process/models/costs/costs.py | 21 ++-- process/models/costs/costs_2015.py | 3 +- process/models/power.py | 65 +++++----- process/models/pulse.py | 3 +- tests/unit/models/test_costs_1990.py | 13 +- tests/unit/models/test_costs_2015.py | 3 +- tests/unit/models/test_power.py | 43 ++++--- tests/unit/models/test_pulse.py | 3 +- 14 files changed, 130 insertions(+), 165 deletions(-) diff --git a/process/core/init.py b/process/core/init.py index 348267f1b..badd1c714 100644 --- a/process/core/init.py +++ b/process/core/init.py @@ -20,7 +20,6 @@ init_impurity_radiation_module, ) from process.data_structure.neoclassics_variables import init_neoclassics_variables -from process.data_structure.pf_power_variables import init_pf_power_variables from process.data_structure.physics_variables import ( init_physics_module, init_physics_variables, @@ -250,7 +249,6 @@ def init_all_module_vars(): init_superconducting_tf_coil_variables() init_tfcoil_variables() constants.init_constants() - init_pf_power_variables() init_rebco_variables() init_neoclassics_variables() diff --git a/process/core/input.py b/process/core/input.py index 1605ce419..565a13087 100644 --- a/process/core/input.py +++ b/process/core/input.py @@ -668,9 +668,7 @@ def __post_init__(self): "max_vv_stress": InputVariable( data_structure.tfcoil_variables, float, range=(100000.0, 500000000.0) ), - "maxpoloidalpower": InputVariable( - data_structure.pf_power_variables, float, range=(0.0, 2000.0) - ), + "maxpoloidalpower": InputVariable("pf_power", float, range=(0.0, 2000.0)), "pflux_fw_rad_max": InputVariable("constraints", float, range=(0.1, 10.0)), "mbvfac": InputVariable("buildings", float, range=(0.9, 3.0)), "mcdriv": InputVariable("ife", float, range=(0.1, 10.0)), @@ -1266,9 +1264,7 @@ def __post_init__(self): "ireactor": InputVariable("costs", int, choices=[0, 1]), "irefprop": InputVariable("fwbs", int, choices=[0, 1]), "i_hcd_calculations": InputVariable("current_drive", int, choices=[0, 1]), - "i_pf_energy_storage_source": InputVariable( - data_structure.pf_power_variables, int, range=(1, 3) - ), + "i_pf_energy_storage_source": InputVariable("pf_power", int, range=(1, 3)), "istell": InputVariable("stellarator", int, range=(0, 6)), "isthtr": InputVariable("stellarator", int, range=(1, 3)), "istore": InputVariable("pulse", int, range=(1, 3)), diff --git a/process/core/model.py b/process/core/model.py index 1f7b03db9..37ae1e4e9 100644 --- a/process/core/model.py +++ b/process/core/model.py @@ -16,6 +16,7 @@ from process.data_structure.fwbs_variables import FWBSData from process.data_structure.heat_transport_variables import HeatTransportData from process.data_structure.ife_variables import IFEData +from process.data_structure.pf_power_variables import PFPowerData from process.data_structure.pfcoil_variables import PFCoilData from process.data_structure.power_variables import PowerData from process.data_structure.primary_pumping_variables import PrimaryPumpingData @@ -59,6 +60,7 @@ class DataStructure: power: PowerData = initialise_later stellarator: StellaratorData = initialise_later stellarator_config: StellaratorConfigData = initialise_later + pf_power: PFPowerData = initialise_later def __post_init__(self): for f in fields(self): diff --git a/process/core/solver/constraints.py b/process/core/solver/constraints.py index 3b3ca07df..201d3a0c8 100644 --- a/process/core/solver/constraints.py +++ b/process/core/solver/constraints.py @@ -1376,15 +1376,15 @@ def constraint_equation_65(constraint_registration, _data): @ConstraintManager.register_constraint(66, "MW", "<=") -def constrain_equation_66(constraint_registration, _data): +def constrain_equation_66(constraint_registration, data): """Upper limit on rate of change of energy in poloidal field maxpoloidalpower: Maximum permitted absolute rate of change of stored energy in poloidal field (MW) peakpoloidalpower: Peak absolute rate of change of stored energy in poloidal field (MW) (11/01/16) """ return leq( - data_structure.pf_power_variables.peakpoloidalpower, - data_structure.pf_power_variables.maxpoloidalpower, + data.pf_power.peakpoloidalpower, + data.pf_power.maxpoloidalpower, constraint_registration, ) diff --git a/process/core/solver/objectives.py b/process/core/solver/objectives.py index ce3532890..716607e44 100644 --- a/process/core/solver/objectives.py +++ b/process/core/solver/objectives.py @@ -3,7 +3,6 @@ from process.core.exceptions import ProcessValueError from process.core.model import DataStructure from process.data_structure import ( - pf_power_variables, physics_variables, tfcoil_variables, ) @@ -70,7 +69,7 @@ def objective_function(minmax: int, data: DataStructure) -> float: objective_metric = physics_variables.pflux_fw_neutron_mw case 4: objective_metric = ( - tfcoil_variables.tfcmw + 1e-3 * pf_power_variables.srcktpm + tfcoil_variables.tfcmw + 1e-3 * data.pf_power.srcktpm ) / 10.0 case 5: objective_metric = physics_variables.p_fusion_total_mw / ( diff --git a/process/data_structure/pf_power_variables.py b/process/data_structure/pf_power_variables.py index ae398ff10..fff22c041 100644 --- a/process/data_structure/pf_power_variables.py +++ b/process/data_structure/pf_power_variables.py @@ -2,80 +2,56 @@ Module containing global variables relating to the PF coil power conversion system """ +from dataclasses import dataclass, field + import numpy as np -acptmax: float = None -"""average of currents in PF circuits (kA)""" -ensxpfm: float = None -"""maximum stored energy in the PF circuits (MJ)""" +@dataclass +class PFPowerData: + acptmax: float = 0.0 + """average of currents in PF circuits (kA)""" + + ensxpfm: float = 0.0 + """maximum stored energy in the PF circuits (MJ)""" + + i_pf_energy_storage_source: int = 2 + """Switch for PF coil energy storage option: + - =1 all power from MGF (motor-generator flywheel) units + - =2 all pulsed power from line + - =3 PF power from MGF, heating from line + (In fact, options 1 and 3 are not treated differently) + """ + + pfckts: float = 0.0 + """number of PF coil circuits""" + + spfbusl: float = 0.0 + """total PF coil circuit bus length (m)""" + + spsmva: float = 0.0 + """sum of PF power supply ratings (MVA)""" + + srcktpm: float = 0.0 + """sum of resistive PF coil power (kW)""" + + vpfskv: float = 0.0 + """PF coil voltage (kV)""" + + peakpoloidalpower: float = 0.0 + """Peak absolute rate of change of stored energy in poloidal field (MW)""" + + maxpoloidalpower: float = 1000.0 + """Maximum permitted absolute rate of change of stored energy in poloidal field (MW)""" + + poloidalpower: list[float] = field(default_factory=lambda: np.zeros(5)) + """Poloidal power usage at time t (MW)""" + + f_p_pf_energy_store_loss: float = 0.1 + """Fraction of PF magnetic energy moved into/out of storage that is lost each time""" + + f_p_pf_psu_loss: float = 0.1 + """Fraction of inductive power flow lost in the PF power supplies/converters.""" -i_pf_energy_storage_source: int = None -"""Switch for PF coil energy storage option: - - =1 all power from MGF (motor-generator flywheel) units - - =2 all pulsed power from line - - =3 PF power from MGF, heating from line - (In fact, options 1 and 3 are not treated differently) -""" -pfckts: float = None -"""number of PF coil circuits""" - -spfbusl: float = None -"""total PF coil circuit bus length (m)""" - -spsmva: float = None -"""sum of PF power supply ratings (MVA)""" - -srcktpm: float = None -"""sum of resistive PF coil power (kW)""" - -vpfskv: float = None -"""PF coil voltage (kV)""" - -peakpoloidalpower: float = None -"""Peak absolute rate of change of stored energy in poloidal field (MW)""" - -maxpoloidalpower: float = None -"""Maximum permitted absolute rate of change of stored energy in poloidal field (MW)""" - -poloidalpower: list[float] = None -"""Poloidal power usage at time t (MW)""" - -f_p_pf_energy_store_loss: float = None -"""Fraction of PF magnetic energy moved into/out of storage that is lost each time""" - -f_p_pf_psu_loss: float = None -"""Fraction of inductive power flow lost in the PF power supplies/converters.""" - - -def init_pf_power_variables(): - """Initialise PF coil power variables""" - global \ - acptmax, \ - ensxpfm, \ - i_pf_energy_storage_source, \ - pfckts, \ - spfbusl, \ - spsmva, \ - srcktpm, \ - vpfskv, \ - peakpoloidalpower, \ - maxpoloidalpower, \ - poloidalpower, \ - f_p_pf_energy_store_loss, \ - f_p_pf_psu_loss - - acptmax = 0.0 - ensxpfm = 0.0 - i_pf_energy_storage_source = 2 - pfckts = 0.0 - spfbusl = 0.0 - spsmva = 0.0 - srcktpm = 0.0 - vpfskv = 0.0 - peakpoloidalpower = 0.0 - maxpoloidalpower = 1000.0 - poloidalpower = np.zeros(5) - f_p_pf_energy_store_loss = 0.1 - f_p_pf_psu_loss = 0.1 +CREATE_DICTS_FROM_DATACLASS = PFPowerData diff --git a/process/models/costs/costs.py b/process/models/costs/costs.py index 521ee7f6e..bc68a495e 100644 --- a/process/models/costs/costs.py +++ b/process/models/costs/costs.py @@ -7,7 +7,6 @@ from process.core.exceptions import ProcessValueError from process.core.model import Model from process.data_structure import ( - pf_power_variables, physics_variables, tfcoil_variables, ) @@ -2132,7 +2131,7 @@ def acc2252(self): # Account 225.2.2 : PF coil instrumentation and control self.data.costs.c22522 = ( - 1.0e-6 * self.data.costs.ucpfic * pf_power_variables.pfckts * 30.0e0 + 1.0e-6 * self.data.costs.ucpfic * self.data.pf_power.pfckts * 30.0e0 ) self.data.costs.c22522 = self.data.costs.fkind * self.data.costs.c22522 @@ -2141,19 +2140,19 @@ def acc2252(self): self.data.costs.c22523 = ( 1.0e-6 * self.data.costs.ucpfb - * pf_power_variables.spfbusl - * pf_power_variables.acptmax + * self.data.pf_power.spfbusl + * self.data.pf_power.acptmax ) self.data.costs.c22523 = self.data.costs.fkind * self.data.costs.c22523 # Account 225.2.4 : PF coil burn power supplies - if pf_power_variables.pfckts != 0.0e0: # noqa: RUF069 + if self.data.pf_power.pfckts != 0.0e0: # noqa: RUF069 self.data.costs.c22524 = ( 1.0e-6 * self.data.costs.ucpfbs - * pf_power_variables.pfckts - * (pf_power_variables.srcktpm / pf_power_variables.pfckts) ** 0.7e0 + * self.data.pf_power.pfckts + * (self.data.pf_power.srcktpm / self.data.pf_power.pfckts) ** 0.7e0 ) else: self.data.costs.c22524 = 0.0e0 @@ -2165,22 +2164,22 @@ def acc2252(self): self.data.costs.c22525 = ( 1.0e-6 * self.data.costs.ucpfbk - * pf_power_variables.pfckts - * (pf_power_variables.acptmax * pf_power_variables.vpfskv) ** 0.7e0 + * self.data.pf_power.pfckts + * (self.data.pf_power.acptmax * self.data.pf_power.vpfskv) ** 0.7e0 ) self.data.costs.c22525 = self.data.costs.fkind * self.data.costs.c22525 # Account 225.2.6 : PF coil dump resistors self.data.costs.c22526 = ( - 1.0e-6 * self.data.costs.ucpfdr1 * pf_power_variables.ensxpfm + 1.0e-6 * self.data.costs.ucpfdr1 * self.data.pf_power.ensxpfm ) self.data.costs.c22526 = self.data.costs.fkind * self.data.costs.c22526 # Account 225.2.7 : PF coil AC breakers self.data.costs.c22527 = ( - 1.0e-6 * self.data.costs.ucpfcb * pf_power_variables.pfckts + 1.0e-6 * self.data.costs.ucpfcb * self.data.pf_power.pfckts ) self.data.costs.c22527 = self.data.costs.fkind * self.data.costs.c22527 diff --git a/process/models/costs/costs_2015.py b/process/models/costs/costs_2015.py index be133393e..5ad234e4e 100644 --- a/process/models/costs/costs_2015.py +++ b/process/models/costs/costs_2015.py @@ -7,7 +7,6 @@ from process.core.model import Model from process.data_structure import ( global_variables, - pf_power_variables, physics_variables, tfcoil_variables, ) @@ -1087,7 +1086,7 @@ def calc_remaining_subsystems(self): # For ITER value see # K:\Power Plant Physics and Technology\PROCESS\PROCESS documentation papers\resistive diffusion time.xmcd or pdf self.data.costs_2015.s_k[51] = ( - pf_power_variables.ensxpfm * 1.0e6 / physics_variables.t_plasma_res_diffusion + self.data.pf_power.ensxpfm * 1.0e6 / physics_variables.t_plasma_res_diffusion ) self.data.costs_2015.s_kref[51] = 8.0e9 / 953.0e0 self.data.costs_2015.s_cost[51] = ( diff --git a/process/models/power.py b/process/models/power.py index 803907f0d..a81f0c06f 100644 --- a/process/models/power.py +++ b/process/models/power.py @@ -13,7 +13,6 @@ from process.core.model import Model from process.data_structure import ( numerics, - pf_power_variables, physics_variables, tfcoil_variables, ) @@ -109,6 +108,7 @@ def _pf_loss_power_supply_j( n_pf_cs_plasma_circuits: int, c_pf_coil_turn: np.ndarray, ind_pf_cs_plasma_mutual: np.ndarray, + f_p_pf_psu_loss: float, ) -> float: """ Power supply conversion loss over interval idx_time_interval @@ -126,6 +126,8 @@ def _pf_loss_power_supply_j( PF circuit current per turn at pulse times [A] ind_pf_cs_plasma_mutual : np.ndarray mutual inductance matrix between PF circuits [H] + f_p_pf_psu_loss: float + Fraction of inductive power flow lost in the PF power supplies/converters Returns ------- @@ -151,9 +153,7 @@ def _pf_loss_power_supply_j( ) e_loss_pf_psu_j += ( - 0.5e0 - * pf_power_variables.f_p_pf_psu_loss - * abs(c_pf_sum_a * delta_flux_linkage_wb) + 0.5e0 * f_p_pf_psu_loss * abs(c_pf_sum_a * delta_flux_linkage_wb) ) return e_loss_pf_psu_j @@ -267,6 +267,7 @@ def _pf_loss_interval_total_j( n_pf_cs_plasma_circuits=n_pf_cs_plasma_circuits, c_pf_coil_turn=c_pf_coil_turn, ind_pf_cs_plasma_mutual=ind_pf_cs_plasma_mutual, + f_p_pf_psu_loss=self.data.pf_power.f_p_pf_psu_loss, ) e_loss_pf_bus_j = self._pf_loss_busbar_j( @@ -300,7 +301,7 @@ def pfpwr(self, output: bool): c_pf_coil_turn = self.data.pf_coil.c_pf_coil_turn # [A] ind_pf_cs_plasma_mutual = self.data.pf_coil.ind_pf_cs_plasma_mutual # [H] f_p_pf_energy_store_loss = ( - pf_power_variables.f_p_pf_energy_store_loss + self.data.pf_power.f_p_pf_energy_store_loss ) # [unitless] n_pf_cs_plasma_circuits = self.data.pf_coil.n_pf_cs_plasma_circuits # [unitless] @@ -333,7 +334,7 @@ def pfpwr(self, output: bool): # Map PF group to representative circuit index (used for busbar I^2R per circuit) pf_group_circuit_index = np.zeros((n_pf_coil_groups,), dtype=int) - pf_power_variables.srcktpm = 0.0e0 + self.data.pf_power.srcktpm = 0.0e0 pfbuspwr = 0.0e0 for a_pf_bus_cm in range(n_pf_coil_groups): @@ -392,7 +393,7 @@ def pfpwr(self, output: bool): # Compute the sum of resistive power in the PF circuits, kW pfbuspwr += 1.0e-3 * res_pf_bus[a_pf_bus_cm] * cptburn**2 - pf_power_variables.srcktpm += ( + self.data.pf_power.srcktpm += ( 1.0e3 * p_pf_circuit_resistive_peak[a_pf_bus_cm] ) @@ -490,7 +491,7 @@ def pfpwr(self, output: bool): ) > 1.0e0 ): - pf_power_variables.poloidalpower[idx_time_interval] = ( + self.data.pf_power.poloidalpower[idx_time_interval] = ( poloidalenergy[idx_time_interval + 1] - poloidalenergy[idx_time_interval] ) / ( @@ -499,7 +500,7 @@ def pfpwr(self, output: bool): ) else: # Flag when an interval is small or zero MDK 30/11/16 - pf_power_variables.poloidalpower[idx_time_interval] = 9.9e9 + self.data.pf_power.poloidalpower[idx_time_interval] = 9.9e9 dt_pulse_phase_s = ( t_pulse_cumulative[idx_time_interval + 1] @@ -536,22 +537,22 @@ def pfpwr(self, output: bool): # Compute the maximum stored energy and the maximum dissipative # energy in all the PF circuits over the entire cycle time, MJ # ensxpfm = 1.0e-6 * ensxpf - pf_power_variables.ensxpfm = 1.0e-6 * max(poloidalenergy) + self.data.pf_power.ensxpfm = 1.0e-6 * max(poloidalenergy) # Peak absolute rate of change of stored energy in poloidal field (MW) - pf_power_variables.peakpoloidalpower = ( - max(abs(pf_power_variables.poloidalpower)) / 1.0e6 + self.data.pf_power.peakpoloidalpower = ( + max(abs(self.data.pf_power.poloidalpower)) / 1.0e6 ) # Maximum total MVA requirements self.data.heat_transport.peakmva = max((powpfr + powpfi), powpfr2) - pf_power_variables.vpfskv = 20.0e0 - pf_power_variables.pfckts = ( + self.data.pf_power.vpfskv = 20.0e0 + self.data.pf_power.pfckts = ( self.data.pf_coil.n_pf_cs_plasma_circuits - 2 ) + 6.0e0 - pf_power_variables.spfbusl = pfbusl * pf_power_variables.pfckts - pf_power_variables.acptmax = 0.0e0 - pf_power_variables.spsmva = 0.0e0 + self.data.pf_power.spfbusl = pfbusl * self.data.pf_power.pfckts + self.data.pf_power.acptmax = 0.0e0 + self.data.pf_power.spsmva = 0.0e0 for idx_circuit in range(self.data.pf_coil.n_pf_cs_plasma_circuits - 1): # Power supply MVA for each PF circuit @@ -561,13 +562,13 @@ def pfpwr(self, output: bool): ) # Sum of the power supply MVA of the PF circuits - pf_power_variables.spsmva += psmva[idx_circuit] + self.data.pf_power.spsmva += psmva[idx_circuit] # Average of the maximum currents in the PF circuits, kA - pf_power_variables.acptmax += ( + self.data.pf_power.acptmax += ( 1.0e-3 * abs(self.data.pf_coil.c_pf_coil_turn_peak_input[idx_circuit]) - / pf_power_variables.pfckts + / self.data.pf_power.pfckts ) # PF wall plug power dissipated in power supply for ohmic heating (MW) @@ -589,20 +590,20 @@ def pfpwr(self, output: bool): self.outfile, "Number of PF coil circuits", "(pfckts)", - pf_power_variables.pfckts, + self.data.pf_power.pfckts, ) po.ovarre( self.outfile, "Sum of PF power supply ratings (MVA)", "(spsmva)", - pf_power_variables.spsmva, + self.data.pf_power.spsmva, "OP ", ) po.ovarre( self.outfile, "Total PF coil circuit bus length (m)", "(spfbusl)", - pf_power_variables.spfbusl, + self.data.pf_power.spfbusl, "OP ", ) po.ovarre( @@ -616,14 +617,14 @@ def pfpwr(self, output: bool): self.outfile, "Total PF coil resistive power (kW)", "(srcktpm)", - pf_power_variables.srcktpm, + self.data.pf_power.srcktpm, "OP ", ) po.ovarre( self.outfile, "Maximum PF coil voltage (kV)", "(vpfskv)", - pf_power_variables.vpfskv, + self.data.pf_power.vpfskv, ) po.ovarre( self.outfile, @@ -641,14 +642,14 @@ def pfpwr(self, output: bool): self.outfile, "Maximum stored energy in poloidal field (MJ)", "(ensxpfm)", - pf_power_variables.ensxpfm, + self.data.pf_power.ensxpfm, "OP ", ) po.ovarre( self.outfile, "Peak absolute rate of change of stored energy in poloidal field (MW)", "(peakpoloidalpower)", - pf_power_variables.peakpoloidalpower, + self.data.pf_power.peakpoloidalpower, "OP ", ) @@ -658,7 +659,7 @@ def pfpwr(self, output: bool): "Max permitted abs rate of change of stored energy in poloidal " "field (MW)", "maxpoloidalpower", - pf_power_variables.maxpoloidalpower, + self.data.pf_power.maxpoloidalpower, ) if any(poloidalenergy < 0.0e0): @@ -686,8 +687,8 @@ def acpow(self, output: bool): """ ptfmw = self.data.heat_transport.p_tf_electric_supplies_mw - ppfmw = 1.0e-3 * pf_power_variables.srcktpm - if pf_power_variables.i_pf_energy_storage_source == 2: + ppfmw = 1.0e-3 * self.data.pf_power.srcktpm + if self.data.pf_power.i_pf_energy_storage_source == 2: ppfmw += self.data.heat_transport.peakmva # Power to plasma heating supplies, MW @@ -715,7 +716,7 @@ def acpow(self, output: bool): # Add contribution from motor-generator flywheels if these are part of # the PF coil energy storage system - if pf_power_variables.i_pf_energy_storage_source != 2: + if self.data.pf_power.i_pf_energy_storage_source != 2: self.data.heat_transport.pacpmw += self.data.heat_transport.fmgdmw # Estimate of the total low voltage power, MW @@ -1036,7 +1037,7 @@ def calculate_cryo_loads(self): tfcoil_variables.tfcryoarea, self.data.structure.coldmass, self.data.fwbs.p_tf_nuclear_heat_mw, - pf_power_variables.ensxpfm, + self.data.pf_power.ensxpfm, self.data.times.t_plant_pulse_plasma_present, tfcoil_variables.c_tf_turn, tfcoil_variables.n_tf_coils, diff --git a/process/models/pulse.py b/process/models/pulse.py index 184e946f1..3adda0014 100644 --- a/process/models/pulse.py +++ b/process/models/pulse.py @@ -7,7 +7,6 @@ from process.core.model import Model from process.data_structure import ( numerics, - pf_power_variables, physics_variables, ) @@ -106,7 +105,7 @@ def tohswg(self, output: bool): # Central Solenoid power source emf (volts) - v = pf_power_variables.vpfskv * 1.0e3 + v = self.data.pf_power.vpfskv * 1.0e3 # Mutual inductance between Central Solenoid and plasma (H) diff --git a/tests/unit/models/test_costs_1990.py b/tests/unit/models/test_costs_1990.py index 452265d2e..164c7c414 100644 --- a/tests/unit/models/test_costs_1990.py +++ b/tests/unit/models/test_costs_1990.py @@ -7,7 +7,6 @@ from process import data_structure from process.data_structure import ( - pf_power_variables, physics_variables, tfcoil_variables, ) @@ -3649,17 +3648,17 @@ def test_acc2252(acc2252param, monkeypatch, costs): monkeypatch.setattr(costs.data.heat_transport, "peakmva", acc2252param.peakmva) - monkeypatch.setattr(pf_power_variables, "ensxpfm", acc2252param.ensxpfm) + monkeypatch.setattr(costs.data.pf_power, "ensxpfm", acc2252param.ensxpfm) - monkeypatch.setattr(pf_power_variables, "spfbusl", acc2252param.spfbusl) + monkeypatch.setattr(costs.data.pf_power, "spfbusl", acc2252param.spfbusl) - monkeypatch.setattr(pf_power_variables, "pfckts", acc2252param.pfckts) + monkeypatch.setattr(costs.data.pf_power, "pfckts", acc2252param.pfckts) - monkeypatch.setattr(pf_power_variables, "srcktpm", acc2252param.srcktpm) + monkeypatch.setattr(costs.data.pf_power, "srcktpm", acc2252param.srcktpm) - monkeypatch.setattr(pf_power_variables, "vpfskv", acc2252param.vpfskv) + monkeypatch.setattr(costs.data.pf_power, "vpfskv", acc2252param.vpfskv) - monkeypatch.setattr(pf_power_variables, "acptmax", acc2252param.acptmax) + monkeypatch.setattr(costs.data.pf_power, "acptmax", acc2252param.acptmax) monkeypatch.setattr(costs.data.costs, "c22", acc2252param.c22) diff --git a/tests/unit/models/test_costs_2015.py b/tests/unit/models/test_costs_2015.py index e5dc1d2b4..f619c7ef4 100644 --- a/tests/unit/models/test_costs_2015.py +++ b/tests/unit/models/test_costs_2015.py @@ -6,7 +6,6 @@ import pytest from process.data_structure import ( - pf_power_variables, physics_variables, tfcoil_variables, ) @@ -15944,7 +15943,7 @@ def test_calc_remaining_subsystems(calcremainingsubsystemsparam, monkeypatch, co ) monkeypatch.setattr( - pf_power_variables, + costs2015.data.pf_power, "ensxpfm", calcremainingsubsystemsparam.ensxpfm, ) diff --git a/tests/unit/models/test_power.py b/tests/unit/models/test_power.py index 11e8c5b23..f2e9f140a 100644 --- a/tests/unit/models/test_power.py +++ b/tests/unit/models/test_power.py @@ -5,7 +5,6 @@ from process.data_structure import ( numerics, - pf_power_variables, physics_variables, tfcoil_variables, ) @@ -1761,29 +1760,29 @@ def test_pfpwr(pfpwrparam, monkeypatch, power): monkeypatch.setattr(power.data.heat_transport, "peakmva", pfpwrparam.peakmva) - monkeypatch.setattr(pf_power_variables, "pfckts", pfpwrparam.pfckts) + monkeypatch.setattr(power.data.pf_power, "pfckts", pfpwrparam.pfckts) monkeypatch.setattr( - pf_power_variables, "maxpoloidalpower", pfpwrparam.maxpoloidalpower + power.data.pf_power, "maxpoloidalpower", pfpwrparam.maxpoloidalpower ) monkeypatch.setattr( - pf_power_variables, "peakpoloidalpower", pfpwrparam.peakpoloidalpower + power.data.pf_power, "peakpoloidalpower", pfpwrparam.peakpoloidalpower ) - monkeypatch.setattr(pf_power_variables, "spfbusl", pfpwrparam.spfbusl) + monkeypatch.setattr(power.data.pf_power, "spfbusl", pfpwrparam.spfbusl) - monkeypatch.setattr(pf_power_variables, "poloidalpower", pfpwrparam.poloidalpower) + monkeypatch.setattr(power.data.pf_power, "poloidalpower", pfpwrparam.poloidalpower) - monkeypatch.setattr(pf_power_variables, "spsmva", pfpwrparam.spsmva) + monkeypatch.setattr(power.data.pf_power, "spsmva", pfpwrparam.spsmva) - monkeypatch.setattr(pf_power_variables, "vpfskv", pfpwrparam.vpfskv) + monkeypatch.setattr(power.data.pf_power, "vpfskv", pfpwrparam.vpfskv) - monkeypatch.setattr(pf_power_variables, "ensxpfm", pfpwrparam.ensxpfm) + monkeypatch.setattr(power.data.pf_power, "ensxpfm", pfpwrparam.ensxpfm) - monkeypatch.setattr(pf_power_variables, "acptmax", pfpwrparam.acptmax) + monkeypatch.setattr(power.data.pf_power, "acptmax", pfpwrparam.acptmax) - monkeypatch.setattr(pf_power_variables, "srcktpm", pfpwrparam.srcktpm) + monkeypatch.setattr(power.data.pf_power, "srcktpm", pfpwrparam.srcktpm) monkeypatch.setattr( power.data.pf_coil, "n_pf_coil_groups", pfpwrparam.n_pf_coil_groups @@ -1871,27 +1870,27 @@ def test_pfpwr(pfpwrparam, monkeypatch, power): pfpwrparam.expected_peakmva ) - assert pf_power_variables.pfckts == pytest.approx(pfpwrparam.expected_pfckts) + assert power.data.pf_power.pfckts == pytest.approx(pfpwrparam.expected_pfckts) - assert pf_power_variables.peakpoloidalpower == pytest.approx( + assert power.data.pf_power.peakpoloidalpower == pytest.approx( pfpwrparam.expected_peakpoloidalpower ) - assert pf_power_variables.spfbusl == pytest.approx(pfpwrparam.expected_spfbusl) + assert power.data.pf_power.spfbusl == pytest.approx(pfpwrparam.expected_spfbusl) - assert pf_power_variables.poloidalpower == pytest.approx( + assert power.data.pf_power.poloidalpower == pytest.approx( pfpwrparam.expected_poloidalpower ) - assert pf_power_variables.spsmva == pytest.approx(pfpwrparam.expected_spsmva) + assert power.data.pf_power.spsmva == pytest.approx(pfpwrparam.expected_spsmva) - assert pf_power_variables.vpfskv == pytest.approx(pfpwrparam.expected_vpfskv) + assert power.data.pf_power.vpfskv == pytest.approx(pfpwrparam.expected_vpfskv) - assert pf_power_variables.ensxpfm == pytest.approx(pfpwrparam.expected_ensxpfm) + assert power.data.pf_power.ensxpfm == pytest.approx(pfpwrparam.expected_ensxpfm) - assert pf_power_variables.acptmax == pytest.approx(pfpwrparam.expected_acptmax) + assert power.data.pf_power.acptmax == pytest.approx(pfpwrparam.expected_acptmax) - assert pf_power_variables.srcktpm == pytest.approx(pfpwrparam.expected_srcktpm) + assert power.data.pf_power.srcktpm == pytest.approx(pfpwrparam.expected_srcktpm) class AcpowParam(NamedTuple): @@ -2059,12 +2058,12 @@ def test_acpow(acpowparam, monkeypatch, power): monkeypatch.setattr(power.data.heat_transport, "pacpmw", acpowparam.pacpmw) monkeypatch.setattr( - pf_power_variables, + power.data.pf_power, "i_pf_energy_storage_source", acpowparam.i_pf_energy_storage_source, ) - monkeypatch.setattr(pf_power_variables, "srcktpm", acpowparam.srcktpm) + monkeypatch.setattr(power.data.pf_power, "srcktpm", acpowparam.srcktpm) power.acpow(output=False) diff --git a/tests/unit/models/test_pulse.py b/tests/unit/models/test_pulse.py index b5cae3512..b0f1c96bf 100644 --- a/tests/unit/models/test_pulse.py +++ b/tests/unit/models/test_pulse.py @@ -5,7 +5,6 @@ from process.data_structure import ( numerics, - pf_power_variables, physics_variables, ) @@ -1198,7 +1197,7 @@ def test_tohswg(tohswgparam, monkeypatch, pulse): tohswgparam.t_current_ramp_up_min, ) - monkeypatch.setattr(pf_power_variables, "vpfskv", tohswgparam.vpfskv) + monkeypatch.setattr(pulse.data.pf_power, "vpfskv", tohswgparam.vpfskv) monkeypatch.setattr( pulse.data.pf_coil,