diff --git a/documentation/physics-models/plasma_current/plasma_inductance.md b/documentation/physics-models/plasma_current/plasma_inductance.md index 99d55ebaaf..8644e6de00 100644 --- a/documentation/physics-models/plasma_current/plasma_inductance.md +++ b/documentation/physics-models/plasma_current/plasma_inductance.md @@ -42,7 +42,7 @@ This is only recommended for high aspect ratio tokamaks[^2]. --------- -#### Menard Inductance Relation +### Menard Inductance Relation This can be activated by stating `ind_plasma_internal_norm = 2` in the input file. @@ -60,9 +60,43 @@ This relation is based off of data from NSTX for $l_i$ in the range of 0.4-0.85. **It is recommended to use this switch with [`i_beta_norm_max = 3`](../plasma_beta/plasma_beta.md#menard-beta-relation) as they are self-consistent with each other.** +-------------- + +## ITER Definitions + +The generally agreed definition of $l_i$ is: + +$$ +l_i = \frac{\langle B_{\text{p}}^2 \rangle}{B_{\text{p}}(a)^2} +$$ + +where $B_{\text{p}}(a)^2$ is the square of the average poloidal field at the plasma edge. In the second term, the average on the +boundary is made explicit, with Lp the line integral of the poloidal circumference of the last closed flux surface. + +In the unpublished ITER Physics Guidelines document[^4], different approximations for the denominator are used. + +Although the motivation for these approximations is not explicitly stated, it is likely due to the challenges involved in generating free-boundary equilibria that include an X-point at that time[^5][^6]. + +### ITER Version 3 | `calculate_normalised_internal_inductance_iter_3()` + +$$ +\overbrace{l_i(3)}^{\texttt{ind_plasma_internal_norm_iter_3}} = \frac{2V\langle B_{\text{p}}^2 \rangle}{\mu_0^2I_{\text{p}}^2R_0} +$$ + + + + + [^1]: T. T. S et al., “Profile Optimization and High Beta Discharges and Stability of High Elongation Plasmas in the DIII-D Tokamak,” Osti.gov, Oct. 1990. https://www.osti.gov/biblio/6194284 (accessed Dec. 19, 2024). [^2]: Tokamaks 4th Edition, Wesson, page 116 [^3]: J. E. Menard et al., “Fusion nuclear science facilities and pilot plants based on the spherical tokamak,” Nuclear Fusion, vol. 56, no. 10, p. 106023, Aug. 2016, doi: https://doi.org/10.1088/0029-5515/56/10/106023. +[^4]: N. A. Uckan, International Atomic Energy Agency, Vienna (Austria) and ITER Physics Group, "ITER physics design guidelines: 1989", no. No. 10. Feb. 1990 + +[^5]: T. C. Luce, D. A. Humphreys, G. L. Jackson, and W. M. Solomon, “Inductive flux usage and its optimization in tokamak operation,” +Nuclear Fusion, vol. 54, no. 9, p. 093005, Jul. 2014, doi: https://doi.org/10.1088/0029-5515/54/9/093005. + +[^6]: G. L. Jackson et al., “ITER startup studies in the DIII-D tokamak,” Nuclear Fusion, vol. 48, no. 12, p. 125002, Nov. 2008, doi: https://doi.org/10.1088/0029-5515/48/12/125002. + diff --git a/process/data_structure/physics_variables.py b/process/data_structure/physics_variables.py index 547377a5a4..219b52e951 100644 --- a/process/data_structure/physics_variables.py +++ b/process/data_structure/physics_variables.py @@ -1132,6 +1132,9 @@ ind_plasma_internal_norm: float = None """Plasma normalised internal inductance""" +ind_plasma_internal_norm_iter_3: float = None +"""Plasma normalised internal inductance (ITER type 3)""" + ind_plasma_internal_norm_wesson: float = None """Wesson-like plasma normalised internal inductance""" @@ -1583,6 +1586,7 @@ def init_physics_variables(): global ind_plasma_internal_norm global ind_plasma_internal_norm_wesson global ind_plasma_internal_norm_menard + global ind_plasma_internal_norm_iter_3 global i_ind_plasma_internal_norm global ind_plasma global rmajor @@ -1840,6 +1844,7 @@ def init_physics_variables(): ind_plasma_internal_norm = 0.9 ind_plasma_internal_norm_wesson = 0.0 ind_plasma_internal_norm_menard = 0.0 + ind_plasma_internal_norm_iter_3 = 0.0 i_ind_plasma_internal_norm = 0 ind_plasma = 0.0 rmajor = 8.14 diff --git a/process/io/plot_proc.py b/process/io/plot_proc.py index 17cbe646f5..d13beededb 100644 --- a/process/io/plot_proc.py +++ b/process/io/plot_proc.py @@ -2674,7 +2674,7 @@ def plot_main_plasma_information( f"$V_{{\\text{{loop}}}}$: {mfile_data.data['v_plasma_loop_burn'].get_scan(scan):.4f} V\n" f"$\\Omega_{{\\text{{p}}}}$: {mfile_data.data['res_plasma'].get_scan(scan):.4e} $\\Omega$\n" f"Plasma resistive diffusion time: {mfile_data.data['t_plasma_res_diffusion'].get_scan(scan):,.4f} s\n" - f"Plasma inductance: {mfile_data.data['ind_plasma'].get_scan(scan):.4e} H\n" + f"Plasma inductance: {mfile_data.data['ind_plasma'].get_scan(scan):.4e} H | ITER $l_i(3)$: {mfile_data.data['ind_plasma_internal_norm_iter_3'].get_scan(scan):.4f}\n" f"Plasma stored magnetic energy: {mfile_data.data['e_plasma_magnetic_stored'].get_scan(scan) / 1e9:.4f} GJ\n" f"Plasma normalised internal inductance: {mfile_data.data['ind_plasma_internal_norm'].get_scan(scan):.4f}" ) diff --git a/process/physics.py b/process/physics.py index 0a86b2a5b5..c3d91fce18 100644 --- a/process/physics.py +++ b/process/physics.py @@ -1680,6 +1680,15 @@ def physics(self): self.calculate_internal_inductance_menard(kappa=physics_variables.kappa) ) + physics_variables.ind_plasma_internal_norm_iter_3 = ( + self.calculate_normalised_internal_inductance_iter_3( + b_plasma_poloidal_vol_avg=physics_variables.b_plasma_poloidal_average, + c_plasma=physics_variables.plasma_current, + vol_plasma=physics_variables.vol_plasma, + rmajor=physics_variables.rmajor, + ) + ) + # Map calculation methods to a dictionary ind_plasma_internal_norm_calculations = { 0: physics_variables.ind_plasma_internal_norm, @@ -3657,6 +3666,47 @@ def phyaux( f_alpha_energy_confinement, ) + @staticmethod + def calculate_normalised_internal_inductance_iter_3( + b_plasma_poloidal_vol_avg: float, + c_plasma: float, + vol_plasma: float, + rmajor: float, + ) -> float: + """ + Calculate the normalised internal inductance using ITER-3 scaling li(3). + + :param b_plasma_poloidal_vol_avg: Volume-averaged poloidal magnetic field (T). + :type b_plasma_poloidal_vol_avg: float + :param c_plasma: Plasma current (A). + :type c_plasma: float + :param vol_plasma: Plasma volume (m^3). + :type vol_plasma: float + :param rmajor: Plasma major radius (m). + :type rmajor: float + + :returns: The li(3) normalised internal inductance. + :rtype: float + + :references: + - T. C. Luce, D. A. Humphreys, G. L. Jackson, and W. M. Solomon, + “Inductive flux usage and its optimization in tokamak operation,” + Nuclear Fusion, vol. 54, no. 9, p. 093005, Jul. 2014, + doi: https://doi.org/10.1088/0029-5515/54/9/093005. + + - G. L. Jackson et al., “ITER startup studies in the DIII-D tokamak,” + Nuclear Fusion, vol. 48, no. 12, p. 125002, Nov. 2008, + doi: https://doi.org/10.1088/0029-5515/48/12/125002. + ‌ + """ + + return ( + 2 + * vol_plasma + * b_plasma_poloidal_vol_avg**2 + / (constants.RMU0**2 * c_plasma**2 * rmajor) + ) + @staticmethod def plasma_ohmic_heating( f_c_plasma_inductive: float, @@ -4411,6 +4461,14 @@ def outplas(self): physics_variables.ind_plasma_internal_norm_menard, "OP ", ) + po.ovarrf( + self.outfile, + "ITER li(3) plasma normalised internal inductance", + "(ind_plasma_internal_norm_iter_3)", + physics_variables.ind_plasma_internal_norm_iter_3, + "OP ", + ) + else: po.ovarrf( self.outfile, diff --git a/tests/unit/test_physics.py b/tests/unit/test_physics.py index 49e2e59fb2..407387851c 100644 --- a/tests/unit/test_physics.py +++ b/tests/unit/test_physics.py @@ -3459,3 +3459,11 @@ def test_calculate_beta_norm_max_stambaugh(): f_c_plasma_bootstrap, kappa, aspect ) assert result == pytest.approx(3.840954484207041, abs=0.00001) + + +def test_calculate_internal_inductance_iter_3(): + """Test calculate_normalised_internal_inductance_iter_3.""" + result = Physics.calculate_normalised_internal_inductance_iter_3( + b_plasma_poloidal_vol_avg=1.0, c_plasma=1.5e7, vol_plasma=1000.0, rmajor=6.2 + ) + assert result == pytest.approx(0.9078959099585583, abs=0.00001)