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
8 changes: 3 additions & 5 deletions examples/single_model_evaluation.ex.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
# Print initial values of interest
def print_values():
print(
f"W frac = {data_structure.impurity_radiation_module.f_nd_impurity_electron_array[13]:.3e}"
f"W frac = {single_run.data.impurity_radiation.f_nd_impurity_electron_array[13]:.3e}"
)
print(f"p_plasma_rad_mw = {data_structure.physics_variables.p_plasma_rad_mw:.3e}")
print(
Expand All @@ -65,7 +65,7 @@ def print_values():
# Now try increasing the tungsten impurity fraction to see if there's a change in the divertor power.

# %%
data_structure.impurity_radiation_module.f_nd_impurity_electron_array[13] = 5.0e-5
single_run.data.impurity_radiation.f_nd_impurity_electron_array[13] = 5.0e-5
single_run.models.physics.run()
print_values()

Expand All @@ -90,9 +90,7 @@ def run_impurities(w_imp_fracs):
# Loop over W impurity values, evaluate model and store responses at each point
for i, imp_frac in enumerate(w_imp_fracs):
# Set W impurity fraction, then run physics model
data_structure.impurity_radiation_module.f_nd_impurity_electron_array[13] = (
imp_frac
)
single_run.data.impurity_radiation.f_nd_impurity_electron_array[13] = imp_frac
single_run.models.physics.run()

# Evaluate constraint equation 15 (L-H threshold constraint)
Expand Down
13 changes: 5 additions & 8 deletions process/core/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@
from process.core.log import logging_model_handler
from process.core.solver import iteration_variables
from process.core.solver.constraints import ConstraintManager
from process.data_structure.impurity_radiation_module import (
init_impurity_radiation_module,
)
from process.data_structure.impurity_radiation_variables import N_IMPURITIES
from process.data_structure.physics_variables import (
init_physics_module,
init_physics_variables,
Expand Down Expand Up @@ -241,7 +239,6 @@ def init_all_module_vars():
logging_model_handler.clear_logs()
data_structure.numerics.init_numerics()
data_structure.global_variables.init_global_variables()
init_impurity_radiation_module()
init_physics_module()
init_physics_variables()
init_scan_variables()
Expand Down Expand Up @@ -355,16 +352,16 @@ def check_process(inputs, data): # noqa: ARG001
data.buildings.triv = 0.0
data.heat_transport.p_tritium_plant_electric_mw = 0.0

if data_structure.impurity_radiation_module.f_nd_impurity_electrons[1] != 0.1: # noqa: RUF069
if data.impurity_radiation.f_nd_impurity_electrons[1] != 0.1: # noqa: RUF069
raise ProcessValidationError(
"The thermal alpha/electron density ratio should be controlled using f_nd_alpha_electron (itv 109) and not f_nd_impurity_electrons(2)."
"f_nd_impurity_electrons(2) should be removed from the input file, or set to the default value 0.1D0."
)

# Impurity fractions
for imp in range(data_structure.impurity_radiation_module.N_IMPURITIES):
data_structure.impurity_radiation_module.f_nd_impurity_electron_array[imp] = (
data_structure.impurity_radiation_module.f_nd_impurity_electrons[imp]
for imp in range(N_IMPURITIES):
data.impurity_radiation.f_nd_impurity_electron_array[imp] = (
data.impurity_radiation.f_nd_impurity_electrons[imp]
)

# Stop the run if oacdcp is used as an optimisation variable
Expand Down
11 changes: 5 additions & 6 deletions process/core/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
ProcessValueError,
)
from process.core.solver.constraints import ConstraintManager
from process.data_structure.impurity_radiation_variables import N_IMPURITIES
from process.data_structure.pfcoil_variables import N_PF_GROUPS_MAX

if TYPE_CHECKING:
Expand Down Expand Up @@ -143,10 +144,10 @@ def __post_init__(self):
data_structure.physics_variables, float, range=(0.0, 1.0)
),
"radius_plasma_core_norm": InputVariable(
data_structure.impurity_radiation_module, float, range=(0.0, 1.0)
"impurity_radiation", float, range=(0.0, 1.0)
),
"f_p_plasma_core_rad_reduction": InputVariable(
data_structure.impurity_radiation_module, float, range=(0.0, 1.0)
"impurity_radiation", float, range=(0.0, 1.0)
),
"c_beta": InputVariable(data_structure.physics_variables, float, range=(0.0, 1.0)),
"csawth": InputVariable(data_structure.physics_variables, float, range=(0.0, 10.0)),
Expand Down Expand Up @@ -185,9 +186,7 @@ def __post_init__(self):
data_structure.physics_variables, float, range=(-1.0, 5.0)
),
# TODO: does f_nd_impurity_electrons require an additional range?
"f_nd_impurity_electrons": InputVariable(
data_structure.impurity_radiation_module, float, array=True
),
"f_nd_impurity_electrons": InputVariable("impurity_radiation", float, array=True),
"fkzohm": InputVariable(data_structure.physics_variables, float, range=(0.5, 2.0)),
"abktflnc": InputVariable("costs", float, range=(0.1, 100.0)),
"adivflnc": InputVariable("costs", float, range=(0.1, 100.0)),
Expand Down Expand Up @@ -1379,7 +1378,7 @@ def __post_init__(self):
"impvardiv": InputVariable(
"reinke",
int,
choices=range(3, data_structure.impurity_radiation_module.N_IMPURITIES + 1),
choices=range(3, N_IMPURITIES + 1),
),
"j_pf_coil_wp_peak": InputVariable("pf_coil", float, array=True),
"ixc": InputVariable(
Expand Down
2 changes: 1 addition & 1 deletion process/core/io/mfile/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,7 @@ def get_mfile_initial_ixc_values(file_path: Path, data: DataStructure):
"""
from process.main import SingleRun # noqa:PLC0415

SingleRun(file_path.as_posix())
SingleRun(file_path.as_posix(), data_structure=data)
iteration_variables.load_iteration_variables(data)

iteration_variable_names = []
Expand Down
4 changes: 2 additions & 2 deletions process/core/io/plot/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from process.core import constants
from process.core.io.mfile import MFile, MFileErrorClass
from process.core.solver.objectives import OBJECTIVE_NAMES
from process.data_structure import impurity_radiation_module
from process.data_structure.impurity_radiation_variables import N_IMPURITIES
from process.data_structure.pfcoil_variables import NFIXMX
from process.models.build import Build
from process.models.geometry.blanket import (
Expand Down Expand Up @@ -12878,7 +12878,7 @@ def plot_ion_charge_profile(axis: plt.Axes, mfile: MFile, scan: int):

n_charge_plasma_profile = []
avg_ionisation_percentages = []
for imp in range(impurity_radiation_module.N_IMPURITIES):
for imp in range(N_IMPURITIES):
if imp_frac[imp] > 1.0e-30:
profile = [
mfile.get(f"n_charge_plasma_profile{imp}_{i}", scan=scan)
Expand Down
2 changes: 2 additions & 0 deletions process/core/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.impurity_radiation_variables import ImpurityRadiationData
from process.data_structure.neoclassics_variables import NeoclassicsData
from process.data_structure.pf_power_variables import PFPowerData
from process.data_structure.pfcoil_variables import PFCoilData
Expand Down Expand Up @@ -63,6 +64,7 @@ class DataStructure:
stellarator_config: StellaratorConfigData = initialise_later
pf_power: PFPowerData = initialise_later
neoclassics: NeoclassicsData = initialise_later
impurity_radiation: ImpurityRadiationData = initialise_later

def __post_init__(self):
for f in fields(self):
Expand Down
15 changes: 7 additions & 8 deletions process/core/scan.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
from process.core.solver.solver_handler import SolverHandler
from process.data_structure import (
global_variables,
impurity_radiation_module,
numerics,
physics_variables,
rebco_variables,
Expand Down Expand Up @@ -1119,7 +1118,7 @@ def scan_select(self, nwp, swp, iscn):
case 28:
physics_variables.b_plasma_toroidal_on_axis = swp[iscn - 1]
case 29:
impurity_radiation_module.radius_plasma_core_norm = swp[iscn - 1]
self.data.impurity_radiation.radius_plasma_core_norm = swp[iscn - 1]
case 31:
self.data.constraints.f_alpha_energy_confinement_min = swp[iscn - 1]
case 32:
Expand All @@ -1133,9 +1132,9 @@ def scan_select(self, nwp, swp, iscn):
case 41:
self.data.build.dr_blkt_outboard = swp[iscn - 1]
case 42:
impurity_radiation_module.f_nd_impurity_electrons[8] = swp[iscn - 1]
impurity_radiation_module.f_nd_impurity_electron_array[8] = (
impurity_radiation_module.f_nd_impurity_electrons[8]
self.data.impurity_radiation.f_nd_impurity_electrons[8] = swp[iscn - 1]
self.data.impurity_radiation.f_nd_impurity_electron_array[8] = (
self.data.impurity_radiation.f_nd_impurity_electrons[8]
)
case 44:
tfcoil_variables.sig_tf_case_max = swp[iscn - 1]
Expand All @@ -1148,9 +1147,9 @@ def scan_select(self, nwp, swp, iscn):
case 49:
tfcoil_variables.n_tf_wp_layers = int(swp[iscn - 1])
case 50:
impurity_radiation_module.f_nd_impurity_electrons[12] = swp[iscn - 1]
impurity_radiation_module.f_nd_impurity_electron_array[12] = (
impurity_radiation_module.f_nd_impurity_electrons[12]
self.data.impurity_radiation.f_nd_impurity_electrons[12] = swp[iscn - 1]
self.data.impurity_radiation.f_nd_impurity_electron_array[12] = (
self.data.impurity_radiation.f_nd_impurity_electrons[12]
)
case 51:
physics_variables.f_p_div_lower = swp[iscn - 1]
Expand Down
24 changes: 12 additions & 12 deletions process/core/solver/iteration_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,95 +125,95 @@ class IterationVariable:
122: IterationVariable("f_a_cs_turn_steel", "pf_coil", 0.001, 0.950),
125: IterationVariable(
"f_nd_impurity_electrons(03)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=2,
),
126: IterationVariable(
"f_nd_impurity_electrons(04)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=3,
),
127: IterationVariable(
"f_nd_impurity_electrons(05)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=4,
),
128: IterationVariable(
"f_nd_impurity_electrons(06)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=5,
),
129: IterationVariable(
"f_nd_impurity_electrons(07)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=6,
),
130: IterationVariable(
"f_nd_impurity_electrons(08)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=7,
),
131: IterationVariable(
"f_nd_impurity_electrons(09)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=8,
),
132: IterationVariable(
"f_nd_impurity_electrons(10)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=9,
),
133: IterationVariable(
"f_nd_impurity_electrons(11)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=10,
),
134: IterationVariable(
"f_nd_impurity_electrons(12)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=11,
),
135: IterationVariable(
"f_nd_impurity_electrons(13)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
array_index=12,
),
136: IterationVariable(
"f_nd_impurity_electrons(14)",
data_structure.impurity_radiation_module,
"impurity_radiation",
1e-8,
0.01,
target_name="f_nd_impurity_electron_array",
Expand Down
4 changes: 2 additions & 2 deletions process/data_structure/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
global_variables,
heat_transport_variables,
ife_variables,
impurity_radiation_module,
impurity_radiation_variables,
neoclassics_variables,
numerics,
pf_power_variables,
Expand Down Expand Up @@ -52,7 +52,7 @@
"global_variables",
"heat_transport_variables",
"ife_variables",
"impurity_radiation_module",
"impurity_radiation_variables",
"neoclassics_variables",
"numerics",
"pf_power_variables",
Expand Down
Loading
Loading