18  Poynting und Energiefluss

Du legst den Lichtschalter um, und die Lampe ist an — „sofort”, über drei Meter Kabel. Jetzt die unbequeme Zahl dazu: Die Elektronen, die im Kupferdraht den Strom bilden, kriechen. Bei zehn Ampere durch eine gewöhnliche 1,5-mm²-Leitung beträgt ihre Driftgeschwindigkeit etwa einen halben Millimeter pro Sekunde — für die drei Meter bis zur Lampe bräuchte ein Elektron anderthalb Stunden. Bei Wechselstrom kommen sie überhaupt nie an: Sie zittern nur wenige Mikrometer um ihren Platz. Irgendetwas anderes muss die Energie zur Lampe bringen, und zwar mit nahezu Lichtgeschwindigkeit. Dieses Kapitel zeigt, wer — und vor allem: auf welchem Weg. Die Antwort („im Feld neben dem Draht, nicht im Draht”) gehört zu den Einsichten der Elektrodynamik, die auch erfahrene Praktiker noch verblüffen.

Dafür sammeln wir Schulden ein. Kapitel 1 hat beim Kreuzprodukt versprochen, dass \(\vec{S} = \vec{E} \times \vec{H}\) einmal „die Energie jeder Funkwelle” tragen wird; Kapitel 3 schuldet uns die „exakte Buchhaltung” der Feldenergie; Kapitel 4 behauptete, dass elektrischer und magnetischer Topf einer Lichtwelle exakt gleich viel Energie enthalten (obwohl die Zahlenwerte um den Faktor \(c\) auseinanderliegen); Kapitel 6 hat die Verlustleistung \(\vec{J}\cdot\vec{E}\) angekündigt; und Kapitel 16/17 haben wiederholt behauptet, Energie reise mit der Gruppengeschwindigkeit — gemessen haben wir bisher nur, dass Pakete das tun. Alles davon wird jetzt eingelöst, und fast alles davon wird gemessen.

Lernziele

Nach diesem Kapitel kannst du …

  1. … die Energiedichten \(u_E = \tfrac{\varepsilon_0}{2}E^2\) und \(u_B = \tfrac{1}{2\mu_0}B^2\) berechnen und zeigen, dass eine laufende Welle beide Töpfe exakt gleich füllt — eine stehende Welle dagegen zwischen ihnen pendelt,
  2. … den Poynting-Satz \(\partial_t u + \nabla\cdot\vec{S} = -\vec{J}\cdot\vec{E}\) herleiten und als Buchhaltung im FDTD-Lauf verifizieren — im Vakuum auf Maschinengenauigkeit,
  3. … die \(\vec{S}\)-Karte einer Leitung lesen: Die Leistung fließt im Feld zwischen den Leitern; Verluste sind der kleine Anteil, der seitlich ins Metall kippt,
  4. … das Lampen-Paradox auflösen (Driftgeschwindigkeit ausrechnen — und erklären, warum sie nicht zählt),
  5. … die Energie-Transportgeschwindigkeit \(v_E = \langle S\rangle/\langle u\rangle\) messen und zeigen, dass sie \(v_g\) ist, nicht \(v_p\).

18.1 Zwei Töpfe: die Energie im Feld

Die Zutaten stehen seit Teil I bereit. Ein elektrisches Feld speichert pro Volumen die Energie \(u_E = \tfrac{\varepsilon_0}{2}E^2\), ein magnetisches \(u_B = \tfrac{1}{2\mu_0}B^2\) — beides Skalarfelder (an jedem Ort eine Zahl, Einheit J/m³). Jetzt die Kapitel-4-Schuld, mit den Zahlen von dort: Sonnenlicht am Boden bringt rund \(I = 1000\) W/m², das gehört (gleich rechnen wir nach, warum) zu einem E-Feld mit Spitzenwert \(E_0 \approx 868\) V/m — und zu einem B-Feld von nur \(B_0 = E_0/c \approx 2{,}9\) µT, zwanzigmal schwächer als das Erdmagnetfeld. Sieht aus, als wäre das B-Feld eine Randerscheinung. Die Energierechnung sagt das Gegenteil:

\[u_B \;=\; \frac{B_0^2}{2\mu_0} \;=\; \frac{(E_0/c)^2}{2\mu_0} \;=\; \frac{E_0^2}{2\mu_0 c^2} \;=\; \frac{\varepsilon_0}{2}E_0^2 \;=\; u_E,\]

denn \(c^2 = 1/\varepsilon_0\mu_0\) (Kapitel 3) — der „Faktor \(c\) Unterschied” der Feldstärken wird von den ungleichen Vorfaktoren exakt geschluckt. Mit Zahlen: \(u_E = \tfrac{1}{2} \cdot 8{,}85 \cdot 10^{-12} \cdot 868^2 = 3{,}3\) µJ/m³ und \(u_B = (2{,}89 \cdot 10^{-6})^2 / (2 \cdot 1{,}257 \cdot 10^{-6}) = 3{,}3\) µJ/m³. Beide Töpfe sind gleich voll — bei jeder laufenden Welle, denn dort gilt punktweise \(B = E/c\) (Kapitel 4).

Bei einer stehenden Welle gilt das nicht, und das macht sie zum perfekten Testfall:

WichtigVorhersage-Punkt

Eine stehende Welle schwingt im Takt: Zweimal pro Periode ist das E-Feld überall gleichzeitig null. Die Welle hat aber ständig dieselbe Gesamtenergie. Wo steckt sie in diesem Moment — und wo steckt sie eine Viertelperiode später?

Das Experiment dazu im 1D-Labor aus Kapitel 6 (zwei Läufe, ein Bild). Frage: Füllt der laufende Puls beide Töpfe gleich — und pendelt die stehende Welle zwischen ihnen? Bühne: das vertraute 12-m-Gitter, \(\Delta x = 1\) cm, \(S = 1\). Anfangsbedingungen: Lauf 1 startet einen rechtslaufenden Gauß-Puls (E und B gemeinsam gesetzt, \(B = -E/c\) — so läuft er nur nach rechts, Kapitel 5); Lauf 2 startet die Grundmode des geschlossenen Kastens (\(E = \sin(\pi x/L)\), \(B = 0\), PEC-Ränder) und wir fotografieren \(u_E\) und \(u_B\) bei \(t = 0\) und eine Viertelperiode später. Erfolgskriterium: Lauf 1: \(u_B/u_E = 1\) im Puls; Lauf 2: die Energie wechselt vollständig den Topf.

import numpy as np
import matplotlib.pyplot as plt
from scipy.constants import c as C
from scipy.constants import epsilon_0, mu_0

N, DX = 1201, 0.01
DT = DX / C                                # S = 1 (Kapitel 5)
X = np.arange(N) * DX
L = (N - 1) * DX

def schritt(E, B, pec=False):
    """Ein Leapfrog-Schritt; Mur- oder PEC-Ränder (Kapitel 5/6)."""
    B += (DT / DX) * np.diff(E)
    E_alt = E.copy()
    E[1:-1] += (C**2 * DT / DX) * np.diff(B)
    if not pec:
        E[0], E[-1] = E_alt[1], E_alt[-2]  # Mur bei S = 1
    return E_alt

# Lauf 1: rechtslaufender Puls (B = -E/c am Halbpunkt, Kapitel 5)
E1 = np.exp(-((X - 3.0) / 0.3)**2)
B1 = -0.5 * (E1[:-1] + E1[1:]) / C
for n in range(200):                       # Puls wandert 3 m -> 5 m
    schritt(E1, B1)

# Lauf 2: stehende Grundmode im PEC-Kasten
E2 = np.sin(np.pi * X / L)
B2 = np.zeros(N - 1)
T_periode = 2 * L / C                      # Grundmode: λ = 2L
u_paare = [(0.5 * epsilon_0 * E2**2, 0.5 / mu_0 * B2**2)]   # t = 0
for n in range(int(T_periode / 4 / DT)):   # eine Viertelperiode weiter
    schritt(E2, B2, pec=True)
u_paare.append((0.5 * epsilon_0 * E2**2, 0.5 / mu_0 * B2**2))

fig, (links, rechts) = plt.subplots(1, 2, figsize=(9, 3.6))
links.plot(X, 0.5 * epsilon_0 * E1**2 * 1e12, "C0",
           label="$u_E$")
links.plot(X[:-1] + DX / 2, 0.5 / mu_0 * B1**2 * 1e12, "k:",
           lw=2, label="$u_B$")
links.set(xlim=(4.0, 6.0), xlabel="x (m)",
          ylabel="Energiedichte (µJ/m³ je Amplitude 1 V/m)",
          title="laufender Puls: beide Töpfe gleich")
links.legend(fontsize=9)
for (u_e, u_b), stil, name in ((u_paare[0], "-", "t = 0"),
                               (u_paare[1], "--", "t = T/4")):
    rechts.plot(X, u_e * 1e12, "C0" + stil, label=f"$u_E$ ({name})")
    rechts.plot(X[:-1] + DX / 2, u_b * 1e12, "C3" + stil,
                label=f"$u_B$ ({name})")
rechts.set(xlabel="x (m)", ylabel="Energiedichte (µJ/m³)",
           title="stehende Welle: die Energie pendelt")
rechts.legend(fontsize=8)
fig.tight_layout()
plt.show()
u_e1 = 0.5 * epsilon_0 * E1**2
u_b1 = 0.5 / mu_0 * B1**2
m = u_e1[:-1] > 0.01 * u_e1.max()
print(f"laufender Puls: u_B/u_E im Puls = "
      f"{(u_b1[m] / u_e1[:-1][m]).mean():.4f}")
print(f"stehende Welle: E-Topf bei t = 0: "
      f"{np.sum(u_paare[0][0]):.3e},  bei T/4: "
      f"{np.sum(u_paare[1][0]):.3e}  (alles umgezogen)")
Abbildung 18.1: Links: Beim rechtslaufenden Puls (nach 200 Schritten) liegen u_E (Linie) und u_B (gepunktet) deckungsgleich übereinander — eine laufende Welle füllt beide Töpfe exakt gleich. Rechts: Die stehende Grundmode des geschlossenen Kastens bei t = 0 (alles im E-Topf, ein Bauch in der Mitte) und eine Viertelperiode später (alles in den B-Topf umgezogen, mit Bäuchen an den Wänden — B ist dort am stärksten, wo E einen Knoten hat). Die Energie schwappt zweimal pro Periode vollständig um.
laufender Puls: u_B/u_E im Puls = 1.0057
stehende Welle: E-Topf bei t = 0: 2.656e-09,  bei T/4: 4.551e-15  (alles umgezogen)

Die Antwort auf den Vorhersage-Punkt steht im rechten Bild: Im E-Nulldurchgang ist die Energie komplett im Magnetfeld — und zwar räumlich umsortiert, denn die B-Bäuche sitzen an den E-Knoten. Die stehende Welle ist ein Pendel: E-Topf und B-Topf tauschen die Energie zweimal pro Periode vollständig aus, wie Spannkraft und Bewegung beim Federpendel. (Kapitel 19 baut auf genau diesem Bild den Schwingkreis.)

In dieser HTML-Fassung schwappt es wirklich — eine volle Periode der Grundmode in 24 Bildern. Sieh mit den Einzelschritt-Knöpfen nach: Der E-Berg in der Mitte sackt zusammen, während die B-Buckel an den Wänden wachsen (genau dort, wo \(E\) seine Knoten hat), und eine Viertelperiode später läuft alles rückwärts. Der Titel führt die Topfstände mit.

Code der Animation (nur in der HTML-Fassung)
# von oben: np, plt, schritt(), X, DX, N, L, T_periode, DT, epsilon_0, mu_0
from matplotlib import animation
from IPython.display import HTML

E_f = np.sin(np.pi * X / L)              # frischer Start: alles im E-Topf
B_f = np.zeros(N - 1)
je_frame = round(T_periode / DT / 24)    # 24 Bilder pro Periode
filmbilder = []
for j in range(24):
    u_e = 0.5 * epsilon_0 * E_f**2 * 1e12
    u_b = 0.5 / mu_0 * B_f**2 * 1e12
    filmbilder.append((u_e, u_b, u_e.sum() / (u_e.sum() + u_b.sum())))
    for _ in range(je_frame):
        schritt(E_f, B_f, pec=True)

fig_a, ax_a = plt.subplots(figsize=(7, 3.4))
linie_e, = ax_a.plot(X, filmbilder[0][0], color="C0", lw=1.6,
                     label="$u_E$")
linie_b, = ax_a.plot(X[:-1] + DX / 2, filmbilder[0][1], color="C3",
                     lw=1.6, label="$u_B$")
ax_a.set(xlabel="x (m)", ylabel="Energiedichte (µJ/m³)", ylim=(0, 5.0))
ax_a.legend(fontsize=9, loc="upper right")

def zeichne(j):
    u_e, u_b, anteil_e = filmbilder[j]
    linie_e.set_ydata(u_e)
    linie_b.set_ydata(u_b)
    ax_a.set_title(f"t = {j}/24 T — E-Topf {100 * anteil_e:3.0f} %, "
                   f"B-Topf {100 * (1 - anteil_e):3.0f} %")
    return [linie_e, linie_b]

anim = animation.FuncAnimation(fig_a, zeichne, frames=24, interval=100)
plt.close(fig_a)
HTML(anim.to_jshtml(default_mode="loop"))

Und hier die Spielwiese dazu (editierbar; Run-Knopf oder Strg+Enter): derselbe Kasten, aber gemessen werden die Topfstände über der Zeit — die Buchhaltungssicht des Pendels. Zwei Aufträge: Sage erst voraus, wie oft sich der B-Topf bei MODE_M = 3 in zwei Grundmoden-Perioden füllt — dann probiere es. Und sieh dir die schwarze Summenlinie genau an: Sie ist fast gerade, zittert aber um rund ein Prozent. Warum das kein Bug ist und wie man die Buchhaltung exakt bekommt, klärt gleich der nächste Abschnitt.

18.2 Die Buchhaltung: der Poynting-Satz

Energie sitzt also im Feld — aber sie bleibt nicht sitzen. Wie reist sie? Die Antwort folgt aus den Maxwell-Gleichungen mit nichts als der Produktregel; in 1D (Felder \(E_z(x)\), \(B_y(x)\), unsere Laborwelt) passt die Rechnung auf wenige Zeilen. Die Zeitableitung der Energiedichte ist

\[\frac{\partial u}{\partial t} = \varepsilon_0 E\,\frac{\partial E}{\partial t} + \frac{1}{\mu_0}B\,\frac{\partial B}{\partial t},\]

und für beide Zeitableitungen haben wir seit Kapitel 5 Maxwell-Ersatz: \(\varepsilon_0\,\partial_t E = -\partial_x B/\mu_0 - J\) und \(\partial_t B = -\partial_x E\) (Vorzeichen in unserer 1D-Konvention). Einsetzen, Produktregel rückwärts lesen (\(E\,\partial_x B + B\,\partial_x E = \partial_x(EB)\)), fertig:

\[\boxed{\;\frac{\partial u}{\partial t} + \frac{\partial}{\partial x}\Bigl(\frac{E\,B}{\mu_0}\Bigr) = -\,J\,E\;}\]

Das ist der Poynting-Satz, und er hat exakt die Gestalt einer Kontinuitätsgleichung: Was an Energiedichte verschwindet, ist entweder als Strom \(S = EB/\mu_0\) (allgemein: \(\vec{S} = \vec{E}\times\vec{H}\), das Kreuzprodukt aus Kapitel 1) weitergeflossen oder als \(J\,E\) an Ladungen verarbeitet worden — beim Ohmschen \(J = \sigma E\) heißt das: zu Wärme geworden, \(\sigma E^2\), die Wärmeleistung aus dem Kapitel-6-Versprechen. Es gibt kein viertes Schicksal. Energie verschwindet nie, sie hat immer einen Weg oder einen Empfänger — das ist die „exakte Buchhaltung”, die Kapitel 3 angekündigt hat.

Wie exakt? Das lässt sich auf dem Gitter wörtlich prüfen — und dabei wartet eine Pointe. Frage: Ist die Gesamtenergie eines geschlossenen, verlustfreien Kastens konstant? Bühne: das 1D-Gitter mit PEC-Enden (nichts entkommt), darin ein ruhender Anfangspuls, 4000 Schritte. Gemessen wird die Gesamtenergie \(U(t)\) — auf zwei Arten: einmal „naiv” als \(\sum_i \tfrac{\varepsilon_0}{2}(E_i^n)^2\,\Delta x + \sum_j \tfrac{1}{2\mu_0}(B_j^{n+1/2})^2\,\Delta x\), und einmal mit einem kleinen, gleich zu rechtfertigenden Kniff. Erfolgskriterium: konstant — aber wie konstant?

# von oben: np, plt, N, DX, DT, X, epsilon_0, mu_0, C
E = np.exp(-((X - 3.0) / 0.3)**2)
B = np.zeros(N - 1)
U_naiv, U_versetzt = [], []
for n in range(4000):
    B += (DT / DX) * np.diff(E)
    E_alt = E.copy()
    E[1:-1] += (C**2 * DT / DX) * np.diff(B)    # PEC: Ränder bleiben 0
    u_b = 0.5 / mu_0 * np.sum(B**2) * DX
    U_naiv.append(0.5 * epsilon_0 * np.sum(E**2) * DX + u_b)
    U_versetzt.append(0.5 * epsilon_0 * np.sum(E_alt * E) * DX + u_b)
U_naiv, U_versetzt = np.array(U_naiv), np.array(U_versetzt)

fig, achse = plt.subplots(figsize=(7, 3.6))
t_ns = np.arange(4000) * DT * 1e9
achse.plot(t_ns, U_naiv / U_naiv.mean(), "C0", lw=0.7,
           label="naiv: $\\Sigma\\,(E^n)^2$")
achse.plot(t_ns, U_versetzt / U_versetzt.mean(), "k", lw=1.4,
           label="versetzt: $\\Sigma\\,E^n E^{n+1}$")
achse.set(xlabel="Zeit (ns)", ylabel="U / Mittelwert",
          title="Energie im geschlossenen Kasten: zwei Buchungsarten")
achse.legend(fontsize=9)
fig.tight_layout()
plt.show()
print(f"naiv:     relative Schwankung "
      f"{(U_naiv.max() - U_naiv.min()) / U_naiv.mean():.2e}")
print(f"versetzt: relative Schwankung "
      f"{(U_versetzt.max() - U_versetzt.min()) / U_versetzt.mean():.2e}")
Abbildung 18.2: Gesamtenergie im geschlossenen, verlustfreien 1D-Kasten über 4000 Schritte. Die naive Summe (blau) zittert um etwa zwei Prozent — am stärksten immer dann, wenn der Puls gerade an einer Wand reflektiert. Die Yee-versetzte Energie (schwarz), bei der der E-Topf als Produkt aufeinanderfolgender Zeitschritte En·E(n+1) gebucht wird, ist konstant auf zwölf Stellen: Die diskrete Buchhaltung schließt exakt — man muss nur zeitversetzt buchen, wie das Gitter selbst.
naiv:     relative Schwankung 2.02e-02
versetzt: relative Schwankung 8.96e-13

Die naive Summe schwankt um zwei Prozent — kein Programmierfehler, sondern der Yee-Versatz (Kapitel 5), der hier zum dritten Mal zuschlägt: \(E^n\) und \(B^{n+1/2}\) leben einen halben Zeitschritt auseinander, ihre Quadrate gehören gar nicht zum selben Moment. Das Produkt \(E^n E^{n+1}\) dagegen sitzt zeitlich genau bei \(n+\tfrac{1}{2}\) — beim B-Feld — und mit dieser Buchung ist \(U\) konstant auf zwölf Stellen, Maschinengenauigkeit. (Meep wertete aus demselben Grund die Quelle am Halbschritt aus, Kapitel 11; wer auf dem Yee-Gitter Energie bilanzieren will, muss yee-konform buchen.)

Jetzt die volle Bilanz mit allen drei Termen. Frage: Gilt \(\Delta U/\Delta t = \text{Fluss durch den Rand} - \text{Wärmeleistung}\) Schritt für Schritt? Bühne: offenes Gitter (Mur-Ränder), der Puls startet links, läuft durch ein Kontrollvolumen \([5\,\text{m}, 9\,\text{m}]\), in dem von \(x = 6\) bis \(8\) m eine Verlustzone liegt (\(\sigma = 0{,}02\) S/m, das Kapitel-6-Rezept). Gemessen wird in jedem Schritt: \(\Delta U/\Delta t\) im Volumen (versetzt gebucht), der Poynting-Fluss \(S = EB/\mu_0\) an den beiden Rändern des Volumens (an den B-Halbpunkten, zeitlich gemittelt — yee-konform) und die Wärmeleistung \(\sum \sigma\,E^nE^{n+1}\,\Delta x\). Erfolgskriterium: Der Rest (Summe aller drei) ist klein gegen jeden Einzelterm.

# von oben: np, N, DX, DT, X, epsilon_0, mu_0, C
def kontrollbox(DX_, schritte, sig_wert):
    """Bilanz dU/dt = Fluss − P_Wärme über das Volumen [5 m, 9 m]."""
    N_ = int(12.0 / DX_) + 1
    DT_ = DX_ / C
    X_ = np.arange(N_) * DX_
    E = np.exp(-((X_ - 3.0) / 0.3)**2)
    B = np.zeros(N_ - 1)
    sigma = np.zeros(N_)
    sigma[(X_ > 6.0) & (X_ < 8.0)] = sig_wert
    s2 = sigma * DT_ / (2 * epsilon_0)
    ca = (1 - s2) / (1 + s2)                 # Verlust-Update (Kapitel 6)
    cb = (C**2 * DT_ / DX_) / (1 + s2)
    A, Bx = int(5.0 / DX_), int(9.0 / DX_)
    reste, terme = [], []
    U_alt = None
    for n in range(schritte):
        B_alt = B.copy()
        B += (DT_ / DX_) * np.diff(E)
        E_alt = E.copy()
        E[1:-1] = ca[1:-1] * E[1:-1] + cb[1:-1] * np.diff(B)
        E[0], E[-1] = E_alt[1], E_alt[-2]
        U = (0.5 * epsilon_0 * np.sum(E_alt[A:Bx + 1] * E[A:Bx + 1]) * DX_
             + 0.5 / mu_0 * np.sum(B[A:Bx]**2) * DX_)
        fluss = (0.5 / mu_0) * (E_alt[Bx] * (B_alt[Bx] + B[Bx])
                                - E_alt[A] * (B_alt[A - 1] + B[A - 1]))
        p_ohm = np.sum(sigma[A:Bx + 1] * E_alt[A:Bx + 1]
                       * E[A:Bx + 1]) * DX_
        if U_alt is not None:
            reste.append(abs((U - U_alt) / DT_ - fluss + p_ohm))
            terme.append(max(abs((U - U_alt) / DT_), abs(fluss),
                             abs(p_ohm), 1e-30))
        U_alt = U
    return max(reste) / max(terme)

print(f"Vakuum-Volumen:  relativer Bilanzrest = "
      f"{kontrollbox(0.01, 3000, 0.0):.1e}")
print(f"mit σ-Zone:      relativer Bilanzrest = "
      f"{kontrollbox(0.01, 3000, 0.02):.1e}")
print(f"mit σ-Zone, Δx/2: relativer Bilanzrest = "
      f"{kontrollbox(0.005, 6000, 0.02):.1e}")
Vakuum-Volumen:  relativer Bilanzrest = 6.0e-13
mit σ-Zone:      relativer Bilanzrest = 9.1e-03
mit σ-Zone, Δx/2: relativer Bilanzrest = 4.6e-03

Im Vakuum schließt die Bilanz auf \(10^{-13}\) — der diskrete Poynting-Satz ist auf dem Yee-Gitter keine Näherung, sondern eine Identität, wenn man Fluss und Energie konsistent versetzt bucht. Mit der \(\sigma\)-Zone bleibt ein Rest von einem knappen Prozent, und die Gegenprobe entlarvt ihn als Diskretisierung: Halbiertes \(\Delta x\) halbiert den Rest. Die Physik dahinter ist dieselbe wie immer — die Buchhaltung selbst hat keine Löcher.

TippMerkkasten: die Energie-Buchhaltung
  • \(u_E = \tfrac{\varepsilon_0}{2}E^2\), \(u_B = \tfrac{1}{2\mu_0}B^2\); laufende Welle: beide Töpfe exakt gleich, stehende Welle: Pendel.
  • \(\partial_t u + \nabla\cdot\vec{S} = -\vec{J}\cdot\vec{E}\) mit \(\vec{S} = \vec{E}\times\vec{H}\): Energie fließt (\(\vec S\)) oder wird verarbeitet (\(\vec J\cdot\vec E\)) — nichts verschwindet.
  • \(\vec{S}\) ist eine Stromdichte (W/m²); Leistung in Watt wird daraus durch Flächenintegrale — genau das tun Flussmonitore.

18.3 Die Landkarte: wo die Leistung wirklich läuft

Jetzt zum Lichtschalter. Wir bauen das einfachste Modell eines Stromkabels, das unsere 2D-Welt hergibt: zwei parallele Metallplatten („Hin- und Rückleiter”) mit einem Spalt dazwischen, gespeist von einer Wechselquelle — eine Parallelplatten-Leitung. Vorher das Kästchen, denn hier wohnt eine der hartnäckigsten Fehlvorstellungen der Elektrotechnik:

WarnungNaheliegende Vermutung

„Die Energie fließt im Draht wie Wasser im Rohr — der Strom trägt sie, die Elektronen bringen sie mit.”

Warum sie naheliegt: Wir sagen „Strom fließt”, wir rechnen \(P = U \cdot I\) mit Größen des Drahtes, und ohne Draht geht die Lampe nun mal nicht.

Was stattdessen stimmt: Die Elektronen driften Millimeter pro Sekunde — als Energie-Boten unbrauchbar (die Rechnung folgt). Die Energie reist im Feld zwischen und neben den Leitern, mit nahezu Lichtgeschwindigkeit; der Draht führt das Feld, wie eine Schiene den Zug führt, ohne selbst zu fahren. Die \(\vec{S}\)-Karte, die wir gleich messen, zeigt es schwarz auf weiß: Im Spalt strömt die volle Leistung, im (idealen) Metall exakt nichts — und bei einem realen Leiter kippt nur ein kleiner Pfeil-Anteil seitlich ins Metall hinein: Das ist genau die Verlustleistung \(\vec J \cdot \vec E\), die den Draht warm macht. Der Draht bekommt von der Energie nur das, was er verheizt.

Das Experiment. Frage: Wo läuft die Leistung — und kommt sie vollständig an? Bühne: eine \(34 \times 6\)-Zelle, zwei Platten der Dicke \(0{,}4\) im Abstand \(1{,}0\) (erst ideales Metall mp.metal, dann echtes), PML ringsum. Die Welle braucht ein E-Feld quer zwischen den Platten — das ist die \(H_z\)-Polarisation aus Kapitel 13 (für \(E_z\) wären die Platten ein Rohr unter Cutoff, Kapitel 17!); so geführt läuft zwischen den Platten eine kabeltypische TEM-Welle ohne Grenzfrequenz. Anregung: eine \(H_z\)-Quelllinie im Spalt bei \(x = -12\), Dauerton \(f = 0{,}5\). Gemessen wird das Periodenmittel von \(\vec{S} = (E_y H_z,\, -E_x H_z)\) und \(u\) auf dem ganzen Gitter (zehn Schnappschüsse über eine Periode — das Kapitel-14-Rezept); außerdem, in einem zweiten Lauf mit schmalbandigem Puls, der Fluss durch fünf Querschnitte (Kapitel-12-Methode). Erfolgskriterium: \(P\) an allen Schnitten gleich; außerhalb der Platten nichts; \(v_E = \langle S\rangle/\langle u\rangle = c\) (TEM-Welle im Vakuum-Spalt).

# von oben: np, plt
import os
os.environ["HWLOC_HIDE_ERRORS"] = "2"   # vor dem Meep-Import (Kapitel 11)
import meep as mp

mp.verbosity(0)                          # Fortschrittsmeldungen stumm

F0 = 0.5
SPALT, DICKE = 1.0, 0.4

def leitung_aufbau(material, quelltyp, aufloesung=24):
    geom = [mp.Block(size=mp.Vector3(mp.inf, DICKE, mp.inf),
                     center=mp.Vector3(0, s * (SPALT + DICKE) / 2),
                     material=material) for s in (+1, -1)]
    quelle = [mp.Source(quelltyp, component=mp.Hz,
                        center=mp.Vector3(-12, 0),
                        size=mp.Vector3(0, SPALT))]
    return mp.Simulation(cell_size=mp.Vector3(34, 6),
                         resolution=aufloesung, sources=quelle,
                         geometry=geom,
                         boundary_layers=[mp.PML(2.0)])

def periodenmittel(sim, dauer=120):
    """Einschwingen, dann ⟨Sx⟩, ⟨Sy⟩, ⟨u⟩ über eine Periode mitteln."""
    sim.run(until=dauer)
    sx = sy = u = None
    for k in range(10):
        sim.run(until=(1 / F0) / 10)
        ex = sim.get_array(component=mp.Ex).T
        ey = sim.get_array(component=mp.Ey).T
        hz = sim.get_array(component=mp.Hz).T
        sxk, syk = ey * hz, -ex * hz     # S = E × H in der Hz-Welt
        uk = 0.5 * (ex**2 + ey**2 + hz**2)
        sx = sxk if sx is None else sx + sxk
        sy = syk if sy is None else sy + syk
        u = uk if u is None else u + uk
    return sx / 10, sy / 10, u / 10

karten = {}
for name, material in (("PEC", mp.metal),
                       ("verlustbehaftet",
                        mp.Medium(D_conductivity=50.0))):
    sim = leitung_aufbau(material,
                         mp.ContinuousSource(F0, is_integrated=True))
    karten[name] = periodenmittel(sim)

ny, nx = karten["PEC"][0].shape
ys = np.linspace(-3, 3, ny)
xs = np.linspace(-17, 17, nx)

fig, achsen = plt.subplots(2, 1, figsize=(8, 5.2), sharex=True)
for achse, name in zip(achsen, ("PEC", "verlustbehaftet")):
    sx, sy, u = karten[name]
    betrag = np.hypot(sx, sy)
    achse.imshow(betrag, origin="lower", cmap="magma",
                 extent=[-17, 17, -3, 3], aspect="auto",
                 vmax=0.7 * betrag.max())
    # Pfeile nur, wo wirklich etwas fließt (sonst Punktrauschen),
    # und schwarz — auf dem hellen Spalt gut sichtbar
    schwach = betrag < 0.02 * betrag.max()
    sx_p = np.where(schwach, np.nan, sx)
    sy_p = np.where(schwach, np.nan, sy)
    s = 5                                # jeder 5. Punkt: Pfeilgitter
    achse.quiver(xs[::s], ys[::s], sx_p[::s, ::s], sy_p[::s, ::s],
                 color="k", scale=betrag.max() * 22, width=0.0035)
    for vz in (+1, -1):
        achse.axhline(vz * SPALT / 2, color="w", lw=0.6)
        achse.axhline(vz * (SPALT / 2 + DICKE), color="w", lw=0.6)
    achse.set(xlim=(-11.5, 2), ylim=(-1.45, 1.45), ylabel="y",
              title=f"Platten: {name}")
achsen[1].set_xlabel("x")
fig.tight_layout()
plt.show()

sx, sy, u = karten["PEC"]
spalt_m = np.abs(ys) < 0.5
zone = np.abs(xs) < 6
# np.ix_: spannt aus zwei 1D-Masken das Rechteck-Gitter auf, so dass
# arr[np.ix_(zeilen, spalten)] den Block "Zeilen x Spalten" ausschneidet
v_E = sx[np.ix_(spalt_m, zone)].mean() / u[np.ix_(spalt_m, zone)].mean()
schirm = (np.hypot(sx, sy)[np.abs(ys) > 1.0, :].max()
          / np.hypot(sx, sy)[np.ix_(spalt_m, zone)].max())
sx_v, sy_v, _ = karten["verlustbehaftet"]
j_rand = np.argmin(np.abs(ys - 0.48))
kipp = np.rad2deg(np.arctan2(sy_v[j_rand, zone].mean(),
                             sx_v[j_rand, zone].mean()))
print(f"PEC: v_E im Spalt = {v_E:.4f} c;  |S| außen/innen = {schirm:.0e}")
print(f"Verlustplatten: Kippwinkel an der Plattenkante = {kipp:+.1f}°")
Using MPI version 4.1, 1 processes
Abbildung 18.3: Die ⟨S⟩-Karte der Parallelplatten-Leitung (Lesehilfe: Farbe = Betrag der Energiestromdichte, Pfeile = ihre Richtung und Stärke; die weißen Linien sind die Plattenkanten, die Quelle sitzt links außerhalb des Ausschnitts). Oben ideales Metall: Die gesamte Leistung strömt im Spalt nach rechts — in den Platten und hinter ihnen ist exakt nichts (gemessen < 10⁻¹⁰⁰ des Spaltwerts). Unten Platten aus verlustbehaftetem Material: Die Strömung wird nach rechts hin schwächer (das Kabel „verliert“), und an den Plattenkanten kippen die Pfeile um etwa 9° INS Metall — dieser hineingekippte Anteil ist die Verlustleistung, die das Blech heizt.
PEC: v_E im Spalt = 0.9995 c;  |S| außen/innen = 7e-277
Verlustplatten: Kippwinkel an der Plattenkante = +9.1°

Die Karte spricht für sich: Im PEC-Fall läuft alles im Spalt (außen steht eine Null mit über hundert führenden Nullen — das ideale Kabel schirmt perfekt), und die Energie reist dort mit \(v_E = c\). Der Draht trägt nichts; er lenkt. Die Puls-Gegenprobe mit fünf Flussmonitoren bestätigt die verlustfreie Lieferung:

# von oben: leitung_aufbau(), mp, np, F0, SPALT, DICKE
sim = leitung_aufbau(mp.metal, mp.GaussianSource(F0, fwidth=F0 / 8))
schnitte = [sim.add_flux(F0, F0 / 8, 1, mp.FluxRegion(
    center=mp.Vector3(x, 0), size=mp.Vector3(0, SPALT + 2 * DICKE),
    direction=mp.X)) for x in (-8, -4, 0, 4, 8)]
sim.run(until_after_sources=60)
P = np.array([mp.get_fluxes(s)[0] for s in schnitte])
print("P an den Schnitten x = -8, -4, 0, 4, 8 (ideale Platten):")
print(f"  {P.round(4)}   →  max. Abweichung "
      f"{np.abs(P / P[0] - 1).max():.1e}")
P an den Schnitten x = -8, -4, 0, 4, 8 (ideale Platten):
  [15.6292 15.6292 15.6292 15.6292 15.6292]   →  max. Abweichung 1.2e-06

Im unteren Kartenpanel — Platten aus schlechtem Metall — wird das Kabel ehrlich: Die Strömung verarmt nach rechts, und an den Plattenkanten kippen die Pfeile messbar (9°) ins Blech. Dort gilt jetzt das dritte Glied der Buchhaltung: Was hineinkippt, wird zu \(\vec J\cdot\vec E\), zu Wärme. Das prüfen wir quantitativ nach — mit einer Eichung vorweg, ganz im Kapitel-15-Stil: Im homogen verlustigen Streifen (wo die Bilanz trivial stimmen muss) vergleichen wir die Flussmonitor-Leistung mit dem Volumenintegral \(\sigma\sum|\hat E|^2/2\) aus den DFT-Feldern (Kapitel 15) und finden den Normierungsfaktor von Meeps DFT-Konvention:

# von oben: mp, np, F0, leitung_aufbau(), SPALT, DICKE
def eichlauf():
    """Homogen verlustiger Streifen: (P1−P2) / (σ·Σ|Ê|²/2) = ?"""
    sim = mp.Simulation(
        cell_size=mp.Vector3(48, 2), resolution=20,
        sources=[mp.Source(mp.GaussianSource(F0, fwidth=F0 / 8),
                           component=mp.Hz, center=mp.Vector3(-18, 0),
                           size=mp.Vector3(0, 2))],
        default_material=mp.Medium(D_conductivity=0.1),
        boundary_layers=[mp.PML(3.0, direction=mp.X)],
        k_point=mp.Vector3())
    quer = [sim.add_flux(F0, F0 / 8, 1, mp.FluxRegion(
        center=mp.Vector3(x, 0), size=mp.Vector3(0, 2),
        direction=mp.X)) for x in (-5.0, 5.0)]
    dft = sim.add_dft_fields([mp.Ex, mp.Ey], F0, 0, 1,
                             center=mp.Vector3(0, 0),
                             size=mp.Vector3(10, 2))
    sim.run(until_after_sources=120)
    P1, P2 = (mp.get_fluxes(q)[0] for q in quer)
    e2 = sum(np.abs(sim.get_dft_array(dft, f, 0))**2
             for f in (mp.Ex, mp.Ey))
    nx_, ny_ = e2.shape
    return (P1 - P2) / (0.1 * 0.5 * e2.sum() * (10 / nx_) * (2 / ny_))

faktor = eichlauf()
print(f"Eichfaktor = {faktor:.4f}  →  Joule-Integral = σ·Σ|Ê|² "
      f"(Meeps Flüsse tragen den Faktor ½ nicht)")

def leitungsbilanz(aufloesung, sd=20.0):
    """P(x₁) − P(x₂) gegen ∫J·E in den Platten dazwischen."""
    sim = leitung_aufbau(mp.Medium(D_conductivity=sd),
                         mp.GaussianSource(F0, fwidth=F0 / 8),
                         aufloesung)
    X1, X2 = -10.0, -6.0
    quer = [sim.add_flux(F0, F0 / 8, 1, mp.FluxRegion(
        center=mp.Vector3(x, 0), size=mp.Vector3(0, 5.5),
        direction=mp.X)) for x in (X1, X2)]
    H = SPALT + 2 * DICKE
    dft = sim.add_dft_fields([mp.Ex, mp.Ey], F0, 0, 1,
                             center=mp.Vector3((X1 + X2) / 2, 0),
                             size=mp.Vector3(X2 - X1, H))
    sim.run(until_after_sources=80)
    P1, P2 = (mp.get_fluxes(q)[0] for q in quer)
    e2 = sum(np.abs(sim.get_dft_array(dft, f, 0))**2
             for f in (mp.Ex, mp.Ey))
    nx_, ny_ = e2.shape
    ys_ = np.linspace(-H / 2, H / 2, ny_)
    platte = np.abs(ys_) > SPALT / 2
    joule = sd * e2[:, platte].sum() * ((X2 - X1) / nx_) * (H / ny_)
    return P1 - P2, joule

for aufl in (24, 48):
    diff, joule = leitungsbilanz(aufl)
    print(f"Auflösung {aufl}: P(x₁)−P(x₂) = {diff:.3f},  "
          f"∫J·E in den Platten = {joule:.3f}  "
          f"(Fehler {abs(diff - joule) / diff * 100:.0f} %)")
Eichfaktor = 2.0092  →  Joule-Integral = σ·Σ|Ê|² (Meeps Flüsse tragen den Faktor ½ nicht)
Auflösung 24: P(x₁)−P(x₂) = 3.676,  ∫J·E in den Platten = 2.804  (Fehler 24 %)
Auflösung 48: P(x₁)−P(x₂) = 3.452,  ∫J·E in den Platten = 3.291  (Fehler 5 %)

Bei Auflösung 48 schließt auch diese Bilanz auf wenige Prozent — die fehlende Leistung der Leitung steckt nachweislich als Wärme im Blech. Dass die Auflösung 24 noch 24 % danebenliegt, ist selbst eine Lektion: Die Verluste spielen sich in einer dünnen Skin-Schicht unter der Metalloberfläche ab (hier ~0,2 Einheiten tief), und wer sie bilanzieren will, muss sie auflösen. Unser „schlechtes Metall” (\(\sigma_D = 20\) statt Kupfer-Astronomie) ist übrigens Absicht: Bei echtem Kupfer wäre die Skin-Schicht so dünn und der Verlust so winzig, dass im kleinen Laborgebiet schlicht nichts zu sehen wäre — die Physik ist dieselbe, nur der Maßstab nicht.

Bleibt die Drift-Rechnung, die das Kästchen versprochen hat. In Kupfer stehen \(n \approx 8{,}5 \cdot 10^{28}\) Leitungselektronen pro Kubikmeter bereit. Der Strom ist \(I = n\,q\,A\,v_d\) — Ladungsdichte mal Querschnitt mal Tempo. Auflösen nach \(v_d\) für \(I = 10\) A durch \(A = 1{,}5\) mm²:

\[v_d = \frac{I}{n\,q\,A} = \frac{10}{8{,}5 \cdot 10^{28} \cdot 1{,}6 \cdot 10^{-19} \cdot 1{,}5 \cdot 10^{-6}} \approx 0{,}5\ \frac{\text{mm}}{\text{s}}.\]

Ein halber Millimeter pro Sekunde — und bei 50-Hz-Wechselstrom pendeln die Elektronen damit nur etwa zwei Mikrometer hin und her, ein Vierzigstel Haardurchmesser (Ü 18.2 rechnet beides nach). Die Lampe geht trotzdem „sofort” an, weil das Feld im Spalt zwischen den Leitern mit nahezu \(c\) anrückt — unsere Karte hat es gemessen — und überall im Stromkreis gleichzeitig die dort wartenden Elektronen anschiebt. Die Elektronen sind nicht die Boten der Energie; sie sind das Medium, an dem das Feld vor Ort angreift. Dasselbe Bild gilt vom Koaxialkabel (die Leistung fließt im Isolator zwischen Innen- und Außenleiter — im Querschnitt ein leuchtender Ring, im Kupfer null) bis zur Hochspannungstrasse: Der Energiestrom eines Stromnetzes läuft durch die Luft zwischen den Seilen. Der Unterschied zur Glasfaser (Kapitel 17) ist nur der Führungsmechanismus — Randbedingung am Metall hier, Totalreflexion dort; die Energie wohnt in beiden Fällen im Feld.

18.4 Wie schnell reist Energie?

Kapitel 16 und 17 haben behauptet, Energie reise mit \(v_g\) — gemessen wurde aber stets das Tempo von Paketen (Energie-Schwerpunkten). Mit \(\vec{S}\) und \(u\) lässt sich der Satz endlich direkt prüfen, denn der Quotient

\[v_E \;=\; \frac{\langle S\rangle}{\langle u\rangle}\]

ist wörtlich „transportierte Leistung pro vorrätiger Energie” — eine Geschwindigkeit, die keinerlei Paket braucht; ein Dauerton genügt. In der TEM-Leitung eben kam \(v_E = 0{,}999\,c\) heraus. Die spannende Bühne ist aber das Rohr aus Kapitel 17 mit seinen zwei Tempi (\(v_g = 0{,}553\,c\), \(v_p = 1{,}81\,c\) bei \(f = 1{,}2\,f_c\)): Welchem folgt die Energie? Bühne: dieselbe \(120 \times 1\)-Zelle wie dort (Zellrand = Rohrwand), Dauerton \(f = 0{,}6\), eingeschwungen; gemessen wird das Periodenmittel von \(S_x = -E_z H_y\) und \(u\) über das mittlere Rohrdrittel. Erfolgskriterium: \(v_E\) trifft eine der beiden Kapitel-17-Zahlen — die Theorie sagt, welche:

# von oben: mp, np
sim = mp.Simulation(
    cell_size=mp.Vector3(120, 1.0), resolution=20,
    sources=[mp.Source(mp.ContinuousSource(0.6, is_integrated=True),
                       component=mp.Ez, center=mp.Vector3(-45, 0),
                       size=mp.Vector3(0, 1.0))],
    boundary_layers=[mp.PML(3.0, direction=mp.X)])
sim.run(until=400)
sx = u = None
for k in range(10):
    sim.run(until=(1 / 0.6) / 10)
    ez = sim.get_array(component=mp.Ez).T
    hx = sim.get_array(component=mp.Hx).T
    hy = sim.get_array(component=mp.Hy).T
    sxk = -ez * hy                       # S_x = −E_z·H_y (Ez-Welt)
    uk = 0.5 * (ez**2 + hx**2 + hy**2)
    sx = sxk if sx is None else sx + sxk
    u = uk if u is None else u + uk
xs_r = np.linspace(-60, 60, sx.shape[1])
zone_r = np.abs(xs_r) < 25
v_E_rohr = sx[:, zone_r].mean() / u[:, zone_r].mean()
vg = np.sqrt(1 - (0.5 / 0.6)**2)
print(f"v_E = {v_E_rohr:.4f} c   —   v_g = {vg:.4f} c,  "
      f"v_p = {1/vg:.4f} c")
v_E = 0.5518 c   —   v_g = 0.5528 c,  v_p = 1.8091 c

\(v_E = v_g\), auf zwei Promille — und meilenweit von \(v_p\) entfernt. Die Behauptung aus zwei Kapiteln ist damit keine Paket-Anekdote mehr, sondern eine Eigenschaft des eingeschwungenen Feldes selbst: Auch im Dauerbetrieb, ganz ohne Einhüllende, transportiert das Rohr seine Energie mit der Gruppengeschwindigkeit. (Anschaulich: Die Welle läuft im Zickzack zwischen den Wänden; \(u\) ist überall, aber nur die Längskomponente von \(\vec S\) kommt voran.) Wo \(v_p > c\) war, ist \(v_E\) brav unter \(c\) geblieben — die Energie hält sich an die Regeln, die Berge durften nur so tun.

18.5 Das Kapitel-Programm

Das Programm kap18_poynting.py (im Buchpaket unter programme/kap18/) bündelt alles: Töpfe, naive vs. versetzte Buchhaltung, Kontrollvolumen-Bilanz samt Konvergenz, Leitungs-Karten und -Flüsse, Joule-Bilanz mit Eichung, \(v_E\) im Rohr und die Ringwellen-Bilanz aus Ü 18.3. Jede Behauptung steht als assert; der Lauf braucht etwa eine Minute und endet mit „Alle Tests bestanden.”

TippMerkkasten
  • Die Energie reist im Feld, nicht im Draht. Der Leiter führt; was er von der Leistung abbekommt, ist genau sein Verlust (\(\vec J\cdot\vec E\) — die Pfeile, die ins Metall kippen).
  • Elektronen driften (~mm/s) — die Lampe geht an, weil das Feld mit ~\(c\) kommt und überall zugleich anschiebt.
  • Auf dem Yee-Gitter ist der Poynting-Satz eine exakte Identität — wenn man zeitversetzt bucht (\(E^nE^{n+1}\)).
  • \(v_E = \langle S\rangle/\langle u\rangle = v_g\) — gemessen in Leitung (\(= c\)) und Rohr (\(= 0{,}55\,c\)). Energie folgt der Gruppe, nie den Bergen.

Roter Faden

Rückwärts: Das Kreuzprodukt aus Kapitel 1 ist mit \(\vec S = \vec E \times \vec H\) endgültig Physik geworden, die Lenz-Bilanz aus Kapitel 3 eine Identität auf dreizehn Stellen, die Kapitel-4-Zahlen (868 V/m Sonnenlicht) haben ihre Energierechnung bekommen, das σ aus Kapitel 6 seine Wärmeleistung, der Yee-Versatz aus Kapitel 5 seinen dritten Auftritt (diesmal in der Energie selbst), und die Rohre/Streifen aus Kapitel 16/17 lieferten die Bühnen für \(v_E = v_g\). Vorwärts: Kapitel 19 lässt die Energie im Schwingkreis pendeln (das stehende-Welle-Pendel als Bauteil), Kapitel 20 fragt nach der Richtung der Zeit in dieser Buchhaltung, Kapitel 21 misst, wie eine Antenne ihre Leistung ins Fernfeld drückt (mit genau diesen Flussmonitoren), Kapitel 22 bringt \(P = U \cdot I\) und die Feldsicht zusammen (Leitungen, 50 Ω), und Kapitel 25 beantwortet mit \(\vec S\) die Steckdosenfrage, warum 50 Hz nicht funkt.

Übungen

Ü 18.1 (Verstehen). Sonnenlicht, komplett durchgerechnet: Aus \(I = 1000\) W/m² folgen \(E_0\), \(B_0\), \(\langle u_E\rangle\) und \(\langle u_B\rangle\) (Zeitmittel!). Zeige außerdem: Der Strahlungsdruck auf eine absorbierende Fläche ist \(p = I/c\) (Tipp aus dem Kleingedruckten: \(\vec S/c^2\) ist Impulsdichte — Impuls pro Zeit und Fläche ist Druck). Wie viel ist das in Pascal — und warum spürt man die Sonne als Wärme, aber nicht als Schub?

# von oben: np, epsilon_0, mu_0, C
I = 1000.0
E0 = np.sqrt(2 * mu_0 * C * I)           # aus I = E0²/(2 μ0 c)
B0 = E0 / C
print(f"E0 = {E0:.0f} V/m,  B0 = {B0*1e6:.2f} µT")
print(f"<u_E> = {epsilon_0 * E0**2 / 4 * 1e6:.2f} µJ/m³,  "
      f"<u_B> = {B0**2 / (4 * mu_0) * 1e6:.2f} µJ/m³")
print(f"Strahlungsdruck p = I/c = {I / C * 1e6:.1f} µPa")
E0 = 868 V/m,  B0 = 2.90 µT
<u_E> = 1.67 µJ/m³,  <u_B> = 1.67 µJ/m³
Strahlungsdruck p = I/c = 3.3 µPa

Die Zeitmittel tragen den Faktor \(\tfrac12\) aus \(\langle\cos^2\rangle\) (Kapitel 10): \(\langle u_E\rangle = \varepsilon_0 E_0^2/4 = 1{,}7\) µJ/m³, exakt gleich \(\langle u_B\rangle\). Der Strahlungsdruck \(p = I/c \approx 3{,}3\) µPa ist dreißig Milliarden Mal kleiner als der Luftdruck — die Energie kommt mit voller Kraft (1 kW auf den Quadratmeter Haut!), der Impuls aber durch \(c\) geteilt: Licht trägt viel Energie pro Schwung. Messbar ist der Schub trotzdem, wo nichts stört und Fläche riesig wird: Kometenschweife zeigen von der Sonne weg, und Sonnensegel (IKAROS, 2010) fliegen tatsächlich damit.

Ü 18.2 (Verstehen). Rechne die Driftgeschwindigkeit für deine eigene Zimmerbeleuchtung nach (sagen wir 60 W an 230 V durch 1,5-mm²-Kupfer) und die Zitterweite bei 50 Hz. Formuliere dann in zwei Sätzen, warum die Lampe „sofort” angeht.

# von oben: np
n_e, q, A = 8.5e28, 1.6e-19, 1.5e-6
I = 60 / 230                             # 0,26 A
v_d = I / (n_e * q * A)
print(f"I = {I:.2f} A  →  v_d = {v_d*1e6:.1f} µm/s")
omega = 2 * np.pi * 50
print(f"Zitterweite bei 50 Hz: ±{v_d*np.sqrt(2)/omega*1e9:.0f} nm")
I = 0.26 A  →  v_d = 12.8 µm/s
Zitterweite bei 50 Hz: ±58 nm

Knapp 13 µm/s Drift — und im Wechselstrom pendeln die Elektronen um ganze ±60 Nanometer, weniger als eine Lichtwellenlänge. Warum die Lampe sofort angeht: Beim Schalterschluss breitet sich das Feld zwischen den Leitern mit nahezu Lichtgeschwindigkeit aus und schiebt überall im Stromkreis gleichzeitig die dort bereits wartenden Elektronen an. Die Energie kommt aus dem Feld neben dem Draht — die Elektronen vor Ort müssen sie nur noch in der Lampe abliefern.

Ü 18.3 (Verändern). Die Ringwelle aus Kapitel 9, jetzt als Leistungsbilanz: Miss in einem 2D-Lauf mit Dauerton-Punktquelle das Periodenmittel von \(\vec S\) und bilde das Kreisintegral \(P(r) = \oint \langle S_r\rangle\, \mathrm{d}s\) für mehrere Radien. Was muss herauskommen — und was heißt das für die \(1/\sqrt{r}\)-Amplitude von damals?

# von oben: mp, np
sim = mp.Simulation(cell_size=mp.Vector3(20, 20), resolution=20,
                    sources=[mp.Source(mp.ContinuousSource(1.0),
                                       component=mp.Ez,
                                       center=mp.Vector3())],
                    boundary_layers=[mp.PML(1.5)])
sim.run(until=60)
sx = sy = None
for k in range(10):
    sim.run(until=0.1)
    ez = sim.get_array(component=mp.Ez).T
    hx = sim.get_array(component=mp.Hx).T
    hy = sim.get_array(component=mp.Hy).T
    sxk, syk = -ez * hy, ez * hx
    sx = sxk if sx is None else sx + sxk
    sy = syk if sy is None else sy + syk
sx, sy = sx / 10, sy / 10
xs = np.linspace(-10, 10, sx.shape[1])
ys = np.linspace(-10, 10, sx.shape[0])
for r in (3.0, 5.0, 7.0):
    phis = np.linspace(0, 2 * np.pi, 361)[:-1]
    s_r = []
    for ph in phis:
        i = np.argmin(np.abs(xs - r * np.cos(ph)))
        j = np.argmin(np.abs(ys - r * np.sin(ph)))
        s_r.append(sx[j, i] * np.cos(ph) + sy[j, i] * np.sin(ph))
    print(f"r = {r}:  P = 2πr·⟨S_r⟩ = {np.mean(s_r)*2*np.pi*r:.4f}")
r = 3.0:  P = 2πr·⟨S_r⟩ = 0.7143
r = 5.0:  P = 2πr·⟨S_r⟩ = 0.7180
r = 7.0:  P = 2πr·⟨S_r⟩ = 0.7158

\(P(r)\) ist konstant (hier auf ein halbes Prozent): Was die Quelle abgibt, muss durch jeden Kreis vollständig hindurch — Energieerhaltung als Messwert. Genau daraus folgt rückwärts die Amplitudenregel aus Kapitel 9: \(\langle S_r\rangle \propto E^2\) muss wie \(1/(2\pi r)\) fallen, also \(E \propto 1/\sqrt{r}\). Die „geometrische Verdünnung” von damals war nie etwas anderes als diese Bilanz.

Ü 18.4 (Übertragen). Die statische Kuriosität aus dem Kleingedruckten, selbst kartiert: Lege das 2D-Feld einer Punktladung (\(\vec E\) radial, \(\propto 1/r\)) über ein homogenes \(H_z\)-Feld und berechne \(\vec S = (E_y H_z, -E_x H_z)\) als NumPy-Karte. Was zeigt die Karte — und was sagt \(\nabla \cdot \vec S\) (mit np.gradient, Kapitel 2) dazu?

# von oben: np, plt
xg, yg = np.meshgrid(np.linspace(-2, 2, 200),
                     np.linspace(-2, 2, 200))
r2 = xg**2 + yg**2 + 0.05**2
Ex, Ey = xg / r2, yg / r2                # Punktladung (2D): E ∝ r̂/r
Hz = 1.0                                 # homogenes Magnetfeld
Sx, Sy = Ey * Hz, -Ex * Hz
div_S = (np.gradient(Sx, axis=1) / (xg[0, 1] - xg[0, 0])
         + np.gradient(Sy, axis=0) / (yg[1, 0] - yg[0, 0]))

fig, achse = plt.subplots(figsize=(5.5, 4.6))
betrag = np.hypot(Sx, Sy)
# np.percentile(a, 99): der Wert, unter dem 99 % der Daten liegen —
# robuste Farbskala, die der 1/r²-Spitze an der Ladung nicht aufsitzt
achse.imshow(betrag, origin="lower", extent=[-2, 2, -2, 2],
             cmap="magma", vmax=np.percentile(betrag, 99))
s = 12
achse.quiver(xg[::s, ::s], yg[::s, ::s], Sx[::s, ::s], Sy[::s, ::s],
             color="w", width=0.004)
achse.set(xlabel="x", ylabel="y",
          title="Statisch gekreuzte Felder: S zirkuliert")
fig.tight_layout()
plt.show()
print(f"max |∇·S| / max |S|/Δr = "
      f"{np.abs(div_S[5:-5, 5:-5]).max() / (betrag.max() / 0.02):.1e}")

max |∇·S| / max |S|/Δr = 1.1e-02

Die Pfeile (Lesehilfe: Farbe = \(|\vec S|\), Pfeile = Richtung) laufen im Kreis um die Ladung — obwohl beide Felder vollkommen statisch sind, behauptet \(\vec E \times \vec H\) einen Energiestrom. Der Widerspruch löst sich über die Buchhaltung: \(\nabla\cdot\vec S = 0\) — numerisch bleibt etwa ein Prozent der natürlichen Vergleichsskala übrig, der übliche Diskretisierungsrest zentraler Differenzen am \(1/r\)-Feld (Kapitel 2), keine echte Quelle. Die Strömung hat keine Quellen und keine Senken, nirgends sammelt sich Energie an, nirgends fehlt welche. Nur Bilanzen von \(\vec S\) sind Physik; die Stromlinien selbst darf man nicht naiver lesen, als der Poynting-Satz es deckt. (Und doch nimmt die Natur diese Zirkulation ernst: Sie trägt einen messbaren Drehimpuls — Feynmans rotierende Scheibe.)

Das Kleingedruckte

Vier Randnotizen. Erstens: Der Poynting-Satz legt \(\vec S\) nur über seine Divergenz fest — punktweise darf man zu \(\vec E \times \vec H\) beliebige quellenfreie Wirbelfelder addieren, ohne dass sich eine Bilanz ändert. \(\vec E \times \vec H\) ist die Standard-Wahl, und sie ist die physikalisch richtige: \(\vec S/c^2\) ist zugleich die Impulsdichte des Feldes (daher der Strahlungsdruck aus Ü 18.1), und nur diese Wahl ist mit der Relativitätstheorie konsistent. Zweitens: In dispersiven Medien (Kapitel 16) ist die Energiedichte nicht einfach \(\varepsilon E^2/2\) — ein Teil der Energie steckt in den mitschwingenden Elektronen, und die korrekte Formel (nach Brillouin) enthält \(\partial(\omega\varepsilon)/ \partial\omega\). Erst damit gilt auch dort \(v_E = v_g\); unsere Messungen haben das Problem umgangen, indem Leitung und Rohr im Vakuum geführt wurden. Drittens: Meeps DFT-Konvention war eine kleine Falle: Flussmonitore liefern \(\int\mathrm{Re}\, (\hat E\times\hat H^*)\) ohne den Faktor \(\tfrac12\) — wer DFT-Feldbeträge gegen Flüsse bilanziert, eicht das Verhältnis besser einmal am homogenen Fall, wie wir es getan haben (Faktor 2,01 statt 1). Viertens: Beim echten Kabel bei 50 Hz ist die Skin-Schicht im Kupfer etwa 9 mm dick, der Energiestrom im Draht selbst trotzdem winzig gegen den im Feld — und die berühmte Frage, „wie schnell die Lampe wirklich angeht”, hat 2021 als Veritasium-Video für Furore gesorgt: Die saubere Antwort ist genau unsere Karte (\(\vec S\) kommt teils auf direktem Luftweg von der Batterie zur Lampe, der volle eingeschwungene Strom folgt mit der Leitungslaufzeit — Kapitel 22).