diff --git a/documentation/source/physics-models/plasma_confinement.md b/documentation/source/physics-models/plasma_confinement.md index 80124f1f89..6cfa224bd0 100644 --- a/documentation/source/physics-models/plasma_confinement.md +++ b/documentation/source/physics-models/plasma_confinement.md @@ -54,7 +54,7 @@ The loss power $P_{\text{L}}$ [$\mathtt{p\_plasma\_loss\_mw}$] is calculated fro Published confinement scalings are all based on low radiation pulses. A power plant will certainly be a high radiation machine, both in the core, due to bremsstrahlung and synchrotron radiation, and in the edge due to impurity -seeding. The scaling data does not predict this radiation [^23] [^24], that needs to be +seeding. The scaling data does not predict this radiation [^24] [^25], that needs to be done by the radiation model. However, if the transport is very "stiff", as predicted by some models, then the additional radiation causes an almost equal drop in power transported by ions and electrons, leaving the confinement @@ -647,6 +647,16 @@ $$ ------------------------- +#### 51: NCST spherical tokamak scaling (L-mode) | `ncst_confinement_time()` + +Is selected with `i_confinement_time = 51` [^23] + +$$ +\tau_{\text{E}} = 0.11 I_{\text{p}}^{0.33} B_{\text{T}}^{1.03} \overline{n}_{19}^{-0.01} P_{\text{L}}^{-0.07} +$$ + +------------------------- + ### Transport Powers After the confinement time scaling with $H$-factor correction has been calculated, the ion and electron transport power densities are found. `PROCESS` assumes the scaling confinement time to be equal to the ion and electron energy confinement time. @@ -729,6 +739,7 @@ The value of `f_t_alpha_energy_confinement_min` can be set to the desired minimu [^20]: J. E. Menard, “Compact steady-state tokamak performance dependence on magnet and core physics limits,” Philosophical Transactions of the Royal Society A, vol. 377, no. 2141, pp. 20170440-20170440, Feb. 2019, doi: https://doi.org/10.1098/rsta.2017.0440. [^21]: P. F. Buxton, L. Connor, A. E. Costley, M. Gryaznevich, and S. McNamara, “On the energy confinement time in spherical tokamaks: implications for the design of pilot plants and fusion reactors,” vol. 61, no. 3, pp. 035006-035006, Jan. 2019, doi: https://doi.org/10.1088/1361-6587/aaf7e5. [^22]: G. Verdoolaege et al., “The updated ITPA global H-mode confinement database: description and analysis,” Nuclear Fusion, vol. 61, no. 7, pp. 076006-076006, Jan. 2021, doi: https://doi.org/10.1088/1741-4326/abdb91. -[^23]: H. Lux, R. Kemp, E. Fable, and R. Wenninger, “Radiation and confinement in 0D fusion systems codes,” Plasma Physics and Controlled Fusion, vol. 58, no. 7, pp. 075001–075001, May 2016, doi: https://doi.org/10.1088/0741-3335/58/7/075001. -[^24]: H. Lux, R. Kemp, D. J. Ward, and M. Sertoli, “Impurity radiation in DEMO systems modelling,” Fusion Engineering and Design, vol. 101, pp. 42–51, Dec. 2015, doi: https://doi.org/10.1016/j.fusengdes.2015.10.002. +[^23]: Y. Chen, X. C. Chen, X. F. Wu, and S. Q. Liu, “Energy confinement scaling in the NCST spherical tokamak,” AIP Advances, vol. 16, no. 3, pp. 035043-035043, Mar. 2026, doi: https://doi.org/10.1063/5.0311657. +[^24]: H. Lux, R. Kemp, E. Fable, and R. Wenninger, “Radiation and confinement in 0D fusion systems codes,” Plasma Physics and Controlled Fusion, vol. 58, no. 7, pp. 075001–075001, May 2016, doi: https://doi.org/10.1088/0741-3335/58/7/075001. +[^25]: H. Lux, R. Kemp, D. J. Ward, and M. Sertoli, “Impurity radiation in DEMO systems modelling,” Fusion Engineering and Design, vol. 101, pp. 42–51, Dec. 2015, doi: https://doi.org/10.1016/j.fusengdes.2015.10.002. ‌ \ No newline at end of file diff --git a/process/data_structure/physics_variables.py b/process/data_structure/physics_variables.py index 28e37dee79..6775f7ea6a 100644 --- a/process/data_structure/physics_variables.py +++ b/process/data_structure/physics_variables.py @@ -319,6 +319,11 @@ class ConfinementTimeModel(IntEnum): f"ITPA20-IL ({ConfinementMode.H_MODE.abbreviation})", ConfinementMode.H_MODE, ) + NCST = ( + 51, + f"NCST ({ConfinementMode.L_MODE.abbreviation})", + ConfinementMode.L_MODE, + ) def __new__(cls, value: int, full_name: str, mode: ConfinementMode = None): """Create a new instance of ConfinementTimeModel. diff --git a/process/models/physics/confinement_time.py b/process/models/physics/confinement_time.py index 2e9dd2ae8a..45297c5a3d 100644 --- a/process/models/physics/confinement_time.py +++ b/process/models/physics/confinement_time.py @@ -923,6 +923,16 @@ def calculate_confinement_time( self.data.physics.kappa_ipb, ) + # ========================================================================== + # NCST spherical tokamak L-mode confinement time scaling + elif model == ConfinementTimeModel.NCST: + t_electron_confinement = self.ncst_confinement_time( + pcur=pcur, + b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis, + p_plasma_loss_mw=p_plasma_loss_mw, + dnla19=dnla19, + ) + # ========================================================================== else: @@ -4058,3 +4068,49 @@ def itpa20_il_confinement_time( * kappa_ipb**0.673 * aion**0.302 ) + + @staticmethod + def ncst_confinement_time( + pcur: float, + b_plasma_toroidal_on_axis: float, + p_plasma_loss_mw: float, + dnla19: float, + ) -> float: + """Calculate the NCST spherical tokamak L-mode confinement time + + Parameters + ---------- + pcur : + Plasma current [MA] + b_plasma_toroidal_on_axis : + Toroidal magnetic field [T] + p_plasma_loss_mw : + Thermal power lost due to transport through the LCFS [MW] + dnla19 : + Central line-averaged electron density in units of 10¹⁹ m⁻³ + + Returns + ------- + : + float: NCST confinement time [s] + + Notes + ----- + - The electron density used to derive the scaling was measured locally + at a normalised minor radius of approximately 0.9. The central + line-averaged electron density is used here as the closest available + PROCESS quantity. + + References + ---------- + [1] Y. Chen et al., “Energy confinement scaling in the NCST spherical + tokamak,” AIP Advances, vol. 16, no. 3, pp. 035043-035043, + Mar. 2026, doi: https://doi.org/10.1063/5.0311657. + """ + return ( + 0.11 + * pcur**0.33 + * b_plasma_toroidal_on_axis**1.03 + * p_plasma_loss_mw ** (-0.07) + * dnla19 ** (-0.01) + ) diff --git a/tests/unit/models/physics/test_confinement_time.py b/tests/unit/models/physics/test_confinement_time.py index 42873252fe..2a50cf6d6e 100644 --- a/tests/unit/models/physics/test_confinement_time.py +++ b/tests/unit/models/physics/test_confinement_time.py @@ -242,6 +242,11 @@ (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), 0.09877603755850378, ), + ( + PlasmaConfinementTime.ncst_confinement_time, + (1.0, 1.0, 1.0, 1.0), + 0.11, + ), ], ) def test_confinement_time(func, args, expected):