geopulse.earth.layered_1d

1-D layered-Earth surface impedance via Wait (1954) recursion.

Given a horizontally layered half-space with N layers of conductivity σ_n and thickness h_n (the terminating layer N has h_N ), the surface impedance seen from above at angular frequency ω is computed by the bottom-up recursion:

γ_n = sqrt(i·ω·μ₀·σ_n)
η_n = i·ω·μ₀ / γ_n
Z_N = η_N
Z_n = η_n · (Z_{n+1} + η_n · tanh(γ_n · h_n))
            / (η_n + Z_{n+1} · tanh(γ_n · h_n))     for n = N-1 down to 1
Z_surface = Z_1

For a uniform half-space with only the terminating layer, the recursion degenerates to the analytic Z(ω) = sqrt(i·ω·μ₀/σ); that identity is the critical acceptance test for Phase 1.

References

Classes

Layered1D(layers)

Horizontally layered Earth model.

class geopulse.earth.layered_1d.Layered1D(layers)[source]

Bases: EarthModel

Horizontally layered Earth model.

Parameters:

layers (Sequence[ConductivityLayer]) – Top-down list of layers. The final entry must have thickness_m == numpy.inf (the terminating half-space).

Raises:

DataError – If layers is empty, or the last layer is not the infinite half-space.

Examples

>>> import numpy as np
>>> from geopulse.earth.base import ConductivityLayer
>>> model = Layered1D([ConductivityLayer(np.inf, 0.01)])
>>> imp = model.compute_impedance(np.array([1e-3, 1e-2, 1e-1]))
>>> imp.Z_values.shape
(3,)
property tier: int

Return 1.

compute_impedance(freqs_Hz)[source]

Compute the surface impedance via Wait recursion.

Parameters:

freqs_Hz (ndarray) – Frequencies in Hz. Shape (n_freqs,). Must be non-negative. ω = 0 (DC) is handled specially: the surface impedance is defined to be zero because a static magnetic field induces no electric field for a finitely conducting Earth.

Return type:

ScalarImpedance

Returns:

ScalarImpedance – Surface impedance Z(ω) in Ohms. Shape (n_freqs,).

Raises:

DataError – If any frequency is negative.