two_fluid

plasmapy.dispersion.analytical.two_fluid_.two_fluid(*, B: Unit('T'), ion: Union[str, plasmapy.particles.particle_class.Particle], k: Unit('rad / m'), n_i: Unit('1 / m3'), T_e: Unit('K'), T_i: Unit('K'), theta: Unit('rad'), gamma_e: Union[float, int] = 1, gamma_i: Union[float, int] = 3, z_mean: Union[float, int] = None)

Using the solution provided by Bellan [2012], calculate the analytical solution to the two fluid, low-frequency (\(\omega/kc \ll 1\)) dispersion relation presented by Stringer [1963]. This dispersion relation also assummes a uniform magnetic field \(\mathbf{B_o}\), no D.C. electric field \(\mathbf{E_o}=0\), and quasi-neutrality. For more information see the Notes section below.

Parameters
  • B (Quantity) – The magnetic field magnitude in units convertible to T.

  • ion (str or Particle) – Representation of the ion species (e.g., 'p' for protons, 'D+' for deuterium, 'He-4 +1' for singly ionized helium-4, etc.). If no charge state information is provided, then the ions are assumed to be singly ionized.

  • k (Quantity, single valued or 1-D array) – Wavenumber in units convertible to rad/m`. Either single valued or 1-D array of length \(N\).

  • n_i (Quantity) – Ion number density in units convertible to m-3.

  • T_e (Quantity) – The electron temperature in units of K or eV.

  • T_i (Quantity) – The ion temperature in units of K or eV.

  • theta (Quantity, single valued or 1-D array) – The angle of propagation of the wave with respect to the magnetic field, \(\cos^{-1}(k_z / k)\), in units must be convertible to radians. Either single valued or 1-D array of size \(M\).

  • gamma_e (float or int, optional) – The adiabatic index for electrons, which defaults to 1. This value assumes that the electrons are able to equalize their temperature rapidly enough that the electrons are effectively isothermal.

  • gamma_i (float or int, optional) – The adiabatic index for ions, which defaults to 3. This value assumes that ion motion has only one degree of freedom, namely along magnetic field lines.

  • z_mean (float or int, optional) – The average ionization state (arithmetic mean) of the ion composing the plasma. Will override any charge state defined by argument ion.

Returns

omega – A dictionary of computed wave frequencies in units rad/s. The dictionary contains three keys: 'fast_mode' for the fast mode, 'alfven_mode' for the Alfvén mode, and 'acoustic_mode' for the ion-acoustic mode. The value for each key will be a \(N × M\) array.

Return type

Dict[str, Quantity]

Raises
  • TypeError – If applicable arguments are not instances of Quantity or cannot be converted into one.

  • TypeError – If ion is not of type or convertible to Particle.

  • TypeError – If gamma_e, gamma_i, or z_mean are not of type int or float.

  • UnitTypeError – If applicable arguments do not have units convertible to the expected units.

  • ValueError – If any of B, k, n_i, T_e, or T_i is negative.

  • ValueError – If k is negative or zero.

  • ValueError – If ion is not of category ion or element.

  • ValueError – If B, n_i, T_e, or T_I are not single valued astropy.units.Quantity (i.e. an array).

  • ValueError – If k or theta are not single valued or a 1-D array.

Warns

PhysicsWarning – When the computed wave frequencies violate the low-frequency (\(\omega/kc \ll 1\)) assumption of the dispersion relation.

Notes

The complete dispersion equation presented by Stringer [1963] (equation 1 of Bellan [2012]) is:

\[\begin{split}\left( \cos^2 \theta - Q \frac{\omega^2}{k^2 {v_A}^2} \right) & \left[ \left( \cos^2 \theta - \frac{\omega^2}{k^2 {c_s}^2} \right) - Q \frac{\omega^2}{k^2 {v_A}^2} \left( 1 - \frac{\omega^2}{k^2 {c_s}^2} \right) \right] \\ &= \left(1 - \frac{\omega^2}{k^2 {c_s}^2} \right) \frac{\omega^2}{{\omega_{ci}}^2} \cos^2 \theta\end{split}\]

where

\[\begin{split}Q &= 1 + k^2 c^2/{\omega_{pe}}^2 \\ \cos \theta &= \frac{k_z}{k} \\ \mathbf{B_o} &= B_{o} \mathbf{\hat{z}}\end{split}\]

\(\omega\) is the wave frequency, \(k\) is the wavenumber, \(v_A\) is the Alfvén velocity, \(c_s\) is the sound speed, \(\omega_{ci}\) is the ion gyrofrequency, and \(\omega_{pe}\) is the electron plasma frequency. This relation does additionally assume low-frequency waves \(\omega/kc \ll 1\), no D.C. electric field \(\mathbf{E_o}=0\) and quasi-neutrality.

Following section 5 of Bellan [2012] the exact roots of the above dispersion equation can be derived and expressed as one analytical solution (equation 38 of Bellan [2012]):

\[\frac{\omega}{\omega_{ci}} = \sqrt{ 2 \Lambda \sqrt{-\frac{P}{3}} \cos\left( \frac{1}{3} \cos^{-1}\left( \frac{3q}{2p} \sqrt{-\frac{3}{p}} \right) - \frac{2 \pi}{3}j \right) + \frac{\Lambda A}{3} }\]

where \(j = 0\) represents the fast mode, \(j = 1\) represents the Alfvén mode, and \(j = 2\) represents the acoustic mode. Additionally,

\[\begin{split}p &= \frac{3B-A^2}{3} \; , \; q = \frac{9AB-2A^3-27C}{27} \\ A &= \frac{Q + Q^2 \beta + Q \alpha + \alpha \Lambda}{Q^2} \; , \; B = \alpha \frac{1 + 2 Q \beta + \Lambda \beta}{Q^2} \; , \; C = \frac{\alpha^2 \beta}{Q^2} \\ \alpha &= \cos^2 \theta \; , \; \beta = \left( \frac{c_s}{v_A}\right)^2 \; , \; \Lambda = \left( \frac{k v_{A}}{\omega_{ci}}\right)^2\end{split}\]

Examples

>>> from astropy import units as u
>>> from plasmapy.dispersion.analytical import two_fluid
>>> inputs = {
...     "k": 0.01 * u.rad / u.m,
...     "theta": 30 * u.deg,
...     "B": 8.3e-9 * u.T,
...     "n_i": 5e6 * u.m ** -3,
...     "T_e": 1.6e6 * u.K,
...     "T_i": 4.0e5 * u.K,
...     "ion": "p+",
... }
>>> omegas = two_fluid(**inputs)
>>> omegas
{'fast_mode': <Quantity 1520.57... rad / s>,
 'alfven_mode': <Quantity 1261.75... rad / s>,
 'acoustic_mode': <Quantity 0.688152... rad / s>}
>>> inputs = {
...     "k": [1e-7, 2e-7] * u.rad / u.m,
...     "theta": [10, 20] * u.deg,
...     "B": 8.3e-9 * u.T,
...     "n_i": 5e6 * u.m ** -3,
...     "T_e": 1.6e6 * u.K,
...     "T_i": 4.0e5 * u.K,
...     "ion": "He+",
... }
>>> omegas = two_fluid(**inputs)
>>> omegas['fast_mode']
<Quantity [[0.00767..., 0.00779... ],
           [0.01534..., 0.01558...]] rad / s>