In [ ]:
from geoscilabs.em.PlanewaveWidgetFD import PlanewaveWidget, PolarEllipse, InteractivePlaneProfile
from geoscilabs.em.DipoleWidgetFD import InteractiveDipoleProfile
from geoscilabs.em.VolumeWidgetPlane import InteractivePlanes, plotObj3D

Planewave propagation in a Whole-space (frequency-domain)

Purpose

We visualizae downward propagating planewave in the homogeneous earth medium. With the three apps: a) Plane wave app, b) Profile app, and c) Polarization ellipse app, we understand fundamental concepts of planewave propagation.

Set up

Planewave EM equation can be written as

$$\frac{\partial^2 \mathbf{E}}{\partial z^2} + k^2 \mathbf{E} = 0,$$

For homogeneous earth, solution can be simply derived:

$$\mathbf{E} = \mathbf{E}_0 e^{ikz}$$$$\mathbf{H} = - i \omega \mu \nabla \times (\mathbf{E}_0 e^{ikz}).$$

where complex wavenumber $k$ is

$$ k = \sqrt{\mu \epsilon \omega^2 - i \mu \sigma \omega}.$$

In time domain, the wave travelling in the negative z-direction has the form:

$$ \mathbf{e} = \mathbf{e}_0^- e^{i(k z + \omega t)}.$$
In [ ]:
ax = plotObj3D()

Planewave app

Parameters:

  • Field: Type of EM fields ("Ex": electric field, "Hy": magnetic field)
  • AmpDir: Type of the vectoral EM fields

    None: $F_x$ or $F_y$ or $F_z$

    Amp: $\mathbf{F} \cdot \mathbf{F}^* = |\mathbf{F}|^2$

    Dir: Real part of a vectoral EM fields, $\Re[\mathbf{F}]$

  • ComplexNumber: Type of complex data ("Re", "Im", "Amp", "Phase")

  • Frequency: Transmitting frequency (Hz)
  • Sigma: Conductivity of homogeneous earth (S/m)
  • Scale: Choose "log" or "linear" scale
  • Time:
In [ ]:
dwidget = PlanewaveWidget()
dwidget.InteractivePlaneWave()

Profile app

We visualize EM fields at vertical profile (marked as red dots in the above app).

Parameters:

  • Field: Ex, Hy, and Impedance
  • $\sigma$ : Conductivity (S/m)
  • Scale: Log10 or Linear scale
  • Fixed: Fix the scale or not
  • $f$: Frequency
  • $t$: Time
In [ ]:
InteractivePlaneProfile()

Polarization Ellipse app

In [ ]:
Polarwidget = PolarEllipse(); 
Polarwidget.Interactive()
In [ ]: