From Fortran to Python - Running inside your browser.
Dieser Rechner ist ein direkter Port eines ursprünglich in Fortran 95 geschriebenen Programms. Das Ziel des Ports war es, die Quantenmechanik quasi direkt und transparent im Browser laufen zu lassen. Der zugrundeliegende Code ist etwas unkonventionell strukturiert, da der Python-Code auf einem Fortran-Programm basiert.
Das Programm parst zunächst die Input-Datei (welche für das Fortran-Programm als h2.in gespeichert wurde). Diese
beginnt mit einer Kommentar-Zeile (welche übersprungen wird), in der darauffolgenden Zeile steht die Bindungslänge.
Es folgt eine weitere Kommentarzeile (in Fortran-Logik auskommentiert durch ein "!"), dann wird der Basissatz im
Gaussian-Format eingelesen, so, wie es beispielsweise auf
basissetexchange.org zu finden ist. Eine typische Zeile in diesem Format sieht wie folgt aus:
0.1873113696D+02
Dabei handelt es sich um eine alte Schreibweise für Gleitkommazahlen mit doppelter Genauigkeit.
Der Buchstabe D steht für den Exponenten zur Basis 10.
D+02 bedeutet 102. Die Zahl entspricht somit 18.73113696.
Da moderne Programmiersprachen wie Python standardmäßig das "E" verwenden (z.B. 1.8E+01),
führt der Parser eine Text-Ersetzung durch, bevor die Zahlen als numerische Werte in die dynamischen
Arrays geladen werden.
Ein zentraler Aspekt ist die Verwaltung des Arbeitsspeichers. In Fortran 77 mussten Array-Größen
oft zur Kompilierzeit feststehen. Mit Fortran 90 wurde die dynamische Speicherverwaltung
(ALLOCATABLE) eingeführt. In diesem Python-Port geschieht dies praktischerweise automatisch:
Listen und NumPy-Arrays passen sich dynamisch der Größe des eingelesenen Basissatzes an, egal ob
STO-3G oder 6-311++G verwendet wird. Anzumerken ist, das die aktuelle Version des Codes nur s-Orbitale einlesen kann.
Bevor wir den SCF-Zyklus betrachten, betrachten wir die Integrale, die im Verlauf über die primitiven Gauss-Funktionen
berechnet werden. Dies wird von der Funktion integrale_berechnen gehandhabt, welche ihrerseits auf vier
praktische Hilfsfunktionen zurückgreift:
Der eigentliche Programmablauf folgt exakt dem Roothaan-Hall-Schema, unterteilt in 12 logische Schritte (strikt gemäß der Vorlesung!):
numpy.linalg.eigh (basierend auf LAPACK),
was mathematisch effizienter ist. Dies liefert die Orbitalenergien ε und die Koeffizienten C'.