Transport Physics And Flux Models

This page summarizes the transport equations solved by NEOPAX and the mathematical structure of the built-in flux models. The goal is to make the notation explicit and to separate clearly:

  • the conservation-law structure of the transport system

  • the flux decomposition into neoclassical, turbulent, and classical channels

  • the way NTX/NTSS-inspired neoclassical models are assembled

Flux-Surface-Averaged Transport Form

The underlying transport equations are conservation laws of the form

\[\partial_t u + \nabla \cdot \mathbf{F} = S.\]

NEOPAX solves a 1D radial, flux-surface-averaged version of these equations on the radial coordinate \(\rho\). In this reduced form, the divergence operator is represented as

\[\mathcal{V}_{\rho}[F] := -\frac{1}{V'(\rho)} \frac{\partial}{\partial \rho} \left( V'(\rho)\,F(\rho) \right),\]

where \(V'(\rho)\) is the differential volume factor carried by the geometry model. In the code, this is the same conservative volume-weighted operator used in conservative_update(...).

With that convention, NEOPAX evolves:

  • densities \(n_s\)

  • pressures \(p_s = n_s T_s\)

  • optionally the radial electric field \(E_r\)

Density Equation

For each independently evolved species,

\[\partial_t n_s = \mathcal{V}_{\rho}\!\left(\Gamma_s\right) + S^{(n)}_s.\]

Here:

  • \(\Gamma_s\) is the radial particle flux

  • \(S^{(n)}_s\) is the density-source contribution

NEOPAX can evolve only the independent ion/impurity densities and reconstruct the electron density algebraically through quasi-neutrality.

Pressure / Temperature Equation

NEOPAX evolves pressure rather than temperature directly. For each active species,

\[\partial_t p_s = \frac{2}{3} \left[ \mathcal{V}_{\rho} \left( Q_s + T_s \Gamma_s^{\mathrm{neo}} + T_s \Gamma_s^{\mathrm{turb}} + T_s \Gamma_s^{\mathrm{class}} \right) + S^{(p)}_s + q_s \Gamma_s E_r \right].\]

The fluxes are split as

\[\Gamma_s = \Gamma_s^{\mathrm{neo}} + \Gamma_s^{\mathrm{turb}} + \Gamma_s^{\mathrm{class}},\]
\[Q_s = Q_s^{\mathrm{neo}} + Q_s^{\mathrm{turb}} + Q_s^{\mathrm{class}}.\]

So the pressure equation contains:

  • conductive heat flux \(Q_s\)

  • convective energy transport \(T_s \Gamma_s\)

  • pressure-source terms \(S^{(p)}_s\)

  • the optional work term \(q_s \Gamma_s E_r\)

Radial Electric Field Equation

The \(E_r\) equation is written as a relaxation-diffusion equation driven by ambipolar charge balance:

\[\partial_t E_r = \tau_{E_r} \left[ D_{E_r}\,\mathcal{V}_{\rho}(F_{E_r}) - \mathcal{A} \right],\]

with

\[\mathcal{A} = \sum_s Z_s \Gamma_s\]

for the local ambipolar source mode. In the transport-centered mode, NEOPAX builds the charge balance from face-reconstructed particle fluxes before mapping them back to cell centers.

Flux-Model Composition

The runtime transport model is built as a composition of up to three channels:

  • neoclassical

  • turbulent

  • classical

At the combined-model level, NEOPAX keeps the components separate as long as possible and exposes both:

  • total outputs: Gamma, Q, Upar

  • split outputs: - Gamma_neo, Q_neo, Upar_neo - Gamma_turb, Q_turb, Upar_turb - Gamma_classical, Q_classical, Upar_classical

This split is important because the pressure equation assembles the convective terms channel-by-channel, even though the final conservative update uses the total radial energy flux.

NTX / NTSS-Inspired Neoclassical Models

The built-in neoclassical models are based on the standard transport-matrix representation

\[\Gamma_a = -n_a \left( L_{11}^{(a)} A_{1,a} + L_{12}^{(a)} A_{2,a} + L_{13}^{(a)} A_{3} \right),\]
\[Q_a = -n_a T_a \left( L_{21}^{(a)} A_{1,a} + L_{22}^{(a)} A_{2,a} + L_{23}^{(a)} A_{3} \right),\]
\[U_{\parallel,a} = -n_a \left( L_{31}^{(a)} A_{1,a} + L_{32}^{(a)} A_{2,a} + L_{33}^{(a)} A_{3} \right),\]

where:

  • \(a\) labels the species

  • \(A_1\), \(A_2\), \(A_3\) are the thermodynamic-force terms used internally by NEOPAX

  • \(L_{ij}^{(a)}\) are the species transport coefficients after energy convolution

In the database-driven NTX pathway, the monoenergetic inputs are

  • \(D_{11}\)

  • \(D_{13}\)

  • \(D_{33}\)

tabulated as functions of radial position, collisionality, and \(E_r / v\). NEOPAX interpolates these coefficients and performs the energy convolution on the active Laguerre velocity grid:

\[L_{ij}^{(a)} \sim \sum_k w_{ij}(x_k)\,D_{\alpha\beta}(x_k),\]

with the appropriate geometry- and species-dependent prefactors. In the current implementation:

  • \(D_{11}\) is stored in logarithmic form in the database path

  • \(D_{13}\) and \(D_{33}\) are used directly after interpolation

  • \(D_{33}\) is divided by \(\nu / v\) in the final assembly, matching the code path used to build \(L_{33}\)

This is the same broad NTX/NTSS-style strategy: monoenergetic transport data first, thermodynamic-force assembly second, fluxes last.

Built-In Neoclassical Models

ntx_database

This is the standard database-driven neoclassical model.

Workflow:

  1. read a precomputed monoenergetic NTX database

  2. interpolate \(D_{11}\), \(D_{13}\), \(D_{33}\) at the local \((\rho,\nu/v,E_r/v)\) state

  3. convolve over the active energy grid

  4. assemble \(L_{ij}\)

  5. evaluate \(\Gamma\), \(Q\), and \(U_{\parallel}\)

This is the main NTX-backed model used in the stock transport examples.

ntx_scan_runtime

This model uses the same final transport law as ntx_database, but the monoenergetic database is built on the fly from NTX scan grids supplied in the TOML file:

  • ntx_scan_rho

  • ntx_scan_nu_v

  • ntx_scan_er_tilde

So the distinction is:

  • ntx_database reads a prebuilt database from file

  • ntx_scan_runtime builds the database at runtime and then uses the same interpolation-and-convolution structure

ntx_exact_lij_runtime

This model bypasses the intermediate interpolated monoenergetic database. Instead, it solves NTX directly on the active NEOPAX energy grid at the local state and assembles \(L_{ij}\) in real time.

Conceptually:

  1. evaluate the local \(\nu / v\) and \(E_r / v\) arrays on the active energy grid

  2. call NTX directly for those energy-grid points

  3. assemble \(L_{ij}\) immediately

  4. evaluate \(\Gamma\), \(Q\), and \(U_{\parallel}\)

This is the most direct NTX-backed path currently available in NEOPAX and is the main benchmark target for the lagged-response work.

ntx_database_with_momentum

This is the momentum-correction branch built on top of the same NTX-style transport-matrix framework. It extends the coefficient assembly with the extra matrix structure required by the momentum-correction closure.

Built-In Turbulent Models

turbulent_analytical

This model uses simple diffusive closures:

\[\Gamma_s^{\mathrm{turb}} = -\chi_{n,s}\,\frac{\partial n_s}{\partial \rho},\]
\[Q_s^{\mathrm{turb}} = -n_s\,\chi_{T,s}\,\frac{\partial T_s}{\partial \rho}.\]

It is a lightweight analytical model useful for controlled transport tests.

turbulent_power_analytical and ntss_power_over_n

These models use the same diffusive structure but normalize the transport coefficients with a total-power scaling consistent with the NTSS power-over-n style:

\[\chi_{n,s}^{\mathrm{eff}} \propto \chi_{n,s}\,\frac{P^{3/4}}{n_e},\]
\[\chi_{T,s}^{\mathrm{eff}} \propto \chi_{T,s}\,\frac{P^{3/4}}{n_e}.\]

Then

\[\Gamma_s^{\mathrm{turb}} = -\chi_{n,s}^{\mathrm{eff}} \frac{\partial n_s}{\partial \rho},\]
\[Q_s^{\mathrm{turb}} = -n_s\,\chi_{T,s}^{\mathrm{eff}} \frac{\partial T_s}{\partial \rho}.\]

In the code, the total-power factor is either provided explicitly or inferred from the active pressure-source model.

File-Driven Flux Model

fluxes_r_file

This model reads radial profiles of:

  • \(\Gamma_s(\rho)\)

  • \(Q_s(\rho)\)

  • \(U_{\parallel,s}(\rho)\)

from file and interpolates them onto the active NEOPAX radial grid.

This is mainly useful for:

  • benchmark playback

  • isolated transport-equation tests

  • feeding externally generated fluxes into the transport solver

Classical Channel

The combined transport interface reserves a classical channel in the same way as the neoclassical and turbulent channels. In the stock examples this is usually set to none, but the split remains explicit in the transport assembly so that classical contributions can be added without changing the equation structure.