From d609cb58412414b2dc3cdb140fbbc7e1eb7caf99 Mon Sep 17 00:00:00 2001 From: ym1906 Date: Mon, 27 Jul 2026 15:20:24 +0100 Subject: [PATCH 1/8] Added NCST confinement time scaling law --- process/data_structure/physics_variables.py | 5 ++ process/models/physics/confinement_time.py | 57 +++++++++++++++++++++ 2 files changed, 62 insertions(+) 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..b66c16c27e 100644 --- a/process/models/physics/confinement_time.py +++ b/process/models/physics/confinement_time.py @@ -925,6 +925,17 @@ def calculate_confinement_time( # ========================================================================== + # NCST spherical tokamak L-mode confinement time scaling + elif model == ConfinementTimeModel.NCST: + t_electron_confinement = self.ncst_confinement_time( + pcur, + b_plasma_toroidal_on_axis, + p_plasma_loss_mw, + dnla19, + ) + + # ========================================================================== + else: raise ProcessValueError( "Illegal value for i_confinement_time", @@ -4058,3 +4069,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**19 m**-3 + + 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 + ---------- + - 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) + ) From 3578edc8f2cd2085e13118f813afc2d03537bb2a Mon Sep 17 00:00:00 2001 From: ym1906 Date: Mon, 27 Jul 2026 15:20:38 +0100 Subject: [PATCH 2/8] Added NCST confinement time scaling law --- tests/unit/models/physics/test_confinement_time.py | 5 +++++ 1 file changed, 5 insertions(+) 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): From 4e67826bbe5ff7924530e5aa8eea5826025b9808 Mon Sep 17 00:00:00 2001 From: ym1906 Date: Mon, 27 Jul 2026 16:26:11 +0100 Subject: [PATCH 3/8] Added keyword args --- process/models/physics/confinement_time.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/process/models/physics/confinement_time.py b/process/models/physics/confinement_time.py index b66c16c27e..1838e3d7e6 100644 --- a/process/models/physics/confinement_time.py +++ b/process/models/physics/confinement_time.py @@ -924,14 +924,13 @@ def calculate_confinement_time( ) # ========================================================================== - # NCST spherical tokamak L-mode confinement time scaling elif model == ConfinementTimeModel.NCST: t_electron_confinement = self.ncst_confinement_time( - pcur, - b_plasma_toroidal_on_axis, - p_plasma_loss_mw, - dnla19, + pcur=pcur, + b_plasma_toroidal_on_axis=b_plasma_toroidal_on_axis, + p_plasma_loss_mw=p_plasma_loss_mw, + dnla19=dnla19, ) # ========================================================================== From 95ef006f00dfe09c2ce3ca4b1ad8be357cf826fc Mon Sep 17 00:00:00 2001 From: Graeme Turkington <107113942+grmtrkngtn@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:27:46 +0100 Subject: [PATCH 4/8] Update process/models/physics/confinement_time.py Format docstring Co-authored-by: Christopher Ashe <91618944+chris-ashe@users.noreply.github.com> --- process/models/physics/confinement_time.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/process/models/physics/confinement_time.py b/process/models/physics/confinement_time.py index 1838e3d7e6..51053c3d29 100644 --- a/process/models/physics/confinement_time.py +++ b/process/models/physics/confinement_time.py @@ -4096,10 +4096,10 @@ def ncst_confinement_time( 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. + - 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 ---------- From 5bb4ea307fcf790ba163385aab40ae69c2fb1971 Mon Sep 17 00:00:00 2001 From: Graeme Turkington <107113942+grmtrkngtn@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:28:02 +0100 Subject: [PATCH 5/8] Update process/models/physics/confinement_time.py format units Co-authored-by: Christopher Ashe <91618944+chris-ashe@users.noreply.github.com> --- process/models/physics/confinement_time.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/process/models/physics/confinement_time.py b/process/models/physics/confinement_time.py index 51053c3d29..6542f8dba8 100644 --- a/process/models/physics/confinement_time.py +++ b/process/models/physics/confinement_time.py @@ -4087,7 +4087,7 @@ def ncst_confinement_time( p_plasma_loss_mw : Thermal power lost due to transport through the LCFS [MW] dnla19 : - Central line-averaged electron density in units of 10**19 m**-3 + Central line-averaged electron density in units of 10¹⁹ m⁻³ Returns ------- From 83edcd43c215dd07fab149ff6c13cb2c69f7dfc0 Mon Sep 17 00:00:00 2001 From: Graeme Turkington <107113942+grmtrkngtn@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:28:39 +0100 Subject: [PATCH 6/8] Update process/models/physics/confinement_time.py Format reference Co-authored-by: Christopher Ashe <91618944+chris-ashe@users.noreply.github.com> --- process/models/physics/confinement_time.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/process/models/physics/confinement_time.py b/process/models/physics/confinement_time.py index 6542f8dba8..5560e88a89 100644 --- a/process/models/physics/confinement_time.py +++ b/process/models/physics/confinement_time.py @@ -4103,9 +4103,9 @@ def ncst_confinement_time( References ---------- - - 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. + [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 From 45878204c9dc8a4b15a60d9ecf6b6de802ec936a Mon Sep 17 00:00:00 2001 From: ym1906 Date: Mon, 27 Jul 2026 16:45:07 +0100 Subject: [PATCH 7/8] Added docs for NCST confinement law --- .../source/physics-models/plasma_confinement.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) 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 From 83f51b03d927ec3f7692488dd63fad27f154bb28 Mon Sep 17 00:00:00 2001 From: mn3981 Date: Tue, 28 Jul 2026 09:36:30 +0100 Subject: [PATCH 8/8] Fix formatting of notes and references in PlasmaConfinementTime docstring --- process/models/physics/confinement_time.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/process/models/physics/confinement_time.py b/process/models/physics/confinement_time.py index 5560e88a89..45297c5a3d 100644 --- a/process/models/physics/confinement_time.py +++ b/process/models/physics/confinement_time.py @@ -4096,16 +4096,16 @@ def ncst_confinement_time( 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. + - 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. + [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