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
2 changes: 0 additions & 2 deletions process/core/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
)
from process.data_structure.pulse_variables import init_pulse_variables
from process.data_structure.rebco_variables import init_rebco_variables
from process.data_structure.reinke_variables import init_reinke_variables
from process.data_structure.scan_variables import init_scan_variables
from process.data_structure.stellarator_variables import init_stellarator_variables
from process.data_structure.superconducting_tf_coil_variables import (
Expand Down Expand Up @@ -287,7 +286,6 @@ def init_all_module_vars():
init_constraint_variables()
init_pulse_variables()
init_rebco_variables()
init_reinke_variables()
init_dcll_module()
init_power_variables()
init_neoclassics_variables()
Expand Down
8 changes: 4 additions & 4 deletions process/core/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -782,7 +782,7 @@ def __post_init__(self):
"fwdr": InputVariable(data_structure.ife_variables, float, range=(0.0, 10.0)),
"fwdzl": InputVariable(data_structure.ife_variables, float, range=(0.0, 10.0)),
"fwdzu": InputVariable(data_structure.ife_variables, float, range=(0.0, 10.0)),
"fzactual": InputVariable(data_structure.reinke_variables, float, range=(0.0, 1.0)),
"fzactual": InputVariable("reinke", float, range=(0.0, 1.0)),
"eta_cd_norm_ecrh": InputVariable(
data_structure.current_drive_variables, float, range=(0.0, 1.0)
),
Expand Down Expand Up @@ -908,7 +908,7 @@ def __post_init__(self):
"len_tf_bus": InputVariable(
data_structure.tfcoil_variables, float, range=(0.01, 1000.0)
),
"lhat": InputVariable(data_structure.reinke_variables, float, range=(1.0, 15.0)),
"lhat": InputVariable("reinke", float, range=(1.0, 15.0)),
"f_blkt_li6_enrichment": InputVariable("fwbs", float, range=(7.4, 100.0)),
"life_dpa": InputVariable("costs", float, range=(10.0, 100.0)),
"llw_storage_h": InputVariable(
Expand Down Expand Up @@ -1794,7 +1794,7 @@ def __post_init__(self):
"num_rh_systems": InputVariable("costs", int, range=(1, 10)),
"output_costs": InputVariable("costs", int, choices=[0, 1]),
"i_p_coolant_pumping": InputVariable("fwbs", int, range=(0, 3)),
"reinke_mode": InputVariable(data_structure.reinke_variables, int, choices=[0, 1]),
"reinke_mode": InputVariable("reinke", int, choices=[0, 1]),
"scan_dim": InputVariable(data_structure.scan_variables, int, range=(1, 2)),
"i_thermal_electric_conversion": InputVariable("fwbs", int, range=(0, 4)),
"secondary_cycle_liq": InputVariable("fwbs", int, range=(2, 4)),
Expand Down Expand Up @@ -1871,7 +1871,7 @@ def __post_init__(self):
"sweep": InputVariable(data_structure.scan_variables, float, array=True),
"sweep_2": InputVariable(data_structure.scan_variables, float, array=True),
"impvardiv": InputVariable(
data_structure.reinke_variables,
"reinke",
int,
choices=range(3, data_structure.impurity_radiation_module.N_IMPURITIES + 1),
),
Expand Down
2 changes: 2 additions & 0 deletions process/core/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from process.data_structure.cs_fatigue_variables import CSFatigueData
from process.data_structure.first_wall_variables import FirstWallData
from process.data_structure.fwbs_variables import FWBSData
from process.data_structure.reinke_variables import ReinkeData
from process.data_structure.structure_variables import StructureData
from process.data_structure.times_variables import TimesData
from process.data_structure.vacuum_variables import VacuumData
Expand All @@ -27,6 +28,7 @@ class DataStructure:
blanket: BlanketData = initialise_later
structure: StructureData = initialise_later
times: TimesData = initialise_later
reinke: ReinkeData = initialise_later

def __post_init__(self):
for f in fields(self):
Expand Down
6 changes: 3 additions & 3 deletions process/core/solver/constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -1604,15 +1604,15 @@ def constraint_equation_77(constraint_registration, _data):


@ConstraintManager.register_constraint(78, "", ">=")
def constraint_equation_78(constraint_registration, _data):
def constraint_equation_78(constraint_registration, data):
"""Equation for Reinke criterion, divertor impurity fraction lower limit

fzmin : input : minimum impurity fraction from Reinke model
fzactual : input : actual impurity fraction
"""
return geq(
data_structure.reinke_variables.fzactual,
data_structure.reinke_variables.fzmin,
data.reinke.fzactual,
data.reinke.fzmin,
constraint_registration,
)

Expand Down
61 changes: 29 additions & 32 deletions process/data_structure/reinke_variables.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,29 @@
impvardiv: int = None
"""Index of impurity to be iterated for Reinke divertor detachment criterion"""

lhat: float = None
"""Connection length factor L|| = lhat qstar R for Reinke criterion, default value from
Post et al. 1995 J. Nucl. Mat. 220-2 1014
"""

fzmin: float = None
"""Minimum impurity fraction necessary for detachment. This is the impurity at the SOL/Div."""

fzactual: float = None
"""Actual impurity fraction of divertor impurity (impvardiv) in the SoL (taking
impurity_enrichment into account) (`iteration variable 148`)
"""

reinke_mode: int = None
"""Switch for Reinke criterion H/I mode:
- =0 H-mode
- =1 I-mode
"""


def init_reinke_variables():
"""Initialise Reinke criterion variables"""
global impvardiv, lhat, fzmin, fzactual, reinke_mode

impvardiv = 9
lhat = 4.33
fzmin = 0.0
fzactual = 0.001
reinke_mode = 0
from dataclasses import dataclass


@dataclass
class ReinkeData:
impvardiv: int = 9
"""Index of impurity to be iterated for Reinke divertor detachment criterion"""

lhat: float = 4.33
"""Connection length factor L|| = lhat qstar R for Reinke criterion, default value from
Post et al. 1995 J. Nucl. Mat. 220-2 1014
"""

fzmin: float = 0.0
"""Minimum impurity fraction necessary for detachment. This is the impurity at the SOL/Div."""

fzactual: float = 0.001
"""Actual impurity fraction of divertor impurity (impvardiv) in the SoL (taking
impurity_enrichment into account) (`iteration variable 148`)
"""

reinke_mode: int = 0
"""Switch for Reinke criterion H/I mode:
- =0 H-mode
- =1 I-mode
"""


CREATE_DICTS_FROM_DATACLASS = ReinkeData
19 changes: 9 additions & 10 deletions process/models/physics/physics.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
numerics,
physics_variables,
pulse_variables,
reinke_variables,
stellarator_variables,
)
from process.models.physics import impurity_radiation
Expand Down Expand Up @@ -1037,7 +1036,7 @@ def run(self):
po.write(
self.outfile,
(
f"reinke t and fz, physics = {physics_variables.temp_plasma_separatrix_kev} , {reinke_variables.fzmin}"
f"reinke t and fz, physics = {physics_variables.temp_plasma_separatrix_kev} , {self.data.reinke.fzmin}"
),
)
fgw = (
Expand All @@ -1054,10 +1053,10 @@ def run(self):
physics_variables.eps,
fgw,
physics_variables.kappa,
reinke_variables.lhat,
self.data.reinke.lhat,
)

if reinke_variables.fzmin >= 1.0e0:
if self.data.reinke.fzmin >= 1.0e0:
logger.error(
"REINKE IMPURITY MODEL: fzmin is greater than or equal to 1.0, this"
" is at least notable"
Expand All @@ -1066,9 +1065,9 @@ def run(self):
po.write(
self.outfile,
(
f" 'fzactual, frac, reinke_variables.impvardiv = {reinke_variables.fzactual},"
f" {impurity_radiation_module.f_nd_impurity_electron_array(reinke_variables.impvardiv)},"
f" {reinke_variables.impvardiv}"
f" 'fzactual, frac, impvardiv = {self.data.reinke.fzactual},"
f" {impurity_radiation_module.f_nd_impurity_electron_array(self.data.reinke.impvardiv)},"
f" {self.data.reinke.impvardiv}"
),
)

Expand Down Expand Up @@ -2336,20 +2335,20 @@ def outplas(self):
self.outfile,
"index of impurity to be iterated for divertor detachment",
"(impvardiv)",
reinke_variables.impvardiv,
self.data.reinke.impvardiv,
)
po.ovarre(
self.outfile,
"Minimum Impurity fraction from Reinke",
"(fzmin)",
reinke_variables.fzmin,
self.data.reinke.fzmin,
"OP ",
)
po.ovarre(
self.outfile,
"Actual Impurity fraction",
"(fzactual)",
reinke_variables.fzactual,
self.data.reinke.fzactual,
)

def output_temperature_density_profile_info(self) -> None:
Expand Down
Loading