Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b821ee9
Rename `drsep` to `dr_plasma_outboard_midplane_separatrix_separation`…
chris-ashe Aug 7, 2026
5de6138
Rename `fli` to `f_p_div_lower_inboard_separatrix` for clarity and up…
chris-ashe Aug 7, 2026
61781ae
Rename `flo` to `f_p_div_lower_outboard_separatrix` for clarity and u…
chris-ashe Aug 7, 2026
5dece07
Rename `fui` to `f_p_div_upper_inboard_separatrix` for clarity and up…
chris-ashe Aug 7, 2026
99b32be
Add Brunner divertor power split comparison plot and update PlasmaExh…
chris-ashe Aug 7, 2026
be5d5d3
Refactor Brunner divertor power splits calculation: introduce Diverto…
chris-ashe Aug 11, 2026
bf4ea72
Rename 'fuo' to 'f_p_div_upper_outboard_separatrix' and update calcul…
chris-ashe Aug 11, 2026
33a9c5e
Rename 'plimw' to 'p_div_lower_inboard_separatrix_mw' and update rela…
chris-ashe Aug 11, 2026
751567f
Rename 'plomw' to 'p_div_lower_outboard_separatrix_mw' and update rel…
chris-ashe Aug 11, 2026
0a8c945
Rename 'puimw' to 'p_div_upper_inboard_separatrix_mw' and update rela…
chris-ashe Aug 11, 2026
431e514
Rename 'puomw' to 'p_div_upper_outboard_separatrix_mw' and update rel…
chris-ashe Aug 11, 2026
a1fd855
Refactor output methods for Brunner divertor power splits and update …
chris-ashe Aug 11, 2026
9275560
Rename 'fio' to 'f_p_div_inboard_separatrix' and update related calcu…
chris-ashe Aug 11, 2026
0c76cdb
Add outboard divertor power fraction variable to PhysicsData class
chris-ashe Aug 11, 2026
f74cc2d
Add inboard and outboard divertor power fraction attributes to Divert…
chris-ashe Aug 11, 2026
a0e30ba
Update divertor power fraction attributes and calculations in Physics…
chris-ashe Aug 11, 2026
ff72ccc
Remove outdated calculations for target imbalances and power fraction…
chris-ashe Aug 11, 2026
ed289e0
Rename 'f_p_div_lower' to 'f_p_div_lower_separatrix' across multiple …
chris-ashe Aug 11, 2026
509c78b
Enhance PlasmaExhaust output with detailed separatrix power fractions…
chris-ashe Aug 11, 2026
0284e1e
Update obsolete variable mapping and enhance Brunner divertor power s…
chris-ashe Aug 12, 2026
5f066b0
Add Plasma Exhaust documentation and update navigation in mkdocs.yml
chris-ashe Aug 12, 2026
d3c60c3
Add documentation for Plasma Exhaust and Divertor Heat Splits metrics
chris-ashe Aug 12, 2026
d38df64
Add Brunner model description and update references in documentation …
chris-ashe Aug 12, 2026
4729cb9
Enhance PlasmaExhaust documentation with details on fitted values for…
chris-ashe Aug 12, 2026
6168a31
Add unit tests for Brunner divertor power splits calculations
chris-ashe Aug 12, 2026
cb0dbff
Refactor Brunner divertor power split calculations to include inboard…
chris-ashe Aug 17, 2026
7769f8a
Add label for separation distance in Brunner divertor power split com…
chris-ashe Aug 17, 2026
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
108 changes: 108 additions & 0 deletions documentation/source/physics-models/plasma_exhaust.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Plasma Exhaust | `PlasmaExhaust`

## Separatrix Power | `calculate_separatrix_power()`

The separatrix power is defined as the thermal and conducted power flowing outward from the core plasma across the separatrix into the scrape-off layer.

$$
\overbrace{P_{\text{sep}}}^{\texttt{p_plasma_separatrix_mw}} = \underbrace{f_{\alpha}P_{\alpha} + P_{\text{c}} + P_{\text{OH}} + P_{\text{HCD}}}_{\text{Plasma heating}} - \underbrace{P_{\text{rad}}}_{\text{Plasma Loss}}
$$

where $f_{\alpha}$ is the [fraction of alpha power that is coupled to the plasma](../physics-models/fusion_reactions/plasma_reactions.md#coupled-alpha-particle-power), $P_{\alpha}$ is the alpha power, $P_{\text{c}}$ is the charged particle power, $P_{\text{OH}}$ is the ohmic heating power, $P_{\text{HCD}}$ is the plasma heating done by the external heating & current drive systems and $P_{\text{rad}}$ is the total radiation power given off by the plasma.

--------------

## Divertor Protection Metrics

### `calculate_psep_over_r_metric()`

A simple metric for the divertor heat flux challenege is to simply divide by total separatrix power by the plasma major radius. This works as a stand in metric for the total available divertor area in which to spread the heat


$$
\texttt{p_plasma_separatrix_rmajor_mw}=\frac{P_{\text{sep}}}{R_0}
$$

------------

### EU-DEMO Protection Re-Attachment Metric | `calculate_eu_demo_re_attachment_metric()`

The divertor protection metric is obtained by starting from the target heat flux formula, inserting the Eich heat-flux-width scaling and $q_{95}-B_{\text{p}}$​ relationship, and reducing the resulting dependence to the engineering quantity whose value is constrained to remain below a reference EU-DEMO limit to ensure the divertor can withstand temporary reattachment without[^1][^2].

$$
\texttt{p_div_bt_q_aspect_rmajor_mw}=\frac{P_{\text{sep}}B_{\text{T}}}{q_{95}AR}
$$


-----------

## Divertor Separatrix Power Heat Splits

### Brunner Model | `calculate_brunner_divertor_power_splits()`

The Brunner model[^brunner_model] was made to estimate the power-sharing between four divertors in a dynamic double null configuration. Consisting of an in-out and up-down sharing scheme. The model considers the separatrix power flow going to each divertor rather than that which reaches the target plate after dissipation. The power split assumes that the fraction of power to the side walls is negligibly small and there is no radiation in the SOL. We thus have:

$$
P_{\text{sep}} \approx P_{\text{div,tot}} = P_{\text{lower,in}} + P_{\text{lower,out}} + P_{\text{upper,in}} + P_{\text{upper,out}}
$$

The main determining variable for the power split is $\delta R_{\text{sep}}$ representing the radial distance between the first and second separatrixes at the plasma outboard mid-plane.

A negative value of $\delta R_{\text{sep}}$ represents a dominant lower null configuration, A $\delta R_{\text{sep}}$ of 0 represents a perfect double null configuration and a positive $\delta R_{\text{sep}}$ is a upper null configuration.

It is observed that the majority of the power crosses the plasma boundary at the outer mid-plane. Assuming that the resultant heat flux profile is exponential with a single e-folding width equal to the scrape off layer power decay length, $\lambda_{\text{q,o}}$.

For the outboard, side the fraction of the outboard power going to the lower target is:

$$
\frac{P_{\text{lower,out}}}{P_{\text{lower,out}}+P_{\text{upper,out}}} = \frac{1}{1+e^{\frac{\delta R_{\text{sep}}}{\lambda_{\text{q,o}}}}}
$$

For the upper target:

$$
\frac{P_{\text{upper,out}}}{P_{\text{lower,out}}+P_{\text{upper,out}}} = \frac{1}{1+e^{-\frac{\delta R_{\text{sep}}}{\lambda_{\text{q,o}}}}}
$$

For the inboard divertors it was seen that the power sharing follows a similar logistic function trend but with a distinctly different power decay length, $\lambda_{\text{q,i}}$.

For the inboard side the fraction of the inboard power going to the lower target is:

$$
\frac{P_{\text{lower,in}}}{P_{\text{lower,in}}+P_{\text{upper,in}}} = \frac{1}{1+e^{\frac{\delta R_{\text{sep}}}{\lambda_{\text{q,i}}}}}
$$

The total inboard split compared to the outboard was found to give a Gaussian like dependence as follows:

$$
\frac{P_{\text{lower,in}}+P_{\text{lower,out}}}{P_{\text{lower,in}}+P_{\text{upper,in}}+P_{\text{lower,out}}+P_{\text{upper,out}}} = \\ P_{\text{in,0}}+(P_{\text{in,0}}-P_{\text{in,}\infin})\times \left(1-\frac{2}{1+e^{-\left(\frac{\delta R_{\text{sep}}}{\lambda_{\text{q,io}}}\right)^2}}\right)
$$

where $P_{\text{in,0}}$ is the fraction of power to the inner divertors at $\delta R_{\text{sep}} = 0$, $P_{\text{in,}\infin}$ is the fraction of the power to the inner divertors at $R_{\text{sep}} = \infin$

Fitted values to data from DIII-D[^d3_d_values] have shown the values of $P_{\text{in,0}}$ and $P_{\text{in,}\infin}$ to be 0.16 and 0.41 respectively which is what we use here. We also assume that out Gaussian width in the total power sharing is equal to the outboard power decay length, $\lambda_{\text{q,io}} = \lambda_{\text{q,o}}$.

In `PROCESS` we normally want to control how much of the separatrix power is directed to either the upper or lower divertors, this is done through changing `f_p_div_lower_separatrix`. Fitting to the DIII-D[^d3_d_values] we calculate the value of $\delta R_{\text{sep}}$ via:

$$
\delta R_{\text{sep}} = -3\times 10^{-3} \tanh^{-1}\left(2(\texttt{f_p_div_lower_separatrix}-0.5)\right)
$$

Truncated values of the $\delta R_{\text{sep}}$ are set to $1.5\times 10^{-2}\ \text{m}$ and $-1.5\times 10^{-2} \ \text{m}$ respectively based on when the power split gets close to a perfect upper or lower null.

--------------------


[^1] M. Siccinio, G. Federici, R. Kembleton, H. Lux, F. Maviglia, and J. Morris,
"Figure of merit for divertor protection in the preliminary design of the
EU-DEMO reactor," Nuclear Fusion, vol. 59, no. 10, pp. 106026-106026,
Jul. 2019, doi: https://doi.org/10.1088/1741-4326/ab3153.

[^2] H. Zohm et al., "A stepladder approach to a tokamak fusion power plant,"
Nuclear Fusion, vol. 57, no. 8, pp. 086002-086002, May 2017, doi: https://doi.org/10.1088/1741-4326/aa739e.

[^brunner_model] D. Brunner, A. Q. Kuang, B. LaBombard, and J. L. Terry, “The dependence of
divertor power sharing on magnetic flux balance in near double-null configurations on
Alcator C-Mod,” Nuclear Fusion, vol. 58, no. 7, p. 076010, May 2018, doi: https://doi.org/10.1088/1741-4326/aac006.

[^d3_d_values] T. W. Petrie et al., “The effect of divertor magnetic balance on H-mode performance in DIII-D,” Journal of Nuclear Materials, vol. 290-293, pp. 935-939, Mar. 2001, doi: https://doi.org/10.1016/S0022-3115(00)00492-X
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ nav:
- Confinement time: physics-models/plasma_confinement.md
- L-H transition: physics-models/plasma_h_mode.md
- Plasma Core Power Balance: physics-models/plasma_power_balance.md
- Plasma Exhaust: physics-models/plasma_exhaust.md
- Plasma Scrape-off Layer: physics-models/plasma_scrape_off_layer.md
- Detailed Plasma Physics: physics-models/detailed_physics.md
- Pulsed Plant Operation: physics-models/pulsed-plant.md
Expand Down
2 changes: 1 addition & 1 deletion process/core/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,7 @@ def check_process(inputs, data): # noqa: ARG001

# Check if a single null divertor is used in double null machine
if i_single_null == DivertorNumberModels.DOUBLE_NULL and (
data.physics.f_p_div_lower in {1.0, 0.0}
data.physics.f_p_div_lower_separatrix in {1.0, 0.0}
):
logger.error(
"Operating with a single null in a double null machine", stacklevel=2
Expand Down
5 changes: 4 additions & 1 deletion process/core/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ def bounds(self) -> tuple[NumberType | None, NumberType | None]:
"beta_norm_max": InputVariable("physics", float, range=(0.0, 20.0)),
"beta_poloidal_eps_max": InputVariable("physics", float, range=(0.01, 10.0)),
"f_p_alpha_plasma_deposited": InputVariable("physics", float, range=(0.0, 1.0)),
"f_p_div_lower": InputVariable("physics", float, range=(0.0, 1.0)),
"f_p_div_lower_separatrix": InputVariable("physics", float, range=(0.0, 1.0)),
"f_plasma_fuel_deuterium": InputVariable("physics", float, range=(0.0, 1.0)),
"ffwal": InputVariable("physics", float, range=(0.0, 10.0)),
"f_nd_plasma_pedestal_greenwald": InputVariable("physics", float, range=(0.1, 1.5)),
Expand Down Expand Up @@ -1181,6 +1181,9 @@ def bounds(self) -> tuple[NumberType | None, NumberType | None]:
),
"i_len_sol_outboard_power_decay": InputVariable("physics", int, choices=range(4)),
"len_sol_outboard_power_decay": InputVariable("physics", float, range=(0.0, 1.0)),
"f_len_sol_power_decay_inboard_outboard": InputVariable(
"physics", float, range=(0.01, 2.0)
),
}


Expand Down
3 changes: 2 additions & 1 deletion process/core/io/obsolete_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@
"irfcd": "i_hcd_calculations",
"wave_mode": "i_ecrh_wave_mode",
"pheatfix": "p_hcd_secondary_extra_heat_mw",
"ftar": "f_p_div_lower",
"ftar": "f_p_div_lower_separatrix",
"beta_div": "deg_div_field_plate",
"divclfr": "f_vol_div_coolant",
"divdens": "den_div_structure",
Expand Down Expand Up @@ -478,6 +478,7 @@
"minmax": "i_figure_merit",
"neqns": "n_equality_constraints",
"nineqns": "n_inequality_constraints",
"f_p_div_lower": "f_p_div_lower_separatrix",
}

OBS_VARS_HELP = {
Expand Down
Loading
Loading