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
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -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.

5 changes: 5 additions & 0 deletions process/data_structure/physics_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"""
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion process/io/plot_proc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
)
Expand Down
58 changes: 58 additions & 0 deletions process/physics.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
8 changes: 8 additions & 0 deletions tests/unit/test_physics.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Loading