# Numerische Wärmeleitung mit dem Galerkin-Verfahren

Dieses kompakte Lernmodul greift das Thema der Diplomarbeit von Karsten
Kessler (Fachhochschule Darmstadt, Sommersemester 1998) auf. Darstellung,
Abbildungen und Python-Implementierung wurden für die Online-Veröffentlichung
neu erstellt. Das historische FORTRAN-Programmlisting ist nicht enthalten.

## Inhalt

1. `notebooks/01_waermeleitung.ipynb` führt Problem und exakte Lösung ein.
2. `notebooks/02_galerkin.ipynb` erklärt die räumliche Galerkin-Diskretisierung
   mit linearen finiten Elementen und die Trapezregel in der Zeit.
3. `notebooks/03_konvergenz.ipynb` untersucht Orts- und Zeitdiskretisierung.

Die Modellgleichung lautet

```text
u_t = kappa * u_xx,       0 < x < 1,
u(0,t) = u(1,t) = 0.
```

Als Anfangsbedingung wird eine Kombination zweier Sinusmoden gewählt. Dadurch
steht eine exakte Vergleichslösung zur Verfügung, ohne historischen Quellcode
zu benötigen.

## Verwendung

Die Notebooks erwarten, dass sie aus diesem Verzeichnis gestartet werden. Für
die interaktiven Regler wird `ipywidgets` benötigt.

```sh
python3 -m pip install -r requirements.txt
jupyter notebook
```

Ohne Jupyter lässt sich die Implementierung direkt prüfen:

```sh
python3 -m unittest -v test_galerkin_heat.py
```

## Veröffentlichung

`index.html` ist auf das bestehende Design von `tutor.kkessler.de/lernangebote/`
abgestimmt. Für die Veröffentlichung wird der gesamte Ordner nach
`/lernangebote/galerkin/` kopiert. Dort verwendet die Seite automatisch das
vorhandene `style.css` und `theme.js` des übergeordneten Angebots.

`integration-snippet.html` enthält die Karte, die innerhalb von
`.notebook-grid` in `/lernangebote/index.html` ergänzt werden kann. Die
`.ipynb`-Dateien werden auf der Modulseite direkt zum Download angeboten. Der
Python-Quelltext wird im ZIP-Paket angeboten, weil manche Webserver den direkten
Abruf von Dateien mit der Endung `.py` blockieren.

Die Modulseite enthält außerdem ein unmittelbar im Browser bedienbares
Experiment. Dieses benötigt keine Python-Laufzeit und funktioniert deshalb
auch dann, wenn die Notebooks noch nicht in Colab oder JupyterLite eingebunden
sind.

Die Colab-Links erwarten dieselbe Ordnerstruktur im Repository
`karkessler/dhbw-mathe3` unter `galerkin/`. Beim Start in Colab laden die
Notebooks den gemeinsamen numerischen Kern aus diesem Verzeichnis nach.

Empfohlener Herkunftshinweis:

> Dieses Lernbeispiel basiert auf ausgewählten mathematischen Inhalten meiner
> Diplomarbeit im Studiengang Mathematik an der Fachhochschule Darmstadt,
> Sommersemester 1998. Darstellung, Abbildungen und Python-Implementierung
> wurden für diese Veröffentlichung neu erstellt.

## Rechtlicher Hinweis zur Abgrenzung

Das Lernmodul ist keine Portierung von `GALERKIN.FOR`. Es verwendet ein neu
formuliertes Modellproblem, lineare finite Elemente und eine eigenständig
strukturierte Implementierung. Das historische Programmlisting sowie dessen
Routinen sind nicht Bestandteil dieses Pakets.
