Zwei Simulationen desselben Trägers liegen nebeneinander auf dem Bildschirm. Gleicher Stahl, gleiche fünf Knoten, derselbe Brandherd, der von rechts unten Wärme in das Ende drückt — und doch zeigen sie völlig verschiedene Temperaturen. In der einen bleibt das linke Ende am kühlen Auflager auf 20 °C, und die Temperatur steigt zum Brandherd hin gleichmäßig bis auf 420 °C an. In der anderen zieht der ganze Träger auf annähernd dieselbe hohe Temperatur hoch, obwohl derselbe Brandherd brennt. Woran liegt das? An einer einzigen Kleinigkeit am linken Ende: einmal steckt es in der kühlen Außenwand, die es auf 20 °C hält, einmal ist es rundum brandschutzbeplankt und lässt keine Wärme mehr abfließen. Die Gleichung im Inneren war Zeichen für Zeichen dieselbe. Der Rand hat entschieden.
Genau hier liegt die stille Gefahr jeder Simulation. Was in der Mitte des Trägers passiert, haben wir in Kapitel 7 bis zur letzten Nachkommastelle verstanden. Aber das Gleichungssystem von dort war noch nicht lösbar — es fehlte die Information, was an den beiden Enden geschieht. Diese Information heißt Randbedingung, und wer sie falsch setzt, rechnet eine andere Welt aus, ohne es zu merken. Randbedingungen sind der häufigste Anwenderfehler in der ganzen Ingenieurspraxis. Dieses Kapitel macht sie zur bewussten Entscheidung — und löst dabei den Randterm ein, den Kapitel 7 ausdrücklich geparkt hat.
Abbildung 8.1: Derselbe Träger, derselbe Brandherd rechts — nur der linke Rand ist verschieden. Links (blau) hält das kühle Auflager das linke Ende auf 20 °C, die Wärme fließt dort in die Außenwand ab, das Profil steigt gleichmäßig bis 420 °C an. Rechts (rot) ist das linke Ende beplankt und lässt nichts mehr durch, der Brandherd heizt einen rundum abgeschlossenen Träger — er läuft überall auf dieselbe hohe Temperatur zu (hier idealisiert flach). Zwei Welten aus einem einzigen Unterschied am Rand.
Was man hier sieht: links und rechts derselbe Träger mit demselben Brandherd — aber weil das linke Ende einmal Wärme ins kühle Auflager abführt und einmal nicht, stellt sich ein ganz anderes Profil ein. Die eine Simulation beschreibt einen Träger mit kühler Wärmesenke, die andere einen rundum eingepackten. Nur der Rand unterscheidet sie. (Die rechte Kurve ist hier idealisiert flach; wie es wirklich zugeht, klärt dieses Kapitel Schritt für Schritt.)
Lernziele
Nach diesem Kapitel kannst du …
… die drei Grundtypen benennen und physikalisch unterscheiden: Temperatur vorgeben (Dirichlet), Wärmestrom vorgeben (Neumann), Übergang an die Umgebung (Robin) — jeweils mit einem Alltagsbeispiel,
… eine vorgegebene Temperatur ins 5×5-System einbauen, und zwar auf zwei Wegen (Zeile ersetzen und Streichen), und begründen, warum beide dieselbe Lösung liefern,
… einen vorgegebenen Wärmestrom als eine einzige Zahl auf der rechten Seite einbauen und erklären, warum er nicht in die Matrix wandert,
… diagnostizieren, warum ein Träger ohne jede Temperaturvorgabe unlösbar ist (das System „schwimmt”).
WarnungNaheliegende Vermutung
Vermutung:„Wenn ich am rechten Rand nichts vorschreibe, lässt das Programm dort eben alles offen — der Träger kann sich am freien Ende verhalten, wie er will.”
Warum sie naheliegt: „Nichts vorgeben” klingt nach „keine Einschränkung”, nach maximaler Freiheit. Man erwartet, dass ein Ende, über das man nichts gesagt hat, sich irgendwie neutral einstellt.
Was stattdessen stimmt: „Nichts vorschreiben” heißt in der FEM etwas sehr Bestimmtes — nämlich Randterm = 0, also kein Wärmestrom über diesen Rand, also perfekt beplankt. Das ist keine Freiheit, sondern eine knallharte Annahme: eine lückenlose Brandschutzbeplankung, durch die keine Wärme mehr entweicht. Die FEM hat diese Standardannahme fest eingebaut, und wer sie nicht kennt, dämmt sein Bauteil aus Versehen. Wir demonstrieren das in diesem Kapitel an echten Zahlen — der Träger läuft dann überall auf dieselbe Temperatur.
8.1 Drei Ränder, drei Geschichten
Bevor wir irgendeine Zahl anfassen, klären wir die Physik. Am Ende eines Trägers kann die Wirklichkeit dreierlei tun, und jede Möglichkeit hat einen Namen und ein Alltagsbild. Abbildung 8.2 stellt sie nebeneinander.
Abbildung 8.2: Die drei Randtypen als Bildergeschichte. Links: Das kühle Auflager hält das Ende auf einer festen Temperatur, egal wie viel Wärme dafür fließen muss (Dirichlet). Mitte: Der Brandherd pumpt eine feste Leistung hinein, egal wie heiß das Ende schon ist (Neumann). Rechts: Vorbeiströmende Brandgase tauschen Wärme umso stärker aus, je größer der Temperaturunterschied zum Ende ist (Robin). Vorgegeben ist jeweils das Fettgedruckte.
Was man hier sieht: drei Enden, drei Vorgaben. Das kühle Auflager (links) erzwingt eine Temperatur und nimmt dafür so viel Wärme auf, wie nötig — die massive Außenwand ist so groß, dass sie nicht merklich wärmer wird. Der Brandherd (Mitte) erzwingt einen Wärmestrom — er gibt seine Leistung ab, ganz gleich, wie heiß das Ende schon ist. Die Brandgase (rechts) sind ein Zwitter: Sie tauschen Wärme aus, aber umso stärker, je größer der Unterschied zwischen Gas und Ende ist — vorgegeben ist hier weder Temperatur noch Strom, sondern der Zusammenhang zwischen beiden.
Die ersten beiden Typen sind das Handwerkszeug dieses Kapitels; der dritte ist wichtig genug für einen eigenen Kasten, kommt aber erst in Kapitel 14 und Kapitel 15 richtig zum Einsatz.
HinweisDer dritte Typ: Robin, der realistische Übergang
Der Robin-Rand (auch Übergangs- oder Konvektionsrandbedingung) beschreibt, was in der Wirklichkeit am häufigsten passiert: Ein Bauteil steht in Gas anderer Temperatur, und über die Oberfläche tauschen beide Wärme aus — proportional zur Temperaturdifferenz. Sind die Brandgase \(600\,°\mathrm{C}\) heiß und das Ende erst \(200\,°\mathrm{C}\), treibt die Differenz von \(400\,\mathrm{K}\) den Wärmestrom hinein; hat das Ende schon \(550\,°\mathrm{C}\) erreicht, ist die Differenz kleiner und der Strom schwächer. In Formel: der übertragene Strom ist \(Q = \alpha_\mathrm{c}\,A\,
(T_\mathrm{Gas} - T)\), mit dem Wärmeübergangskoeffizienten\(\alpha_\mathrm{c}\); für Brandgase rechnet die Norm mit rund \(\alpha_\mathrm{c} = 25\,\mathrm{W/(m^2\,K)}\).
Robin ist eine Mischung aus den beiden Grundtypen: Für sehr großes \(\alpha_\mathrm{c}\) (perfekter Kontakt) presst er das Ende auf \(T_\mathrm{Gas}\) — das ist Dirichlet. Für \(\alpha_\mathrm{c} = 0\) (kein Übergang) fließt gar nichts — das ist der isolierte Neumann-Rand mit Strom null. Alle realistischen Übergänge liegen dazwischen. Weil Robin einen Anteil enthält, der von der gesuchten Temperatur selbst abhängt, wandert er — anders als der reine Brandherd — teils in die Matrix und teils auf die rechte Seite. Das rechnen wir in Kapitel 15 aus, wenn aus dem idealen Brandherd die echten Brandgase werden.
8.2 Der geparkte Randterm — jetzt abgeholt
Erinnere dich an die Umverteilung aus Kapitel 7 (die partielle Integration). Beim Umsortieren des Integrals blieb ein Ausdruck übrig, den wir ausdrücklich zur Seite gelegt haben — der Randterm:
Für die inneren Knoten war er null, weil ihr Hütchen \(N_i\) an beiden Trägerenden null ist — deshalb durften wir ihn in Kapitel 7 getrost parken. Jetzt holen wir ihn für die Randknoten ab und sehen genau hin, was er bedeutet. Der Faktor \(-\lambda A\,\frac{\mathrm{d}T}{\mathrm{d}x}\) ist nach dem Fourierschen Gesetz aus Kapitel 6 nichts anderes als der Wärmestrom\(Q\), der an dieser Stelle fließt. Der Randterm ist also, Wort für Wort:
Der Wärmestrom, der am Ende des Trägers ein- oder austritt.
Das ist der ganze Zauber. Der Term, den die Mathematik beim Umsortieren wie von selbst ausgespuckt hat, ist genau die Stelle, an der die Flüsse am Rand ins System eintreten. Man muss ihn nicht künstlich hinzufügen — er steht schon da, in der schwachen Form, seit Kapitel 7. Darum heißen Randbedingungen, die einen Fluss vorgeben, in der FEM natürliche Randbedingungen: Sie ergeben sich natürlich aus der Herleitung, ganz ohne Extra-Handgriff.
Und der Sonderfall, der die Vermutung vom Kapitelanfang auflöst, liegt jetzt offen zutage: Setzt man den Randterm auf null, sagt man „am Rand fließt kein Wärmestrom” — das Ende ist perfekt isoliert. Wer also an einem Rand gar nichts tut, lässt den Term auf seinem geparkten Wert null stehen — und dämmt das Ende, ohne es zu wollen. Genau das rechnen wir gleich nach.
TippMerke: die zwei Familien
Fluss vorgeben (Neumann): Der Randterm bekommt einen Wert. Er sitzt auf der rechten Seite des Gleichungssystems — bei dem Knoten, an dem der Strom eintritt. „Natürliche” Randbedingung, weil schon in der schwachen Form enthalten. Nichts tun = Fluss null = isoliert.
Temperatur vorgeben (Dirichlet): Der Knotenwert selbst wird festgeschrieben. Das ist ein Eingriff in die Unbekannten und muss von Hand ins System eingebaut werden (Streichen oder Zeile ersetzen). „Wesentliche” Randbedingung, weil man sie der schwachen Form aufzwingen muss.
8.3 Neumann konkret: der Brandherd mit 200 Watt
Fangen wir mit der natürlichen, der einfacheren Familie an. Der Träger steckt links im kühlen Auflager auf \(20\,°\mathrm{C}\) (das ist Dirichlet, dazu gleich), rechts drückt der Brandherd 200 Watt in den Randknoten 5. Wie baut man diese 200 W ein?
Die Antwort ist verblüffend schlicht: Der eingespeiste Strom ist der Randterm, und der Randterm sitzt auf der rechten Seite bei seinem Knoten. Also schreiben wir eine einzige Zahl in die rechte Seite — die 200 bei Knoten 5 — und rühren die Matrix nicht an. Abbildung 8.3 zeigt das System davor und danach.
Abbildung 8.3: Neumann einbauen heißt: eine Zahl auf der rechten Seite. Links das assemblierte System aus Kapitel 7 mit der unbekannten Randleistung Q₅ bei Knoten 5. Rechts nach dem Einbau des Brandherds: aus dem unbekannten Q₅ wird die vorgegebene 200 W (rot). Die Systemmatrix (die 2/4/4/4/2-Bandstruktur links) bleibt Zeichen für Zeichen unverändert — der Fluss wandert nicht in die Matrix.
Was man hier sieht: Der einzige Unterschied zwischen „vorher” und „nachher” ist eine Zahl in der letzten Zeile der rechten Seite — aus dem unbekannten \(Q_5\) wird die vorgegebene 200. Die Matrix ist beide Male identisch. Genau das meint „der Fluss wandert nicht in die Matrix”: Eine Neumann-Randbedingung ist ein Eintrag auf der rechten Seite, sonst nichts.
Bleibt der linke Rand. Er wird auf \(20\,°\mathrm{C}\) gehalten — das ist eine Dirichlet-Bedingung, die wir gleich im Detail behandeln; hier bauen wir sie schon einmal mit dem Streich-Rezept aus Kapitel 7 ein (Knoten 1 streichen, seinen Wert auf die rechte Seite schieben). Übrig bleibt ein 4×4-System für die Knoten 2 bis 5. Lassen wir das Programm es hinschreiben und lösen:
Code
import osimport syssys.path.insert(0, os.path.join("..", "programme", "kap08"))sys.path.insert(0, os.path.join("..", "programme", "gemeinsam"))from kap08_randbedingungen import (baue_system, baue_rand_ein, loese_mit_raendern)# Träger mit 5 Knoten, leeres System.matrix, rechte_seite, feste_temperaturen, k = baue_system(5)# Links 20 °C halten (Dirichlet), rechts Brandherd mit 200 W (Neumann).baue_rand_ein(rechte_seite, feste_temperaturen, "temperatur", 20.0, "links")baue_rand_ein(rechte_seite, feste_temperaturen, "strom", 200.0, "rechts")temperaturen, lage = loese_mit_raendern( matrix, rechte_seite, feste_temperaturen, [0.0, 0.0, 0.0, 0.0, 0.0])print("Rechte Seite (Watt je Knoten):", rechte_seite)print("Lage der Lösung:", lage)print()print("Knoten | Ort | Temperatur | Sprung zum Vorgänger")print("-------+--------+------------+---------------------")vorher = temperaturen[0]for i inrange(5): sprung = temperaturen[i] - vorherprint(" %d | %.2f m | %6.1f °C | %+6.1f K"% (i +1, i *0.25, temperaturen[i], sprung)) vorher = temperaturen[i]
Rechte Seite (Watt je Knoten): [0.0, 0.0, 0.0, 0.0, 200.0]
Lage der Lösung: eindeutig
Knoten | Ort | Temperatur | Sprung zum Vorgänger
-------+--------+------------+---------------------
1 | 0.00 m | 20.0 °C | +0.0 K
2 | 0.25 m | 120.0 °C | +100.0 K
3 | 0.50 m | 220.0 °C | +100.0 K
4 | 0.75 m | 320.0 °C | +100.0 K
5 | 1.00 m | 420.0 °C | +100.0 K
Interpretation der Ausgabe: Die Lösung ist \(20 / 120 / 220 / 320
/ 420\,°\mathrm{C}\) — und der Sprung von Knoten zu Knoten ist jedes Mal dieselbe\(100\,\mathrm{K}\). Das ist kein Zufall, sondern reine Physik: Weil im Träger keine Wärme erzeugt oder verschluckt wird, fließt durch jedes Element derselbe Strom von 200 W (rein beim Brandherd rechts, raus ins Auflager links). Und derselbe Strom durch dieselbe Wärme-Feder \(k =
2\,\mathrm{W/K}\) macht denselben Temperatursprung: \(\Delta T = Q/k =
200/2 = 100\,\mathrm{K}\) pro Element. Fünf Knoten, vier gleiche Stufen — das Profil ist wieder eine Gerade, nur dass diesmal der Brandherd ihre Steigung bestimmt, nicht ein zweites Auflager.
WichtigVorhersage-Punkt
Bevor du weiterliest: Das Auflager links hält 20 °C, der Brandherd rechts speist 200 W ein. Wie groß ist der Wärmestrom, den das Auflager links aufnehmen muss, damit der Träger im eingeschwungenen Zustand bleibt? Und in welche Richtung fließt er? Leg dich fest, bevor du weiterliest.
Die Antwort steckt in der Bilanz: Was rechts hineinfließt, muss links wieder heraus, sonst würde sich der Träger immer weiter aufheizen. Das Auflager nimmt also genau die 200 W wieder auf, die der Brandherd einspeist — es ist die Senke, die den stationären Zustand überhaupt erst möglich macht. Diese verborgene Rolle des gehaltenen Rands ist gleich der Schlüssel zum „schwimmenden Träger”.
8.4 Dirichlet konkret: die Temperatur festhalten
Jetzt die wesentliche Randbedingung. Das Auflager presst das linke Ende auf \(T_1 = 20\,°\mathrm{C}\) — eine feste Temperatur, eine der gesuchten Unbekannten wird schlicht vorgeschrieben. Anders als der Brandherd lässt sich das nicht durch einen Eintrag auf der rechten Seite erledigen; wir müssen in die Gleichungen eingreifen. Dafür gibt es zwei Rezepte, und sie führen beweisbar zum selben Ergebnis.
Rezept A — die Zeile ersetzen. Knoten 1 hat eine eigene Zeile im 5×5-System (seine Wärmestrom-Bilanz). Aber diese Bilanz interessiert uns gar nicht — wir wissen ja, dass \(T_1 = 20\) ist. Also werfen wir die ganze Zeile weg und schreiben an ihre Stelle die denkbar einfachste Gleichung, die genau das sagt:
Die erste Zeile der Matrix wird also zu \([\,1\ 0\ 0\ 0\ 0\,]\), die erste Zahl der rechten Seite zu 20. Der Rest des Systems bleibt stehen. Löst man es, kommt \(T_1 = 20\) heraus (das erzwingt die neue Zeile), und die übrigen Knoten ordnen sich darum herum ein.
Rezept B — streichen. Das ist das Rezept aus Kapitel 3 und Kapitel 7. Weil \(T_1\) bekannt ist, brauchen wir seine Zeile nicht (sie ergäbe nur die Auflagerleistung \(Q_1\), die uns nicht interessiert), und in allen anderen Zeilen ist der Term \(-2\,T_1\) eine bekannte Zahl, die auf die rechte Seite wandert. Wir streichen Zeile und Spalte 1 und lösen nur noch für die vier freien Knoten. Aus Zeile 2 wird zum Beispiel
Abbildung 8.4: Zwei Rezepte für dieselbe feste Temperatur T₁ = 20 °C. Links Rezept A: Die erste Zeile wird durch die triviale Gleichung 1·T₁ = 20 ersetzt (grün), der Rest bleibt. Rechts Rezept B: Zeile und Spalte 1 werden gestrichen (grau durchgestrichen), der bekannte Wert 20 wandert als −(−2)·20 = 40 auf die rechte Seite (grün). Rezept A behält die 5×5-Größe, Rezept B schrumpft auf 4×4 — aber die Temperaturen, die herauskommen, sind Zahl für Zahl identisch.
Was man hier sieht: Zwei Wege, dieselbe Vorgabe einzubauen. Rezept A lässt das System 5×5 groß und opfert eine Zeile an die triviale Gleichung; Rezept B macht es kleiner, indem es den bekannten Knoten ganz herausnimmt und seinen Beitrag nach rechts schiebt. Beweisen wir, dass beide dieselbe Lösung liefern — nicht durch Zureden, sondern durch Nachrechnen:
Code
import osimport syssys.path.insert(0, os.path.join("..", "programme", "gemeinsam"))from loeser import gauss_eliminationdef K5():"""Die assemblierte 5x5-Systemmatrix des Trägers (k = 2 W/K).""" k =2.0 matrix = []for zeile inrange(5): matrix.append([0.0, 0.0, 0.0, 0.0, 0.0])for element inrange(4): links = element rechts = element +1 matrix[links][links] = matrix[links][links] + k matrix[links][rechts] = matrix[links][rechts] - k matrix[rechts][links] = matrix[rechts][links] - k matrix[rechts][rechts] = matrix[rechts][rechts] + kreturn matrix# Rezept A: Zeile 0 durch 1*T1 = 20 ersetzen, volles 5x5 lösen.matrix_a = K5()seite_a = [0.0, 0.0, 0.0, 0.0, 200.0]matrix_a[0] = [1.0, 0.0, 0.0, 0.0, 0.0]seite_a[0] =20.0loesung_a = gauss_elimination(matrix_a, seite_a)# Rezept B: Zeile+Spalte 0 streichen, 4x4 lösen, dann T1 = 20 anfügen.matrix = K5()seite = [0.0, 0.0, 0.0, 0.0, 200.0]frei = [1, 2, 3, 4]kleine_matrix = []kleine_seite = []for i in frei: neue_zeile = []for j in frei: neue_zeile.append(matrix[i][j]) kleine_matrix.append(neue_zeile) beitrag = matrix[i][0] *20.0# der bekannte Randwert wandert nach rechts kleine_seite.append(seite[i] - beitrag)innere = gauss_elimination(kleine_matrix, kleine_seite)loesung_b = [20.0] + innerezeile_a =""zeile_b =""for i inrange(5): zeile_a = zeile_a + ("%7.1f"% loesung_a[i]) zeile_b = zeile_b + ("%7.1f"% loesung_b[i])print("Rezept A (Zeile ersetzen):", zeile_a, "°C")print("Rezept B (streichen): ", zeile_b, "°C")gleich =Truefor a, b inzip(loesung_a, loesung_b):ifabs(a - b) >1e-9: gleich =Falseprint("Beide identisch:", gleich)
Rezept A (Zeile ersetzen): 20.0 120.0 220.0 320.0 420.0 °C
Rezept B (streichen): 20.0 120.0 220.0 320.0 420.0 °C
Beide identisch: True
Interpretation der Ausgabe: Zahl für Zahl dasselbe Profil — \(20 / 120
/ 220 / 320 / 420\,°\mathrm{C}\). Rezept A und Rezept B sind zwei Schreibweisen desselben Eingriffs: Beide sagen „\(T_1\) ist 20”, nur einmal als zusätzliche Zeile im großen System, einmal durch Herausnehmen des Knotens. Welches man nimmt, ist Geschmack (und Bequemlichkeit des Programmierers) — nie eine Frage der Physik.
HinweisWas Profi-Programme tun: der Strafterm
Große FEM-Pakete streichen ungern Zeilen (das verschiebt alle Indizes und zerstört die schöne Bandstruktur). Sie benutzen oft einen dritten Trick, den Strafterm (englisch penalty): Man addiert auf das Diagonalfeld des festen Knotens eine riesige Zahl \(P\) (etwa \(10^{12}\)) und auf die rechte Seite \(P \cdot 20\). Dann lautet die Zeile ungefähr \(P \cdot T_1 \approx P
\cdot 20\), und weil \(P\) alles andere in der Zeile erdrückt, kommt praktisch \(T_1 = 20\) heraus — ohne dass man die Zeile wirklich entfernt. Es ist ein „so-tun-als-ob-Auflager”, so steif, dass der Knoten quasi festgeklebt ist. Der Preis ist ein winziger Fehler (das Auflager ist nicht unendlich steif) und eine schlechter konditionierte Matrix. Wir bleiben in diesem Buch beim sauberen Streichen; den Strafterm musst du nur wiedererkennen, wenn du ihn in fremdem Code siehst.
8.5 Wenn man nichts vorgibt: die Isolierung von selbst
Jetzt lösen wir die Vermutung vom Kapitelanfang auf. Wir halten den linken Rand auf \(20\,°\mathrm{C}\), es gibt keine Wärmequelle im Träger — und am rechten Rand geben wir nichts vor. Keine Temperatur, keinen Brandherd, nichts. Nach der Vermutung müsste das rechte Ende „frei” sein und irgendeinen Wert annehmen. Schauen wir nach:
Code
import osimport syssys.path.insert(0, os.path.join("..", "programme", "kap08"))from kap08_randbedingungen import (baue_system, baue_rand_ein, loese_mit_raendern)matrix, rechte_seite, feste_temperaturen, k = baue_system(5)# Links 20 °C halten. Rechts: NICHTS vorgeben (isoliert).baue_rand_ein(rechte_seite, feste_temperaturen, "temperatur", 20.0, "links")baue_rand_ein(rechte_seite, feste_temperaturen, "isoliert", 0.0, "rechts")temperaturen, lage = loese_mit_raendern( matrix, rechte_seite, feste_temperaturen, [0.0, 0.0, 0.0, 0.0, 0.0])zeile =""for t in temperaturen: zeile = zeile + ("%6.1f °C"% t)print("Rechte Seite (Watt je Knoten):", rechte_seite)print("Temperaturen:", zeile)
Rechte Seite (Watt je Knoten): [0.0, 0.0, 0.0, 0.0, 0.0]
Temperaturen: 20.0 °C 20.0 °C 20.0 °C 20.0 °C 20.0 °C
Interpretation der Ausgabe:\(20 / 20 / 20 / 20 / 20\,°\mathrm{C}\) — der ganze Träger steht auf 20 °C. Kein „freies” Ende, das sich beliebig einstellt, sondern eine kerzengerade, flache Linie. Das ist die natürliche Randbedingung in Aktion: „Rechts nichts vorgeben” hieß „Randterm null” hieß „kein Wärmestrom über das rechte Ende”. Und wenn rechts kein Strom austritt und es keine Quelle gibt, dann kann durch den ganzen Träger kein Strom fließen (in Reihe geschaltet trägt jedes Element denselben Strom, und der ist am rechten Ende null). Ohne Strom kein Temperaturgefälle — also überall dieselbe Temperatur wie am gehaltenen Ende: 20 °C.
Der Träger ist rechts perfekt beplankt, ohne dass wir das Wort „isoliert” je getippt hätten. Es war die Voreinstellung. Genau davor warnt die Vermutung: Wer ein Ende „vergisst”, baut keine offene Grenze, sondern eine lückenlose Beplankung — und wundert sich, warum die Wärme sich staut.
8.6 Der schwimmende Träger
Bisher hatten wir immer mindestens einen gehaltenen Rand — das Auflager auf 20 °C. Was passiert, wenn wir es weglassen? Nehmen wir den Brandherd von vorhin (200 W rechts hinein) und ersetzen das Auflager links durch einen zweiten Fluss: 200 W treten links wieder aus (in eine Wärmesenke, die diesmal aber keine feste Temperatur erzwingt, sondern nur den Strom abnimmt). Rein gleich raus, die Bilanz stimmt — und doch geht etwas schief.
WichtigVorhersage-Punkt
Bevor du das Programm laufen lässt: Wir geben nur noch Flüsse vor (200 W rein, 200 W raus), keine einzige Temperatur. Die Wärmemenge stimmt, es fließt so viel heraus wie hinein. Glaubst du, das Programm findet eine eindeutige Temperaturverteilung — oder fehlt ihm etwas? Und wenn ja: was? Leg dich fest.
Code
import osimport syssys.path.insert(0, os.path.join("..", "programme", "kap08"))from kap08_randbedingungen import (baue_system, baue_rand_ein, loese_mit_raendern)sys.path.insert(0, os.path.join("..", "programme", "gemeinsam"))from loeser import gauss_seidelmatrix, rechte_seite, feste_temperaturen, k = baue_system(5)# Nur Flüsse: 200 W rein rechts, 200 W raus links. KEINE feste Temperatur.baue_rand_ein(rechte_seite, feste_temperaturen, "strom", -200.0, "links")baue_rand_ein(rechte_seite, feste_temperaturen, "strom", 200.0, "rechts")# Zwei Gauß-Seidel-Läufe mit verschiedenen Startprofilen.aus_null = gauss_seidel(matrix, rechte_seite, [0.0, 0.0, 0.0, 0.0, 0.0],1e-8, 400)aus_hundert = gauss_seidel(matrix, rechte_seite, [100.0, 100.0, 100.0, 100.0, 100.0], 1e-8, 400)zeile_null =""zeile_hundert =""for i inrange(5): zeile_null = zeile_null + ("%7.1f"% aus_null[i]) zeile_hundert = zeile_hundert + ("%7.1f"% aus_hundert[i])print("Start bei 0: ", zeile_null)print("Start bei 100: ", zeile_hundert)print()sprung_null =""sprung_hundert =""for i inrange(4): sprung_null = sprung_null + ("%7.1f"% (aus_null[i +1] - aus_null[i])) sprung_hundert = sprung_hundert + ("%7.1f"% (aus_hundert[i +1] - aus_hundert[i]))print("Sprung je Element, Start 0: ", sprung_null)print("Sprung je Element, Start 100:", sprung_hundert)
Start bei 0: -250.0 -150.0 -50.0 50.0 150.0
Start bei 100: -150.0 -50.0 50.0 150.0 250.0
Sprung je Element, Start 0: 100.0 100.0 100.0 100.0
Sprung je Element, Start 100: 100.0 100.0 100.0 100.0
Interpretation der Ausgabe: Zwei Läufe, zwei verschiedene Profile — aber sieh auf die Sprünge: Sie sind in beiden Läufen identisch \(100\,
\mathrm{K}\) pro Element. Die Form steht fest (dieselbe Steigung wie beim Neumann-Träger, denn derselbe Brandherd treibt dieselben 200 W durch dieselben Federn), aber die Höhe ist völlig willkürlich — sie hängt allein davon ab, wo Gauß-Seidel zu raten begonnen hat. Das System hat nicht eine Lösung, sondern unendlich viele, die sich nur um eine additive Konstante unterscheiden.
Physikalisch ist das sonnenklar: Wir haben gesagt, wie steil das Profil ist (die Flüsse bestimmen die Steigung), aber niemand hat gesagt, wo es liegt — kein einziger Punkt ist auf einen Temperaturwert festgenagelt. Ist das linke Ende bei 20 °C oder bei 120 °C? Beide Profile erfüllen jede Gleichung und jede Bilanz gleich gut. Der Träger schwimmt: Man kann ihn als Ganzes nach oben oder unten schieben, ohne dass sich an den Wärmeströmen etwas ändert. Abbildung 8.5 zeigt drei dieser gleichberechtigten Lösungen.
Code
import matplotlib.pyplot as pltorte = [i *0.25for i inrange(5)]form = [i *100.0for i inrange(5)] # ansteigend, 100 K je Schrittfig, ax = plt.subplots(figsize=(8.5, 4.2))for basis, farbe, name in ((20.0, "tab:blue", "linkes Ende = 20 °C"), (120.0, "tab:green", "linkes Ende = 120 °C"), (220.0, "tab:orange", "linkes Ende = 220 °C")): werte = [basis + f for f in form] ax.plot(orte, werte, "o-", color=farbe, ms=8, markeredgecolor="black", label=name)ax.text(0.5, 40, "gleiche Steigung, gleiche Wärmeströme —\nnur die Höhe ist offen", ha="center", fontsize=10, style="italic", color="0.3")ax.set_xlabel("Ort entlang des Trägers (m)")ax.set_ylabel("Temperatur (°C)")ax.set_title("Alle lösen die Gleichung, keine ist DIE Lösung")ax.legend(loc="upper left")plt.tight_layout()plt.show()
Abbildung 8.5: Der schwimmende Träger: dieselbe Profilform auf drei Höhen. Nur Flüsse sind vorgegeben (200 W rein rechts, 200 W raus links), keine Temperatur — deshalb steht die Steigung (100 K pro Element) fest, aber die Lage ist frei. Alle drei Geraden lösen das Gleichungssystem exakt und tragen denselben Wärmestrom; keine von ihnen ist DIE Lösung. Erst eine einzige vorgegebene Temperatur nagelt eine davon fest.
Was man hier sieht: drei parallele Profile, jedes eine gültige Lösung. Sie unterscheiden sich nur um eine konstante Verschiebung nach oben. Genau diese Vieldeutigkeit meint der Satz „das System ist nur bis auf eine Konstante bestimmt”. Der Ausweg ist so klein wie entscheidend: Eine einzige Dirichlet-Bedingung — irgendein Punkt auf einen festen Wert — sticht eine der Geraden heraus und macht die Lösung eindeutig. Das Auflager aus Kapitel 7 tat genau das.
Und es gibt einen noch schlimmeren Verwandten, den man ehrlich benennen muss. Bisher stimmte wenigstens die Bilanz (200 rein, 200 raus). Was, wenn beide Enden Wärme hineinpumpen — links 200 W und rechts 200 W, ohne Senke? Dann sammelt sich Wärme im Träger an, ohne je abzufließen; im eingeschwungenen Zustand müsste die Temperatur unendlich hoch stehen. Es gibt gar keine stationäre Lösung mehr, und Gauß-Seidel zeigt das ehrlich, indem es Runde um Runde davontreibt:
Netto zugeführte Leistung: 400.0 W (sollte 0 sein!)
Runden | Temperatur an Knoten 3
-------+-----------------------
5 | 200 °C
20 | 950 °C
100 | 4950 °C
400 | 19950 °C
Interpretation der Ausgabe: Die Temperatur wächst mit jeder Runde weiter, ohne sich je einzupendeln — 400 W fließen hinein und nichts heraus, also gibt es keinen Zustand, in dem sich nichts mehr ändert. Das ist der Unterschied zwischen „bis auf eine Konstante offen” (Bilanz stimmt, nur die Höhe fehlt) und „gar nicht lösbar” (die Bilanz stimmt nicht einmal). Beide Male ist die Ursache dieselbe: zu wenig festgelegt am Rand. Merke dir das Bild vom schwimmenden Träger — es kehrt in Kapitel 14 wieder, wenn ein mechanischer Träger ohne Lagerung auf genau dieselbe Weise davonschwebt (Starrkörpermoden).
8.7 Umschalten: das Profil klappt um
Die drei Randtypen am rechten Ende erzeugen drei ganz verschiedene Profile — bei linkem Auflager auf 20 °C. Halten wir sie nebeneinander: rechts gehalten auf 300 °C ergibt die vertraute Gerade auf 300; rechts beflammt mit 200 W ergibt die steilere Gerade hinauf auf 420; rechts isoliert ergibt die waagerechte Linie auf 20. Die folgende Darstellung schaltet zwischen den dreien um — sieh zu, wie das Profil jedes Mal umklappt.
Abbildung 8.6: Umschalten der rechten Randbedingung (linkes Ende immer auf 20 °C gehalten). Rechts gehalten (300 °C), rechts beflammt (200 W) und rechts isoliert erzeugen drei völlig verschiedene stationäre Profile — dieselbe Physik im Inneren, nur der Rand entscheidet. Das Profil klappt beim Umschalten um.
Was man sieht: Drei stationäre Zustände, erzeugt durch nichts als den Wechsel der rechten Randbedingung. Der gehaltene Rand zwingt das Ende auf 300 °C; der Brandherd lässt es auf den Wert steigen, der gerade 200 W abführt (420 °C, sogar höher als der gehaltene Rand); die Beplankung lässt keinerlei Wärme durch, und der Träger gleicht sich vollständig dem gehaltenen linken Ende an. Wer die Randbedingung wechselt, wechselt das Ergebnis — dramatischer als jede Änderung im Inneren.
8.8 Die interaktive Einheit: der Rand-Schalter
Jetzt bist du am Zug. Das folgende Programm ist der Rand-Schalter: Du wählst für das linke und das rechte Ende je einen Randtyp ("temperatur", "strom" oder "isoliert") und einen Zahlenwert. Das Programm baut die Randbedingungen ins 5-Knoten-System ein, druckt die geänderte rechte Seite und die feste-Temperatur-Liste, löst und zeigt das Profil. Auch der ungültige Fall (beidseitig nur Fluss) ist zugelassen — dann erlebst du selbst, wie der Träger schwimmt oder davontreibt, und bekommst die Erklärung dazu.
WichtigVorhersage-Punkt
Bevor du ausführst: Der Schalter startet mit links "temperatur" 20 °C und rechts "strom" 200 W (die beflammte Gerade auf 420 °C). Stell rechts auf "isoliert" um (Zeile RECHTS_TYP = "isoliert"). Welche Temperatur zeigt Knoten 5 dann — 420 °C, 20 °C oder etwas dazwischen? Leg dich fest, bevor du es probierst.
Abbildung 8.7: Vorgerenderte Fassung des Rand-Schalters mit der Startbelegung (links 20 °C gehalten, rechts 200 W beflammt): die Gerade steigt auf 420 °C. Im Browser ersetzt dein eigenes Ergebnis dieses Bild, sobald du die Zelle darüber ausführst — stell rechts auf “isoliert” und sieh, wie das Profil auf die flache 20-°C-Linie zusammenfällt.
Was man sieht: Mit der Startbelegung steigt die Gerade auf 420 °C. Stellst du RECHTS_TYP = "isoliert", fällt das ganze Profil auf die flache Linie bei 20 °C zusammen — Knoten 5 zeigt dann 20 °C, nicht 420. Das war die Pointe des Vorhersage-Punkts: Ein isoliertes Ende führt keine Wärme ab, also staut sich nichts, und bei fehlender Quelle gleicht sich alles dem gehaltenen linken Ende an. Probier auch links und rechts beide auf "strom" — dann siehst du den schwimmenden Träger (bei ausgeglichenen Werten) oder das Davontreiben (bei zu viel Zustrom) aus dem vorigen Abschnitt selbst.
8.9 Das Kapitel-Programm
Das vollständige, eigenständig lauffähige Skript liegt in programme/kap08/kap08_randbedingungen.py. Es erweitert die vier Funktionen aus Kapitel 7 um einen Randbedingungs-Baukasten: baue_rand_ein(...) setzt eine einzelne Randbedingung (Temperatur, Strom oder isoliert) an ein Trägerende, reduziere(...) streicht alle festgehaltenen Knoten auf einen Schlag, und loese_mit_raendern(...) fädelt die Lösung ein — mit mindestens einer festen Temperatur direkt über die Gauß-Elimination, ohne jede feste Temperatur über Gauß-Seidel, das dann das Schwimmen und Davontreiben sichtbar macht. Das Skript rechnet alle fünf Szenarien dieses Kapitels vor (beidseitig gehalten, beflammt, isoliert, schwimmend, unlösbar) und speichert die Umschalt-Abbildung. Führe es mit python kap08_randbedingungen.py aus. baue_elementmatrix und assembliere sind bewusst Zeile für Zeile aus dem Kapitel-7-Programm einkopiert (mit Quellhinweis), damit das Skript ohne Pfad-Bastelei über Kapitelgrenzen läuft.
8.10 Die Randbedingungs-Werkstatt
Randbedingungen sind der häufigste Fehler in der Praxis — also machen wir aus der Erfahrung dieses Kapitels eine feste Prüfroutine. Diese Checkliste geht man vor jeder Simulation durch; sie kehrt in Kapitel 12 (Verifikation) und Kapitel 15 (das große Finale) wieder.
TippWerkstatt: der Randbedingungs-Review
Hat jeder Rand eine Bedingung? Gehe jedes Ende (in 2D: jede Randkante) durch. Ein Rand, über den du nichts gesagt hast, ist nicht „offen” — er ist isoliert (Fluss null). War das Absicht?
Ist mindestens eine Temperatur (Dirichlet) vorgegeben? Ohne einen einzigen festgehaltenen Wert schwimmt das System — es ist nur bis auf eine Konstante bestimmt. Reine Fluss-Ränder genügen nie allein.
Stimmt die Bilanz bei reinen Fluss-Rändern? Wenn du (fast) nur Flüsse vorgibst: Summiert sich die eingespeiste Leistung zu null? Wenn mehr hinein- als hinausfließt, gibt es gar keinen stationären Zustand.
Passt der Typ zur Physik? Kühles Auflager und Thermostat → Temperatur (Dirichlet). Brandherd und Heizdraht → Strom (Neumann). Übergang an Brandgase oder Luft → Übergang (Robin). Ein Verwechseln von „Temperatur halten” und „Leistung einspeisen” ist der klassische Anfängerfehler.
Sind die Werte plausibel und richtig herum? Vorzeichen des Stroms (rein oder raus?), Einheit (°C, nicht K, wo das Programm es erwartet), Größenordnung. Ein Strom mit falschem Vorzeichen heizt, wo er kühlen soll.
8.11 Die Namensschilder
Wir haben die Sache gebaut; jetzt kleben wir die Namen an. Alle drei Grundtypen tragen den Namen eines Mathematikers des 19. Jahrhunderts.
TippDie Fachwörter, jetzt nachgereicht
Dirichlet-Randbedingung (wesentliche Randbedingung): der Wert wird vorgegeben — beim Träger die feste Temperatur. Nach Peter Gustav Lejeune Dirichlet (1805–1859). Man muss sie dem System aufzwingen (Streichen oder Zeile ersetzen), darum „wesentlich”.
Neumann-Randbedingung (natürliche Randbedingung): die Steigung bzw. der Fluss wird vorgegeben — beim Träger der Wärmestrom. Nach Carl Gottfried Neumann (1832–1925). Sie steckt schon im Randterm der schwachen Form, ergibt sich also natürlich.
Robin-Randbedingung (Übergangs-, Konvektionsrandbedingung): eine Mischung — der Fluss hängt linear von der Temperatur ab. Nach Victor Gustave Robin (1855–1897).
Natürlich / wesentlich: natürlich = ohne Extra-Handgriff aus der schwachen Form (Neumann); wesentlich = muss aufgezwungen werden (Dirichlet).
Isoliert: der Sonderfall des Neumann-Rands mit Fluss null — die eingebaute Standardannahme der FEM.
TippMerkkasten
Der in Kapitel 7 geparkte Randterm ist der Wärmestrom an den Enden — dort wohnen die Flussrandbedingungen.
Neumann (Fluss vorgeben): eine Zahl auf die rechte Seite, Matrix bleibt unberührt. Brandherd mit 200 W → Profil \(20/120/220/320/420\,
°\mathrm{C}\), gleicher Sprung \(Q/k = 100\,\mathrm{K}\) pro Element.
Dirichlet (Temperatur vorgeben): Zeile ersetzen oder streichen — beide liefern identisch \(T_1 = 20\,°\mathrm{C}\). Profis benutzen oft den Strafterm.
Nichts vorgeben = perfekt beplankt (Randterm null). Links 20 °C, rechts nichts, keine Quelle → überall 20 °C.
Ohne eine feste Temperatur schwimmt der Träger (Lösung nur bis auf eine Konstante); bei unausgeglichenen Flüssen gibt es gar keine stationäre Lösung.
Roter Faden
Zurück: Dieses Kapitel hat den in Kapitel 7 geparkten Randterm eingelöst — er ist der Wärmestrom an den Enden, und aus ihm werden die Neumann-Randbedingungen. Das Streich-Rezept für feste Werte stammt aus Kapitel 3 (Feder, \(u_1 = 0\)) und Kapitel 7 (Temperatur, nicht null); hier haben wir es um das zweite Rezept (Zeile ersetzen) und den Blick auf den Strafterm ergänzt. Die Gerade des beflammten Trägers ist wieder die aus Kapitel 6, nur mit dem Brandherd statt des zweiten Auflagers als Steigungsgeber; der Sprung \(Q/k\) pro Element ist die Reihenschaltung aus Kapitel 3 und der Wärmestrom-Rechnung aus Kapitel 7. Gelöst wurde mit der Gauß-Elimination und dem Gauß-Seidel-Verfahren aus Kapitel 4.
Vor: Der Robin-Rand wird in Kapitel 14 und Kapitel 15 der realistische Brandgas-Übergang, wenn aus der idealen Leistungseinspeisung die Kühlung an strömende Gase wird. Die Randbedingungs-Werkstatt kehrt in Kapitel 12 (Verifikation) und Kapitel 15 (Finale) wieder. Der schwimmende Träger taucht in Kapitel 14 als mechanischer Träger ohne Lagerung auf — dann schwebt nicht die Temperatur, sondern das ganze Bauteil davon (Starrkörpermoden). Und in Kapitel 9 kommt die Zeit dazu: Dann entscheidet der Rand nicht nur über das eingeschwungene Profil, sondern über den ganzen Weg dorthin.
Übungen
Ü 8.1 (Verstehen). Ordne die drei Randtypen — Dirichlet (Temperatur), Neumann (Fluss), Robin (Übergang) — den drei Alltagssituationen zu und begründe:
Ein Topf steht auf der Herdplatte: Die Platte gibt eine eingestellte Leistung ab. Welcher Typ ist der Boden des Topfes? (b) Eine gefüllte Thermoskanne: Wie ist ihre Wand ideal modelliert? (c) Ein Heizkörper im Zimmer gibt Wärme an die Raumluft ab, umso mehr, je heißer er gegenüber der Luft ist. Welcher Typ ist seine Oberfläche?
HinweisMusterlösung zu Ü 8.1
Herdplatte → Neumann. Die Platte prägt eine Leistung ein (die Wattzahl der Stufe), unabhängig davon, wie heiß der Topfboden schon ist — genau der Brandherd dieses Kapitels. (b) Thermoskanne → isoliert (Neumann mit Fluss null). Ihre doppelwandige Vakuumwand lässt idealerweise keinen Wärmestrom durch — das ist die natürliche Randbedingung als Konstruktionsziel, dasselbe Prinzip wie eine lückenlose Beplankung. (c) Heizkörper → Robin. Er gibt Wärme proportional zur Übertemperatur an die Luft ab: Ein sehr heißer Heizkörper in kühlem Zimmer kühlt schnell, ein lauwarmer kaum — Fluss hängt von der Temperatur ab, das ist der Übergang. (Ein Thermostat, der eine feste Raumtemperatur erzwingt, wäre dagegen Dirichlet.)
Ü 8.2 (Verändern). Der Träger links auf 20 °C, rechts der Brandherd. Sage zuerst vorher: Wenn du die Brandherd-Leistung von 200 W auf 400 W verdoppelst — verdoppelt sich die Endtemperatur an Knoten 5 (von 420 °C auf 840 °C)? Rechne es dann mit dem Skript loesungen/kap08_ue2.py nach und deute das Ergebnis.
HinweisMusterlösung zu Ü 8.2
Nein — nicht die Endtemperatur, sondern die Übertemperatur verdoppelt sich. Bei 400 W ist der Sprung je Element \(\Delta T = Q/k = 400/2 =
200\,\mathrm{K}\) (doppelt so viel wie die 100 K bei 200 W), das Profil wird
Knoten 5 steigt von 420 auf 820 °C — das ist nicht das Doppelte von 420 (das wären 840). Verdoppelt hat sich die Übertemperatur über dem gehaltenen Rand: von \(420 - 20 = 400\,\mathrm{K}\) auf \(820 - 20 = 800\,
\mathrm{K}\). Das Auflager hält den Nullpunkt bei 20 °C fest; verdoppeln lässt sich nur, was über ihm liegt. Das ist genau der Denkfehler, vor dem die Übung warnt — absolute Temperaturen sind keine Vielfachen voneinander, nur die Abstände vom festgehaltenen Bezugspunkt.
Und diesmal steht hinter der Zahl echte Physik: Mit 820 °C ist das rechte Ende in der Kirschrotglut angekommen (die Glühfarben-Tafel aus Kapitel 1 setzt dunkelrot ab rund 550 °C an, kirschrot bei etwa 800 °C) — der Träger glüht hier wirklich sichtbar. Das ist keine Effekthascherei, sondern die ernste Seite des Brandschutzes: Bei solchen Temperaturen hat Baustahl längst einen großen Teil seiner Festigkeit verloren (bei 600 °C etwa die Hälfte). Genau darum wird ein Träger im Brandfall nicht durch Schmelzen gefährlich — das käme erst bei rund 1500 °C —, sondern weil er seine Tragkraft verliert, lange bevor er glüht.
Ü 8.3 (Übertragen). Kombiniere zwei Bausteine: die beidseitige Dirichlet-Bedingung (links 20 °C, rechts 300 °C) aus diesem Kapitel und die Wärmequelle aus Übung 7.3 (ein Heizdraht mit \(P = 160\,\mathrm{W/m}\), also 40 W je Element, hälftig auf die Knoten verteilt). Baue erst die Quelle auf die rechte Seite, dann die festen Ränder ein. Welches Profil erwartest du — die Gerade, die Parabel aus 7.3, oder etwas Neues? Rechne mit loesungen/kap08_ue3.py.
Die festen Ränder halten die Enden auf 20 und 300 °C (wie die reine Gerade), und die Wärmequelle wölbt das Profil dazwischen über die Gerade auf — in der Mitte am stärksten (\(+40\,\mathrm{K}\) bei Knoten 3). Die Lehre: Rand und rechte Seite werden unabhängig voneinander eingebaut und addieren sich. Die Quelle geht auf die rechte Seite (Kapitel 7), die festen Temperaturen per Streich-Rezept (Kapitel 8) — die Reihenfolge ist gleichgültig, das Ergebnis dasselbe. Randbedingungen und Belastung sind zwei getrennte Regler am selben System.
Das Kleingedruckte
Drei ehrliche Feinheiten zum Schluss.
Erstens: Wir haben den Neumann-Rand als eingeprägte Leistung in Watt behandelt — eine Zahl auf der rechten Seite. In der Literatur wird die Neumann-Bedingung oft als vorgegebene Wärmestromdichte\(q\) (in W/m²) formuliert; die Leistung ist dann \(Q = q \cdot A\) mit der Randfläche \(A\). Für unseren 1D-Träger mit festem Querschnitt ist das nur ein Umrechnungsfaktor, und wir bleiben bei der anschaulicheren Wattzahl. In 2D (Kapitel 10) muss man sorgfältiger sein, weil sich die Leistung über die Länge der Randkante verteilt.
Zweitens: Der Robin-Rand ist hier nur beschrieben, nicht ausgerechnet. Sein Einbau ist etwas kniffliger, weil ein Teil von ihm (der temperaturabhängige Anteil) in die Matrix wandert — er verändert die Diagonale des Randknotens. Das lohnt sich erst, wenn wir den realistischen Brandgas-Übergang wirklich brauchen (Kapitel 15). Bis dahin genügen die beiden Grundtypen für alles.
Drittens: Alle Randbedingungen dieses Kapitels waren zeitlich konstant — das Auflager hält immer 20 °C, der Brandherd gibt immer 200 W. In Wirklichkeit ändern sich Ränder oft mit der Zeit (der Brandherd flammt auf, das Auflager erwärmt sich). Zeitabhängige Randbedingungen sind der natürliche nächste Schritt, sobald Kapitel 9 die Zeit ins Spiel bringt; das Rezept bleibt dasselbe, nur werden die Randwerte in jedem Zeitschritt neu gesetzt.