Skip to content

Commit

Permalink
Add H89 L-mode confinement scaling to post-processing.
Browse files Browse the repository at this point in the history
Regenerated all sim-cases with new post-processed outputs.

PiperOrigin-RevId: 720926347
  • Loading branch information
jcitrin authored and Torax team committed Jan 29, 2025
1 parent a6b4b48 commit 726e9f2
Show file tree
Hide file tree
Showing 67 changed files with 797 additions and 21 deletions.
21 changes: 21 additions & 0 deletions docs/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1073,6 +1073,27 @@ Bremsstrahlung model from Wesson, with an optional correction for relativistic e
``use_relativistic_correction`` (bool = False)
impurity_radiation_heat_sink
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Various models for impurity radiation. Runtime params for each available model are listed separately
``mode`` (str = 'model')
``model_func`` (str = 'impurity_radiation_mavrin_fit')
The following models are available:
* ``'impurity_radiation_mavrin_fit'``
Polynomial fits to ADAS data from `Mavrin, 2018. <https://doi.org/10.1080/10420150.2018.1462361>`_
``radiation_multiplier`` (float = 1.0). Multiplication factor for radiation term for testing sensitivities.
* ``'radially_constant_fraction_of_Pin'``
Sets impurity radiation to be a constant fraction of the total external input power.
``fraction_of_total_power_density`` (float = 1.0). Fraction of total external input power to use for impurity radiation.
cyclotron_radiation_heat_sink
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand Down
27 changes: 24 additions & 3 deletions docs/physics_models.rst
Original file line number Diff line number Diff line change
Expand Up @@ -422,8 +422,6 @@ Presently, TORAX provides three built-in formula-based particle sources for the

Radiation
---------
Currently, TORAX has dedicated models for Bremsstrahlung and cyclotron radiation.
Models for line radiation are left for future work.

Bremsstrahlung
^^^^^^^^^^^^^^
Expand All @@ -439,8 +437,31 @@ with a deposition profile from `Artaud NF 2018 <https://doi.org/10.1088/1741-432
The Albajar model includes a parameterization of the temperature profile which in TORAX is fit by simple
grid search for computational efficiency.

Impurity Radiation
^^^^^^^^^^^^^^^^^^

The following models are available:

* Set the impurity radiation to be a constant fraction of the total external input power.

* Polynomial fits to ADAS data from `Mavrin, 2018. <https://doi.org/10.1080/10420150.2018.1462361>`_
Provides radiative cooling rates for the following impurity species:
- Helium
- Lithium
- Beryllium
- Carbon
- Nitrogen
- Oxygen
- Neon
- Argon
- Krypton
- Xenon
- Tungsten
These cooling curves are multiplied by the electron density and impurity densities to obtain the impurity radiation power density.
The valid temperature range of the fit is [0.1-100] keV.

Ion Cyclotron Resonance Heating
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-------------------------------

Presently this source is implemented for a SPARC specific ICRH scenario.

Expand Down
10 changes: 2 additions & 8 deletions docs/roadmap.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,17 @@
Development Roadmap
###################

Short term development plans include:
Ongoing developments include:

* Implementation of forward sensitivity calculations w.r.t. control inputs and parameters
* More extensive tutorials
* Extended sinks

* Cyclotron radiation
* Impurity line radiation

* Sawtooth model (Porcelli + reconnection)
* Multi-ion and impurity prescribed profiles
* IMAS coupling

Longer term desired features include:

* Neoclassical tearing modes (modified Rutherford equation)
* Neoclassical transport + multi-ion transport, with a focus on heavy impurities
* Neoclassical tearing modes (modified Rutherford equation)
* Stationary-state solver
* Momentum transport

Expand Down
13 changes: 13 additions & 0 deletions torax/physics.py
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,19 @@ def calculate_scaling_law_confinement_time(
Thermal energy confinement time in s.
"""
scaling_params = {
'H89P': {
# From Yushmanov et al, Nuclear Fusion, vol. 30, no. 10, pp. 4-6, 1990
'prefactor': 0.038128,
'Ip_exponent': 0.85,
'B_exponent': 0.2,
'line_avg_ne_exponent': 0.1,
'Ploss_exponent': -0.5,
'R_exponent': 1.5,
'inverse_aspect_ratio_exponent': 0.3,
'elongation_exponent': 0.5,
'effective_mass_exponent': 0.50,
'triangularity_exponent': 0.0,
},
'H98': {
# H98 empirical confinement scaling law:
# ITER Physics Expert Groups on Confinement and Transport and
Expand Down
5 changes: 5 additions & 0 deletions torax/post_processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,9 @@ def make_outputs(
# TODO(b/380848256): include dW/dt term
tauE = W_thermal_tot / Ploss

tauH89P = physics.calculate_scaling_law_confinement_time(
geo, sim_state.core_profiles, Ploss / 1e6, 'H89P'
)
tauH98 = physics.calculate_scaling_law_confinement_time(
geo, sim_state.core_profiles, Ploss / 1e6, 'H98'
)
Expand All @@ -408,6 +411,7 @@ def make_outputs(
geo, sim_state.core_profiles, Ploss / 1e6, 'H20'
)

H89P = tauE / tauH89P
H98 = tauE / tauH98
H97L = tauE / tauH97L
H20 = tauE / tauH20
Expand Down Expand Up @@ -487,6 +491,7 @@ def make_outputs(
W_thermal_el=W_thermal_el,
W_thermal_tot=W_thermal_tot,
tauE=tauE,
H89P=H89P,
H98=H98,
H97L=H97L,
H20=H20,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

from torax.sources import source as source_lib
from torax.sources import source_models as source_models_lib
from torax.sources.impurity_radiation_heat_sink import impurity_radiation_constant_fraction
from torax.sources.impurity_radiation_heat_sink import impurity_radiation_mavrin_fit


@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
Expand All @@ -32,10 +32,10 @@ class ImpurityRadiationHeatSink(source_lib.Source):

SOURCE_NAME = "impurity_radiation_heat_sink"
DEFAULT_MODEL_FUNCTION_NAME: ClassVar[str] = (
impurity_radiation_constant_fraction.MODEL_FUNCTION_NAME
impurity_radiation_mavrin_fit.MODEL_FUNCTION_NAME
)
model_func: source_lib.SourceProfileFunction
source_models: source_models_lib.SourceModels
source_models: source_models_lib.SourceModels | None = None

@property
def source_name(self) -> str:
Expand Down
Loading

0 comments on commit 726e9f2

Please sign in to comment.