plasmapy.dispersion.numerical.hollweg_.hollweg(B: Quantity, ion: str | int | integer | Particle | CustomParticle | Quantity, k: Quantity, n_i: Quantity, theta: Quantity, *, T_e: Quantity, T_i: Quantity, gamma_e: float = 1, gamma_i: float = 3, mass_numb: int | None = None, Z: float | None = None)[source]

Calculate the two-fluid dispersion relation presented by Hollweg [1999], and discussed by Bellan [2012].

This is a numerical solver of equation 3 in Bellan [2012]. See the Notes section below for additional details.

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

  • ion (particle-like) – 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) – 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.

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

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

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

  • gamma_e (real number, keyword-only, default: 1) – The adiabatic index for electrons. The default value assumes that the electrons are able to equalize their temperature rapidly enough that the electrons are effectively isothermal.

  • gamma_i (real number, keyword-only, default: 3) – The adiabatic index for ions. The default value assumes that ion motion has only one degree of freedom, namely along magnetic field lines.

  • mass_numb (integer, keyword-only, optional) – The mass number corresponding to ion.

  • Z (real number, keyword-only, optional) – The charge number corresponding to ion.


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 an \(N x M\) array.

Return type:

Dict[str, Quantity]

  • 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 real numbers.

  • 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.

  • PhysicsWarning – When \(ω / ω_{\rm ci} > 0.1\), violation of the low-frequency assumption.

  • PhysicsWarning – When \(c_{\rm s} / v_{\rm A} > 0.1\), violation of low-β.

  • PhysicsWarning – When \(|θ - π/2| > 0.1\), violation of quasi-perpendicular propagation.


The dispersion relation presented in Hollweg [1999] (equation 3 in Bellan [2012]) is:

\[\begin{split}\left( \frac{ω^2}{k_{\rm z}^2 v_{\rm A}^2} - 1 \right) & \left[ ω^2 \left( ω^2 - k^2 v_{\rm A}^2 \right) - β k^2 v_{\rm A}^2 \left( ω^2 - k_{\rm z}^2 v_{\rm A}^2 \right) \right] \\ &= ω^2 \left(ω^2 - k^2 v_{\rm A}^2 \right) k_{\rm x}^2 \left( \frac{c_{\rm s}^2}{ω_{\rm ci}^2} - \frac{c^2}{ω_{\rm pe}^2} \frac{ω^2}{k_{\rm z}^2v_{\rm A}^2} \right)\end{split}\]


\[\begin{split}\mathbf{B}_0 &= B_0 \mathbf{\hat{z}} \\ \cos θ &= \frac{k_z}{k} \\ \mathbf{k} &= k_{\rm x} \hat{x} + k_{\rm z} \hat{z}\end{split}\]

\(ω\) is the wave frequency, \(k\) is the wavenumber, \(v_{\rm A}\) is the Alfvén velocity, \(c_{\rm s}\) is the sound speed, \(ω_{\rm ci}\) is the ion gyrofrequency, and \(ω_{\rm pe}\) is the electron plasma frequency. In the derivation of this relation Hollweg assumed low-frequency waves \(ω / ω_{\rm ci} ≪ 1\), no D.C. electric field \(\mathbf{E}_0=0\), and quasineutrality.

Hollweg [1999] asserts this expression is valid for arbitrary \(c_{\rm s} / v_{\rm A}\) (β) and \(k_{\rm z} / k\) (\(θ\)). Contrarily, Bellan [2012] states in §1.7 that due to the inconsistent retention of the \(ω / ω_{\rm ci} ≪ 1\) terms the expression can only be valid if both \(c_{\rm s} ≪ v_{\rm A}\) (low-β) and the wave propagation is nearly perpendicular to the magnetic field.

This routine solves for \(ω\) for given \(k\) values by numerically solving for the roots of the above expression.


>>> import astropy.units as u
>>> from plasmapy.dispersion.numerical import hollweg_
>>> inputs = {
...    "k": np.logspace(-7, -2, 2) * u.rad / u.m,
...    "theta": 88 * u.deg,
...    "n_i": 5 * u.cm ** -3,
...    "B": 2.2e-8 * u.T,
...    "T_e": 1.6e6 * u.K,
...    "T_i": 4.0e5 * u.K,
...    "ion": "p+",
... }
>>> omegas = hollweg(**inputs)
>>> omegas
{'fast_mode': <Quantity [2.62911663e-02+0.j, 2.27876968e+03+0.j] rad / s>,
 'alfven_mode': <Quantity [7.48765909e-04+0.j, 2.13800404e+03+0.j] rad / s>,
 'acoustic_mode': <Quantity [0.00043295+0.j, 0.07358991+0.j] rad / s>}