[1]:
from sympy import init_printing; init_printing()

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" # display all expression in one cell instead of the last one

Wave Equation

The tensor coefficient matrix in electromagnetic wave equation

\[\mathit{k}\times(\mathit{k}\times \tilde{\mathit{E}}) + k_0^2 \mathbf{\kappa}\cdot \tilde{\mathit{E}}=\mathit{0}\]
\[\begin{split}\left(\begin{bmatrix} -k_z^2 & & k_x k_z \\ & -k_x^2-k_z^2 & \\ k_x k_z & & -k_x^2 \end{bmatrix} + k_0^2 \begin{bmatrix} \kappa_\perp & -j \kappa_\times & \\ j\kappa_\times & \kappa_\perp & \\ & & \kappa_\parallel \end{bmatrix}\right)\cdot \begin{bmatrix} \tilde{E}_x\\ \tilde{E}_y\\ \tilde{E}_z \end{bmatrix} = \begin{bmatrix} 0\\ 0\\ 0 \end{bmatrix}\end{split}\]
\[\begin{split}\mathbf{T}\cdot \begin{bmatrix} \tilde{E}_x\\ \tilde{E}_y\\ \tilde{E}_z \end{bmatrix} = \begin{bmatrix} 0\\ 0\\ 0 \end{bmatrix}\end{split}\]

You can acquire the sympy.Array representation of the above (tensor) matrix coefficients by the WaveEq class’ coeff_matrix() method. For the relevant variable, you can get them by attribute e.g., wave_eq.wave.k[1] means the wave’s \(k_y\) component of \(\vec{k}\) vector.

[9]:
from sinupy import mediums, waves
from sinupy.waves import EM
plasma = mediums.ColdMagnetizedPlasma()
wave_eq = waves.EM.WaveEq(plasma)
wave = wave_eq.wave
wave_eq.coeff_matrix()
wave_eq
[9]:
$\displaystyle \left[\begin{matrix}- k_{y }^{2} - k_{z }^{2} + \frac{\kappa_{\perp} \omega_{}^{2}}{c^{2}} & - \frac{i \kappa_{\times} \omega_{}^{2}}{c^{2}} + k_{x } k_{y } & k_{x } k_{z }\\\frac{i \kappa_{\times} \omega_{}^{2}}{c^{2}} + k_{x } k_{y } & - k_{x }^{2} - k_{z }^{2} + \frac{\kappa_{\perp} \omega_{}^{2}}{c^{2}} & k_{y } k_{z }\\k_{x } k_{z } & k_{y } k_{z } & - k_{x }^{2} - k_{y }^{2} + \frac{\kappa_{\parallel} \omega_{}^{2}}{c^{2}}\end{matrix}\right]$
[9]:
$\displaystyle \left[\begin{matrix}k_{y } \left(- E_{x } k_{y } + E_{y } k_{x }\right) - k_{z } \left(E_{x } k_{z } - E_{z } k_{x }\right) & - k_{x } \left(- E_{x } k_{y } + E_{y } k_{x }\right) + k_{z } \left(- E_{y } k_{z } + E_{z } k_{y }\right) & k_{x } \left(E_{x } k_{z } - E_{z } k_{x }\right) - k_{y } \left(- E_{y } k_{z } + E_{z } k_{y }\right)\end{matrix}\right] = \left[\begin{matrix}- \frac{\omega_{}^{2} \left(E_{x } \kappa_{\perp} - i E_{y } \kappa_{\times}\right)}{c^{2}} & - \frac{\omega_{}^{2} \left(i E_{x } \kappa_{\times} + E_{y } \kappa_{\perp}\right)}{c^{2}} & - \frac{E_{z } \kappa_{\parallel} \omega_{}^{2}}{c^{2}}\end{matrix}\right]$
[ ]:

The function sinupy.waves.EM.solve_N2(WaveEq) returns the solutions of \(N^2(\omega, \theta)\), which is usually tedious for hand-deduction.

[3]:
EM.solve_N2(wave_eq)
[3]:
$\displaystyle \left[ \frac{- \kappa_{\times}^{2} \sin^{2}{\left(\theta \right)} - \kappa_{\parallel} \kappa_{\perp} \sin^{2}{\left(\theta \right)} + 2 \kappa_{\parallel} \kappa_{\perp} + \kappa_{\perp}^{2} \sin^{2}{\left(\theta \right)} + \sqrt{\kappa_{\times}^{4} \sin^{4}{\left(\theta \right)} - 4 \kappa_{\times}^{2} \kappa_{\parallel}^{2} \sin^{2}{\left(\theta \right)} + 4 \kappa_{\times}^{2} \kappa_{\parallel}^{2} + 2 \kappa_{\times}^{2} \kappa_{\parallel} \kappa_{\perp} \sin^{4}{\left(\theta \right)} - 2 \kappa_{\times}^{2} \kappa_{\perp}^{2} \sin^{4}{\left(\theta \right)} + \kappa_{\parallel}^{2} \kappa_{\perp}^{2} \sin^{4}{\left(\theta \right)} - 2 \kappa_{\parallel} \kappa_{\perp}^{3} \sin^{4}{\left(\theta \right)} + \kappa_{\perp}^{4} \sin^{4}{\left(\theta \right)}}}{2 \left(- \kappa_{\parallel} \sin^{2}{\left(\theta \right)} + \kappa_{\parallel} + \kappa_{\perp} \sin^{2}{\left(\theta \right)}\right)}, \ \frac{\kappa_{\times}^{2} \sin^{2}{\left(\theta \right)} + \kappa_{\parallel} \kappa_{\perp} \sin^{2}{\left(\theta \right)} - 2 \kappa_{\parallel} \kappa_{\perp} - \kappa_{\perp}^{2} \sin^{2}{\left(\theta \right)} + \sqrt{\kappa_{\times}^{4} \sin^{4}{\left(\theta \right)} - 4 \kappa_{\times}^{2} \kappa_{\parallel}^{2} \sin^{2}{\left(\theta \right)} + 4 \kappa_{\times}^{2} \kappa_{\parallel}^{2} + 2 \kappa_{\times}^{2} \kappa_{\parallel} \kappa_{\perp} \sin^{4}{\left(\theta \right)} - 2 \kappa_{\times}^{2} \kappa_{\perp}^{2} \sin^{4}{\left(\theta \right)} + \kappa_{\parallel}^{2} \kappa_{\perp}^{2} \sin^{4}{\left(\theta \right)} - 2 \kappa_{\parallel} \kappa_{\perp}^{3} \sin^{4}{\left(\theta \right)} + \kappa_{\perp}^{4} \sin^{4}{\left(\theta \right)}}}{2 \left(\kappa_{\parallel} \sin^{2}{\left(\theta \right)} - \kappa_{\parallel} - \kappa_{\perp} \sin^{2}{\left(\theta \right)}\right)}\right]$

R,L / X,O Waves

For specific \(\theta\), you can observe the characteristic R,L / X,O waves. The sinupy.waves.EM.solve_N2 function supports solving \(N^2(\omega, \theta=const.)\) with given \(\theta\) and it would be faster than unknown \(\theta\).

[4]:
from sympy import pi
# Wave propagate along the magnetic field, thus comes  L / R waves.
EM.solve_N2(wave_eq, theta=0)
# Wave propagate perpendicular to the magnetic field, thus comes O / X waves.
EM.solve_N2(wave_eq, theta=pi/2)
[4]:
$\displaystyle \left[ \kappa_{\times} + \kappa_{\perp}, \ - \kappa_{\times} + \kappa_{\perp}\right]$
[4]:
$\displaystyle \left[ \kappa_{\parallel}, \ - \frac{\kappa_{\times}^{2}}{\kappa_{\perp}} + \kappa_{\perp}\right]$

\(\kappa_\parallel\), \(\kappa_{\perp}\) … can be transform to \(\omega_{ce}\)

I guess nobody would like to deduce the following formula by hand. And most papers in the field of plasma physics choose to give \(N^2(\omega, \theta=const.)\) with a known \(\theta\), e.g. when \(\theta=0, \pi/2\), instead of the following complicated and complete expression. (sufficient patience required if deduced by hand)

[5]:
import sinupy.mediums.plasma as pms
N2_in_omega_theta = [
    pms.kappa2omega(sol, wave, plasma) for sol in
    EM.solve_N2(wave_eq)]
[11]:
N2_in_omega_theta
[11]:
$\displaystyle \left[ \frac{- \frac{\omega_{ce}^{2} \omega_{pe}^{4} \sin^{2}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} - \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) \sin^{2}{\left(\theta \right)} + 2 \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) + \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{2} \sin^{2}{\left(\theta \right)} + \sqrt{\frac{\omega_{ce}^{4} \omega_{pe}^{8} \sin^{4}{\left(\theta \right)}}{\omega_{}^{4} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{4}} - \frac{4 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right)^{2} \sin^{2}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} + \frac{4 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right)^{2}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} + \frac{2 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) \sin^{4}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} - \frac{2 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{2} \sin^{4}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} + \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right)^{2} \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{2} \sin^{4}{\left(\theta \right)} - 2 \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{3} \sin^{4}{\left(\theta \right)} + \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{4} \sin^{4}{\left(\theta \right)}}}{2 \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} - \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \sin^{2}{\left(\theta \right)} + \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) \sin^{2}{\left(\theta \right)} + 1\right)}, \ \frac{\frac{\omega_{ce}^{2} \omega_{pe}^{4} \sin^{2}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} + \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) \sin^{2}{\left(\theta \right)} - 2 \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) - \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{2} \sin^{2}{\left(\theta \right)} + \sqrt{\frac{\omega_{ce}^{4} \omega_{pe}^{8} \sin^{4}{\left(\theta \right)}}{\omega_{}^{4} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{4}} - \frac{4 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right)^{2} \sin^{2}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} + \frac{4 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right)^{2}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} + \frac{2 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) \sin^{4}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} - \frac{2 \omega_{ce}^{2} \omega_{pe}^{4} \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{2} \sin^{4}{\left(\theta \right)}}{\omega_{}^{2} \left(- \omega_{ce}^{2} + \omega_{}^{2}\right)^{2}} + \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right)^{2} \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{2} \sin^{4}{\left(\theta \right)} - 2 \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{3} \sin^{4}{\left(\theta \right)} + \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right)^{4} \sin^{4}{\left(\theta \right)}}}{2 \left(\frac{\omega_{pe}^{2}}{\omega_{}^{2}} + \left(- \frac{\omega_{pe}^{2}}{\omega_{}^{2}} + 1\right) \sin^{2}{\left(\theta \right)} - \left(- \frac{\omega_{pe}^{2}}{- \omega_{ce}^{2} + \omega_{}^{2}} + 1\right) \sin^{2}{\left(\theta \right)} - 1\right)}\right]$
[10]:
N2_in_omega_theta[0].simplify() # This simplification would cost a minute or more.
[10]:
$\displaystyle \frac{\omega_{ce}^{2} \omega_{pe}^{4} \sin^{2}{\left(\theta \right)} - \omega_{}^{2} \sqrt{\frac{\omega_{ce}^{2} \omega_{pe}^{4} \left(\omega_{ce} - \omega_{}\right)^{2} \left(\omega_{ce} + \omega_{}\right)^{2} \left(\omega_{ce}^{2} \omega_{}^{2} \left(\cos^{2}{\left(\theta \right)} - 1\right)^{2} + 4 \omega_{pe}^{4} \cos^{2}{\left(\theta \right)} - 8 \omega_{pe}^{2} \omega_{}^{2} \cos^{2}{\left(\theta \right)} + 4 \omega_{}^{4} \cos^{2}{\left(\theta \right)}\right)}{\omega_{}^{6} \left(\omega_{ce}^{2} - \omega_{}^{2}\right)^{4}}} \left(\omega_{ce}^{2} - \omega_{}^{2}\right)^{2} - \omega_{}^{2} \left(\omega_{ce}^{2} + \omega_{pe}^{2} - \omega_{}^{2}\right)^{2} \sin^{2}{\left(\theta \right)} + \left(\omega_{ce}^{2} - \omega_{}^{2}\right) \left(\omega_{pe}^{2} - \omega_{}^{2}\right) \left(\cos^{2}{\left(\theta \right)} + 1\right) \left(\omega_{ce}^{2} + \omega_{pe}^{2} - \omega_{}^{2}\right)}{2 \left(\omega_{ce}^{2} - \omega_{}^{2}\right) \left(\omega_{ce}^{2} \omega_{pe}^{2} \cos^{2}{\left(\theta \right)} - \omega_{ce}^{2} \omega_{}^{2} - \omega_{pe}^{2} \omega_{}^{2} + \omega_{}^{4}\right)}$