Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions process/core/caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def call_models(self, xc: np.ndarray, m: int) -> tuple[float, np.ndarray]:

# Evaluate models up to 10 times; any more implies non-converging values
for _ in range(10):
self._call_models_once(xc)
self._call_models_once(xc, self.data)
# Evaluate objective function and constraints
objf = objective_function(data_structure.numerics.minmax, self.data)
conf, _, _, _, _ = constraints.constraint_eqns(m, -1, self.data)
Expand Down Expand Up @@ -161,7 +161,7 @@ def call_models_and_write_output(self, xc: np.ndarray, ifail: int):
# Divert OUT.DAT and MFILE.DAT output to scratch files for
# idempotence checking
OutputFileManager.open_idempotence_files()
self._call_models_once(xc)
self._call_models_once(xc, self.data)
# Write mfile
finalise(self.models, self.data, ifail)

Expand Down Expand Up @@ -244,7 +244,7 @@ def call_models_and_write_output(self, xc: np.ndarray, ifail: int):
non_idempotent_msg=non_idempotent_warning + "\n" + non_idempotent_table,
)

def _call_models_once(self, xc: np.ndarray):
def _call_models_once(self, xc: np.ndarray, data: DataStructure):
"""Call the physics and engineering models.

This method is the principal caller of all the physics and
Expand All @@ -255,6 +255,8 @@ def _call_models_once(self, xc: np.ndarray):
----------
xc : np.array
Array of optimisation parameters
data: DataStructure
data structure object
"""
# Number of active iteration variables
nvars = len(xc)
Expand All @@ -273,7 +275,7 @@ def _call_models_once(self, xc: np.ndarray):
return

# Inertial Fusion Energy calls
if data_structure.ife_variables.ife != 0:
if data.ife.ife != 0:
self.models.ife.run()
return

Expand Down
13 changes: 4 additions & 9 deletions process/core/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
from process.core.solver import iteration_variables
from process.core.solver.constraints import ConstraintManager
from process.data_structure.divertor_variables import init_divertor_variables
from process.data_structure.ife_variables import init_ife_variables
from process.data_structure.impurity_radiation_module import (
init_impurity_radiation_module,
)
Expand Down Expand Up @@ -72,7 +71,7 @@ def init_process(data: DataStructure):
set_active_constraints()

# set the device type (icase)
set_device_type()
set_device_type(data)

# Initialise the Stellarator
st_init(data)
Expand Down Expand Up @@ -252,7 +251,6 @@ def init_all_module_vars():
data_structure.numerics.init_numerics()
init_divertor_variables()
data_structure.global_variables.init_global_variables()
init_ife_variables()
init_impurity_radiation_module()
init_pfcoil_module()
init_physics_module()
Expand Down Expand Up @@ -394,10 +392,7 @@ def check_process(inputs, data): # noqa: ARG001
)

# Plasma profile consistency checks
if (
data_structure.ife_variables.ife != 1
and data_structure.physics_variables.i_plasma_pedestal == 1
):
if data.ife.ife != 1 and data_structure.physics_variables.i_plasma_pedestal == 1:
# Temperature checks
if (
data_structure.physics_variables.temp_plasma_pedestal_kev
Expand Down Expand Up @@ -1256,8 +1251,8 @@ def set_active_constraints():
data_structure.numerics.nineqns = num_constraints - data_structure.numerics.neqns


def set_device_type():
if data_structure.ife_variables.ife == 1:
def set_device_type(data):
if data.ife.ife == 1:
data_structure.global_variables.icase = "Inertial Fusion model"
elif data_structure.stellarator_variables.istell != 0:
data_structure.global_variables.icase = "Stellarator model"
128 changes: 62 additions & 66 deletions process/core/input.py

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions process/core/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from process.data_structure.first_wall_variables import FirstWallData
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.primary_pumping_variables import PrimaryPumpingData
from process.data_structure.pulse_variables import PulseData
from process.data_structure.reinke_variables import ReinkeData
Expand Down Expand Up @@ -47,6 +48,7 @@ class DataStructure:
dcll: DCLLData = initialise_later
current_drive: CurrentDriveData = initialise_later
heat_transport: HeatTransportData = initialise_later
ife: IFEData = initialise_later

def __post_init__(self):
for f in fields(self):
Expand Down
2 changes: 1 addition & 1 deletion process/core/output.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def write(models, data, _outfile):
return

# Call IFE output routine instead if relevant
if data_structure.ife_variables.ife != 0:
if data.ife.ife != 0:
models.ife.output()
return

Expand Down
8 changes: 4 additions & 4 deletions process/core/solver/constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -1187,11 +1187,11 @@ def constraint_equation_48(constraint_registration, data):


@ConstraintManager.register_constraint(50, "Hz", "<=")
def constraint_equation_50(constraint_registration, _data):
def constraint_equation_50(constraint_registration, data):
"""IFE option: Equation for repetition rate upper limit"""
return leq(
data_structure.ife_variables.reprat,
data_structure.ife_variables.rrmax,
data.ife.reprat,
data.ife.rrmax,
constraint_registration,
)

Expand Down Expand Up @@ -1223,7 +1223,7 @@ def constraint_equation_52(constraint_registration, data):
tbr: tritium breeding ratio
tbrmin: minimum tritium breeding ratio
"""
if data_structure.ife_variables.ife != 1:
if data.ife.ife != 1:
raise ProcessValueError(
"Constraint 52 is only supported when running the IFE model"
)
Expand Down
14 changes: 7 additions & 7 deletions process/core/solver/iteration_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,11 @@ class IterationVariable:
73: IterationVariable("dr_fw_plasma_gap_inboard", "build", 0.001, 10.00),
74: IterationVariable("dr_fw_plasma_gap_outboard", "build", 0.001, 10.00),
75: IterationVariable("f_dr_tf_outboard_inboard", "build", 0.200, 5.0),
81: IterationVariable("edrive", data_structure.ife_variables, 1.0e5, 5.0e7),
82: IterationVariable("drveff", data_structure.ife_variables, 0.010, 1.0),
83: IterationVariable("tgain", data_structure.ife_variables, 1.0, 500.0),
84: IterationVariable("chrad", data_structure.ife_variables, 0.1, 20.00),
85: IterationVariable("pdrive", data_structure.ife_variables, 1.0e6, 200.0e6),
81: IterationVariable("edrive", "ife", 1.0e5, 5.0e7),
82: IterationVariable("drveff", "ife", 0.010, 1.0),
83: IterationVariable("tgain", "ife", 1.0, 500.0),
84: IterationVariable("chrad", "ife", 0.1, 20.00),
85: IterationVariable("pdrive", "ife", 1.0e6, 200.0e6),
90: IterationVariable("blbuith", "build", 0.001, 2.0),
91: IterationVariable("blbuoth", "build", 0.001, 2.0),
93: IterationVariable("dr_shld_inboard", "build", 0.001, 10.00),
Expand Down Expand Up @@ -246,8 +246,8 @@ class IterationVariable:
152: IterationVariable(
"f_nd_plasma_separatrix_greenwald", data_structure.physics_variables, 0.001, 0.5
),
155: IterationVariable("pfusife", data_structure.ife_variables, 5.0e2, 3.0e3),
156: IterationVariable("rrin", data_structure.ife_variables, 1.0, 1.0e1),
155: IterationVariable("pfusife", "ife", 5.0e2, 3.0e3),
156: IterationVariable("rrin", "ife", 1.0, 1.0e1),
158: IterationVariable(
"dx_croco_strand_copper", data_structure.rebco_variables, 1.0e-3, 1.0e-1
),
Expand Down
Loading
Loading