Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
f9ca4cf
Add DetailedPhysics class for enhanced plasma processing models
chris-ashe Oct 22, 2025
55891f6
:sparkle: Add Debye length calculations to DetailedPhysics class
chris-ashe Oct 22, 2025
7708d9f
:sparkle: Add electron Debye length profile variable to physics module
chris-ashe Oct 22, 2025
237b0df
Add volume averaged electron Debye length variable to physics module
chris-ashe Oct 22, 2025
7b6af0b
Add detailed Debye length calculations and output to physics module
chris-ashe Oct 22, 2025
58943aa
:sparkle: Add Lorentz factor and relativistic particle speed calculat…
chris-ashe Oct 22, 2025
c97f85c
:sparkle: Add electron thermal velocity profile variable to physics m…
chris-ashe Oct 22, 2025
b8f87a7
:sparkle: Add electron thermal velocity profile calculation and plott…
chris-ashe Oct 22, 2025
7792d1b
Add Planck's constant and new physics calculations to DetailedPhysics…
chris-ashe Oct 22, 2025
8666342
:sparkle: Add electron-electron Coulomb logarithm profile variable to…
chris-ashe Oct 22, 2025
10e1a7c
:sparkle: Add plasma frequency calculation to DetailedPhysics class
chris-ashe Oct 22, 2025
04a50b1
:sparkle: Add electron plasma frequency profile variable to physics m…
chris-ashe Oct 22, 2025
a829a27
:sparkle: Add electron thermal frequency profile calculation to Detai…
chris-ashe Oct 22, 2025
a5a8dbc
:sparkle: Add Larmor frequency calculation method to DetailedPhysics …
chris-ashe Oct 22, 2025
682eb74
Add electron Larmor frequency profile variable for toroidal magnetic …
chris-ashe Oct 22, 2025
a4ad341
:sparkle: Add Larmor frequency calculation for electron profile in De…
chris-ashe Oct 22, 2025
5b1a58c
:sparkle: Add Larmor frequency profile for toroidal magnetic field in…
chris-ashe Oct 22, 2025
1972419
:sparkle: Add calculation and plotting for plasma Coulomb logarithms …
chris-ashe Oct 23, 2025
c43926e
Post rebase changes
chris-ashe Dec 8, 2025
f49171d
:sparkle: Add documentation for Detailed Plasma Physics and link in m…
chris-ashe Dec 8, 2025
08d7b6e
Post rebase changes again
chris-ashe Jan 5, 2026
98bb56d
Refactor DetailedPhysics methods to static and add unit tests for pla…
chris-ashe Jan 7, 2026
c042380
Enhance plasma calculation methods to support array inputs and update…
chris-ashe Jan 7, 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
85 changes: 85 additions & 0 deletions documentation/physics-models/detailed_physics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Detailed Plasma Physics

It can sometimes be useful to calculate rough values for key plasma paramters that are normally used in higher fidelity codes. The `DetailedPhysics()` class stores functions that are called and the end of the run to show rough values for key plasma behavior parameters. The calculation is done at the end as no other methods currently depend on these values.

## Detailed Plasma Physics | `DetailedPhysics()`


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

### Debye length | `calculate_debye_length()`

Calculates the Debye lenght given by:

$$
\lambda_{D} = \sqrt{\frac{\epsilon_0 k_B T_e}{n e^2}}
$$

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

### Relativistic particle speed | `calculate_relativistic_particle_speed()`

$$
v = c \times \sqrt{\left(1- \frac{1}{\left(1+\frac{E}{mc^2}\right)^2}\right)}
$$

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

### Coulomb Logarithm | `calculate_coulomb_log_from_impact()`

Calculates the Coulomb logarithm assuming a straight line Landau-Spitzer method

$$
\ln \Lambda = \ln{\left(\frac{b_{\text{max}}}{b_{\text{min}}}\right)}
$$

The maximum impact parameter is given by the Debye length calculated by [`calculate_debye_length()`](#debye-length--calculate_debye_length)
$$
b_{\text{max}} = \lambda_{\text{Debye}}
$$

The minimum impact paramter is the largest of either the classical distance of closest approach or the Debye length.

$$
\begin{split}b_{\text{min}} ≡
\left\{
\begin{array}{ll}
λ_{\text{de Broglie}} & \mbox{if } λ_{\text{de Broglie}} ≥ ρ_⟂ \\
ρ_⟂ & \mbox{if } ρ_⟂ ≥ λ_{\text{de Broglie}}
\end{array}
\right.\end{split}
$$

$ρ_⟂$ is the classical distance of closest approach calculated by [`calculate_classical_distance_of_closest_approach()`](#classical-distance-of-closest-approach----calculate_classical_distance_of_closest_approach)

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

### Classical distance of closest approach | `calculate_classical_distance_of_closest_approach()`

$$
\frac{Z_1Z_2e^2}{4\pi \epsilon_0 E_{\text{kinetic}}}
$$

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

### DeBroglie Wavelength | `calculate_debroglie_wavelength()`

$$
\lambda_{\text{DeBroglie}} = \frac{h}{2\pi m v}
$$

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

### Plasma Frequency | `calculate_plasma_frequency()`

$$
\omega_p = \sqrt{\frac{n_ie^2}{\epsilon_0 m_i}}
$$

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

### Larmor Frequency | `calculate_larmor_frequency()`

$$
f_{\text{Larmor}} = \frac{Z_ieB}{2\pi m_i}
$$
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,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
- Detailed Plasma Physics: physics-models/detailed_physics.md
- Pulsed Plant Operation: physics-models/pulsed-plant.md
- Engineering Models:
- Machine Build: eng-models/machine-build.md
Expand Down
5 changes: 4 additions & 1 deletion process/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,12 +189,15 @@
https://physics.nist.gov/cgi-bin/Compositions/stand_alone.pl?ele=W
"""

SPEED_LIGHT = 299792458
SPEED_LIGHT = 299792458.0
"""Speed of light in vacuum (c) [m/s]
Reference: National Institute of Standards and Technology (NIST)
https://physics.nist.gov/cgi-bin/cuu/Value?c|search_for=light
"""

PLANCK_CONSTANT = 6.62607015e-34
"""Planck's constant [J.s]"""

D_T_ENERGY = (
(DEUTERON_MASS + TRITON_MASS) - (ALPHA_MASS + NEUTRON_MASS)
) * SPEED_LIGHT**2
Expand Down
32 changes: 31 additions & 1 deletion process/data_structure/physics_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -1320,6 +1320,24 @@
n_charge_plasma_effective_mass_weighted_vol_avg: float = None
"""Plasma mass-weighted volume averaged plasma effective charge"""

len_plasma_debye_electron_profile: list[float] = None
"""Profile of electron Debye length in plasma (m)"""

len_plasma_debye_electron_vol_avg: float = None
"""Volume averaged electron Debye length in plasma (m)"""

vel_plasma_electron_profile: list[float] = None
"""Profile of electron thermal velocity in plasma (m/s)"""

plasma_coulomb_log_electron_electron_profile: list[float] = None
"""Profile of electron-electron Coulomb logarithm in plasma"""

freq_plasma_electron_profile: list[float] = None
"""Electron plasma frequency profile (Hz)"""

freq_plasma_larmor_toroidal_electron_profile: list[float] = None
"""Profile of electron Larmor frequency in plasma due to toroidal magnetic field (Hz)"""


def init_physics_module():
"""Initialise the physics module"""
Expand Down Expand Up @@ -1639,7 +1657,13 @@ def init_physics_variables():
a_plasma_poloidal, \
n_charge_plasma_effective_vol_avg, \
n_charge_plasma_effective_profile, \
n_charge_plasma_effective_mass_weighted_vol_avg
n_charge_plasma_effective_mass_weighted_vol_avg, \
len_plasma_debye_electron_profile, \
len_plasma_debye_electron_vol_avg, \
vel_plasma_electron_profile, \
plasma_coulomb_log_electron_electron_profile, \
freq_plasma_electron_profile, \
freq_plasma_larmor_toroidal_electron_profile

m_beam_amu = 0.0
m_fuel_amu = 0.0
Expand Down Expand Up @@ -1900,3 +1924,9 @@ def init_physics_variables():
n_charge_plasma_effective_vol_avg = 0.0
n_charge_plasma_effective_profile = []
n_charge_plasma_effective_mass_weighted_vol_avg = 0.0
len_plasma_debye_electron_profile = []
len_plasma_debye_electron_vol_avg = 0.0
vel_plasma_electron_profile = []
plasma_coulomb_log_electron_electron_profile = []
freq_plasma_electron_profile = []
freq_plasma_larmor_toroidal_electron_profile = []
Loading
Loading