Skip to content
Open
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
104 changes: 52 additions & 52 deletions documentation/source/physics-models/plasma_confinement.md

Large diffs are not rendered by default.

101 changes: 53 additions & 48 deletions process/core/io/plot_proc.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,10 @@
import process.core.constants as constants
import process.core.io.mfile as mf
import process.data_structure.pfcoil_variables as pfcoil_variables
import process.models.physics.confinement_time as confine
import process.models.tfcoil.superconducting as sctf
from process.core.io.mfile import MFileErrorClass
from process.core.solver.objectives import OBJECTIVE_NAMES
from process.data_structure import impurity_radiation_module, physics_variables
from process.data_structure import impurity_radiation_module
from process.models.build import Build
from process.models.geometry.blanket import (
blanket_geometry_double_null,
Expand All @@ -60,6 +59,10 @@
vacuum_vessel_geometry_double_null,
vacuum_vessel_geometry_single_null,
)
from process.models.physics.confinement_time import (
ConfinementTimeModel,
PlasmaConfinementTime,
)
from process.models.physics.current_drive import ElectronBernstein, ElectronCyclotron
from process.models.physics.impurity_radiation import read_impurity_file
from process.models.tfcoil.superconducting import SUPERCONDUCTING_TF_TYPES
Expand Down Expand Up @@ -8547,7 +8550,7 @@ def plot_confinement_time_comparison(
m_ions_total_amu = mfile.get("m_ions_total_amu", scan=scan)

# Calculate confinement times using the scan data
iter_89p = confine.iter_89p_confinement_time(
iter_89p = PlasmaConfinementTime().iter_89p_confinement_time(
pcur=c_plasma_ma,
rmajor=rmajor,
rminor=rminor,
Expand All @@ -8557,7 +8560,7 @@ def plot_confinement_time_comparison(
afuel=afuel,
p_plasma_loss_mw=p_plasma_separatrix_mw,
)
iter_89_0 = confine.iter_89_0_confinement_time(
iter_89_0 = PlasmaConfinementTime().iter_89_0_confinement_time(
pcur=c_plasma_ma,
rmajor=rmajor,
rminor=rminor,
Expand All @@ -8567,7 +8570,7 @@ def plot_confinement_time_comparison(
afuel=afuel,
p_plasma_loss_mw=p_plasma_separatrix_mw,
)
iter_h90_p = confine.iter_h90_p_confinement_time(
iter_h90_p = PlasmaConfinementTime().iter_h90_p_confinement_time(
pcur=c_plasma_ma,
rmajor=rmajor,
rminor=rminor,
Expand All @@ -8577,15 +8580,15 @@ def plot_confinement_time_comparison(
afuel=afuel,
p_plasma_loss_mw=p_plasma_separatrix_mw,
)
iter_h90_p_amended = confine.iter_h90_p_amended_confinement_time(
iter_h90_p_amended = PlasmaConfinementTime().iter_h90_p_amended_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
afuel=afuel,
rmajor=rmajor,
p_plasma_loss_mw=p_plasma_separatrix_mw,
kappa=kappa,
)
iter_93h = confine.iter_93h_confinement_time(
iter_93h = PlasmaConfinementTime().iter_93h_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
p_plasma_loss_mw=p_plasma_separatrix_mw,
Expand All @@ -8595,7 +8598,7 @@ def plot_confinement_time_comparison(
aspect=aspect,
kappa=kappa,
)
iter_h97p = confine.iter_h97p_confinement_time(
iter_h97p = PlasmaConfinementTime().iter_h97p_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
p_plasma_loss_mw=p_plasma_separatrix_mw,
Expand All @@ -8605,7 +8608,7 @@ def plot_confinement_time_comparison(
kappa=kappa,
afuel=afuel,
)
iter_h97p_elmy = confine.iter_h97p_elmy_confinement_time(
iter_h97p_elmy = PlasmaConfinementTime().iter_h97p_elmy_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
p_plasma_loss_mw=p_plasma_separatrix_mw,
Expand All @@ -8615,7 +8618,7 @@ def plot_confinement_time_comparison(
kappa=kappa,
afuel=afuel,
)
iter_96p = confine.iter_96p_confinement_time(
iter_96p = PlasmaConfinementTime().iter_96p_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
kappa95=kappa95,
Expand All @@ -8625,7 +8628,7 @@ def plot_confinement_time_comparison(
afuel=afuel,
p_plasma_loss_mw=p_plasma_separatrix_mw,
)
iter_pb98py = confine.iter_pb98py_confinement_time(
iter_pb98py = PlasmaConfinementTime().iter_pb98py_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8635,7 +8638,7 @@ def plot_confinement_time_comparison(
aspect=aspect,
afuel=afuel,
)
iter_ipb98y = confine.iter_ipb98y_confinement_time(
iter_ipb98y = PlasmaConfinementTime().iter_ipb98y_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8645,7 +8648,7 @@ def plot_confinement_time_comparison(
aspect=aspect,
afuel=afuel,
)
iter_ipb98y1 = confine.iter_ipb98y1_confinement_time(
iter_ipb98y1 = PlasmaConfinementTime().iter_ipb98y1_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8655,7 +8658,7 @@ def plot_confinement_time_comparison(
aspect=aspect,
afuel=afuel,
)
iter_ipb98y2 = confine.iter_ipb98y2_confinement_time(
iter_ipb98y2 = PlasmaConfinementTime().iter_ipb98y2_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8665,7 +8668,7 @@ def plot_confinement_time_comparison(
aspect=aspect,
afuel=afuel,
)
iter_ipb98y3 = confine.iter_ipb98y3_confinement_time(
iter_ipb98y3 = PlasmaConfinementTime().iter_ipb98y3_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8675,7 +8678,7 @@ def plot_confinement_time_comparison(
aspect=aspect,
afuel=afuel,
)
iter_ipb98y4 = confine.iter_ipb98y4_confinement_time(
iter_ipb98y4 = PlasmaConfinementTime().iter_ipb98y4_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8685,7 +8688,7 @@ def plot_confinement_time_comparison(
aspect=aspect,
afuel=afuel,
)
petty08 = confine.petty08_confinement_time(
petty08 = PlasmaConfinementTime().petty08_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8694,7 +8697,7 @@ def plot_confinement_time_comparison(
kappa_ipb=kappa_ipb,
aspect=aspect,
)
menard_nstx = confine.menard_nstx_confinement_time(
menard_nstx = PlasmaConfinementTime().menard_nstx_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8704,17 +8707,19 @@ def plot_confinement_time_comparison(
aspect=aspect,
afuel=afuel,
)
menard_nstx_petty08 = confine.menard_nstx_petty08_hybrid_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
p_plasma_loss_mw=p_plasma_separatrix_mw,
rmajor=rmajor,
kappa_ipb=kappa_ipb,
aspect=aspect,
afuel=afuel,
menard_nstx_petty08 = (
PlasmaConfinementTime().menard_nstx_petty08_hybrid_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
p_plasma_loss_mw=p_plasma_separatrix_mw,
rmajor=rmajor,
kappa_ipb=kappa_ipb,
aspect=aspect,
afuel=afuel,
)
)
itpa20 = confine.itpa20_confinement_time(
itpa20 = PlasmaConfinementTime().itpa20_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
dnla19=dnla19,
Expand All @@ -8725,7 +8730,7 @@ def plot_confinement_time_comparison(
eps=(1 / aspect),
aion=m_ions_total_amu,
)
itpa20_ilc = confine.itpa20_il_confinement_time(
itpa20_ilc = PlasmaConfinementTime().itpa20_il_confinement_time(
pcur=c_plasma_ma,
b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis,
p_plasma_loss_mw=p_plasma_separatrix_mw,
Expand All @@ -8738,25 +8743,25 @@ def plot_confinement_time_comparison(

# Data for the box plot
data = {
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[6]}": iter_89p,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[7]}": iter_89_0,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[13]}": iter_h90_p,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[20]}": iter_h90_p_amended,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[24]}": iter_93h,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[26]}": iter_h97p,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[27]}": iter_h97p_elmy,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[28]}": iter_96p,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[31]}": iter_pb98py,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[32]}": iter_ipb98y,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[33]}": iter_ipb98y1,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[34]}": iter_ipb98y2,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[35]}": iter_ipb98y3,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[36]}": iter_ipb98y4,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[41]}": petty08,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[46]}": menard_nstx,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[47]}": menard_nstx_petty08,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[49]}": itpa20,
rf"{physics_variables.LABELS_CONFINEMENT_SCALINGS[50]}": itpa20_ilc,
rf"{ConfinementTimeModel.ITER_89P.full_name}": iter_89p,
rf"{ConfinementTimeModel.ITER_89_0.full_name}": iter_89_0,
rf"{ConfinementTimeModel.ITER_H90_P.full_name}": iter_h90_p,
rf"{ConfinementTimeModel.ITER_H90_P_AMENDED.full_name}": iter_h90_p_amended,
rf"{ConfinementTimeModel.ITER_93H.full_name}": iter_93h,
rf"{ConfinementTimeModel.ITER_H97P.full_name}": iter_h97p,
rf"{ConfinementTimeModel.ITER_H97P_ELMY.full_name}": iter_h97p_elmy,
rf"{ConfinementTimeModel.ITER_96P.full_name}": iter_96p,
rf"{ConfinementTimeModel.ITER_PB98P_Y.full_name}": iter_pb98py,
rf"{ConfinementTimeModel.IPB98_Y.full_name}": iter_ipb98y,
rf"{ConfinementTimeModel.ITER_IPB98Y1.full_name}": iter_ipb98y1,
rf"{ConfinementTimeModel.ITER_IPB98Y2.full_name}": iter_ipb98y2,
rf"{ConfinementTimeModel.ITER_IPB98Y3.full_name}": iter_ipb98y3,
rf"{ConfinementTimeModel.ITER_IPB98Y4.full_name}": iter_ipb98y4,
rf"{ConfinementTimeModel.PETTY08.full_name}": petty08,
rf"{ConfinementTimeModel.MENARD_NSTX.full_name}": menard_nstx,
rf"{ConfinementTimeModel.MENARD_NSTX_PETTY08_HYBRID.full_name}": menard_nstx_petty08,
rf"{ConfinementTimeModel.ITPA20.full_name}": itpa20,
rf"{ConfinementTimeModel.ITPA20_IL.full_name}": itpa20_ilc,
}

# Create the violin plot
Expand Down
57 changes: 1 addition & 56 deletions process/data_structure/physics_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,61 +89,6 @@
N_CONFINEMENT_SCALINGS: int = 51
"""number of energy confinement time scaling laws"""

LABELS_CONFINEMENT_SCALINGS: list[str] = [
"User input electron confinement ",
"Neo-Alcator (Ohmic)",
"Mirnov (H)",
"Merezkhin-Muhkovatov (Ohmic)(L)",
"Shimomura (H)",
"Kaye-Goldston (L)",
"ITER 89-P (L)",
"ITER 89-O (L)",
"Rebut-Lallia (L)",
"Goldston (L)",
"T10 (L)",
"JAERI / Odajima-Shimomura (L)",
"Kaye-Big Complex (L)",
"ITER H90-P (H)",
"ITER 89-P & 89-O min (L)",
"Riedel (L)",
"Christiansen (L)",
"Lackner-Gottardi (L)",
"Neo-Kaye (L)",
"Riedel (H)",
"ITER H90-P amended (H)",
"LHD (Stell)",
"Gyro-reduced Bohm (Stell)",
"Lackner-Gottardi (Stell)",
"ITER-93H ELM-free (H)",
"TITAN RFP OBSOLETE ",
"ITER H-97P ELM-free (H)",
"ITER H-97P ELMy (H)",
"ITER-96P (ITER-97L) (L)",
"Valovic modified ELMy (H)",
"Kaye 98 modified (L)",
"ITERH-PB98P(y) (H)",
"IPB98(y) (H)",
"IPB98(y,1) (H)",
"IPB98(y,2) (H)",
"IPB98(y,3) (H)",
"IPB98(y,4) (H)",
"ISS95 (Stell)",
"ISS04 (Stell)",
"DS03 beta-independent (H)",
'Murari "Non-power law" (H)',
"Petty 2008 (ST)(H)",
"Lang high density (H)",
"Hubbard 2017 - nominal (I)",
"Hubbard 2017 - lower (I)",
"Hubbard 2017 - upper (I)",
"Menard NSTX (ST)(H)",
"Menard NSTX-Petty08 hybrid (ST)(H)",
"Buxton NSTX gyro-Bohm (ST)(H)",
"ITPA20 (H)",
"ITPA20-IL (H)",
]
"""labels describing energy confinement scaling laws"""


m_beam_amu: float = None
"""beam ion mass (amu)"""
Expand Down Expand Up @@ -721,7 +666,7 @@


i_confinement_time: int = None
"""switch for energy confinement time scaling law (see description in `LABELS_CONFINEMENT_SCALINGS`)"""
"""switch for energy confinement time scaling law"""


i_plasma_wall_gap: int = None
Expand Down
3 changes: 3 additions & 0 deletions process/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
from process.models.ife import IFE
from process.models.pfcoil import PFCoil
from process.models.physics.bootstrap_current import PlasmaBootstrapCurrent
from process.models.physics.confinement_time import PlasmaConfinementTime
from process.models.physics.current_drive import (
CurrentDrive,
ElectronBernstein,
Expand Down Expand Up @@ -706,6 +707,7 @@ def __init__(self):
self.plasma_bootstrap_current = PlasmaBootstrapCurrent(
plasma_profile=self.plasma_profile
)
self.plasma_confinement = PlasmaConfinementTime()
self.physics = Physics(
plasma_profile=self.plasma_profile,
current_drive=self.current_drive,
Expand All @@ -714,6 +716,7 @@ def __init__(self):
plasma_density_limit=self.plasma_density_limit,
plasma_exhaust=self.plasma_exhaust,
plasma_bootstrap_current=self.plasma_bootstrap_current,
plasma_confinement=self.plasma_confinement,
)
self.physics_detailed = DetailedPhysics(
plasma_profile=self.plasma_profile,
Expand Down
Loading
Loading