In diesem Abschnitt ist das nötigste zusammengefaßt, das man braucht um eigene Erweiterungen für das EAS3-Programm zu schreiben.
Programmstruktur (nur sehr grob)
Hauptprogramm: eas3
Variablenverwaltung: eas3varmod
Hilfsmodule:
| Modulname | Kommentar | Funktion |
| eas3typedef | exportiert eas3ks_t | grundlegende Typdefinitionen des EAS3-Systems |
| eas3constdef | systemweite Konstanten | grundlegende Konstantendefinitionen des EAS3-Systems |
| eas3rwmod | exportiert alle Symbole von eas3iomod (bis auf eas3ks_t) | EAS-IO-Modul (Schreib-/Leseroutinen) |
| iso_vst | Strings variabler Länge | Modul für Stringverarbeitung in FORTRAN90 |
| errormod | (v.a. für eas3rwmod und eas3) | Fehlerbehandlung bei unbedingtem Abbruch |
| messagemod | Fehlerbehandlungsroutinen für Bearbeitung der Rückgabestatusflags | Fehlerbehandlung für die Module |
| parsermod | Hilfsroutinen für Kommandointerpreter | Parsermodul (Integer, Real, usw. aus Strings extrahieren) |
| eas3cmdlinemod | Hilfsroutinen für Benutzerinterface (hier wird auch die readline-Bibliothek eingebunden) | Kommandozeileninterface für Benutzer |
| eas3toolmod | Routinensammlung von mehrfach in verschiedenen Modulen verwendeten Routinen | Dateinummern bzw. TMP-Bezeichner einlesen, Eingabefenster vervollständigen, Speicherbedarfsausgabe, ... |
| eas3fttoolmod | Routinensammlung von mehrfach in verschiedenen Modulen verwendeten Routinen | Verwaltung und Verarbeitung der Zusatzinformationen für die Datenstruktur ft |
Kommando- und Programm-Module:
Diese Module enthalten die eigentliche Funktionalität von EAS3. Jedes dieser Module enthält mindestens Routinen zur Interpretation der Kommandozeile des entsprechenden Befehls (*_cmd), einen Fehlerstring (*_msg), der sämtliche Fehlermeldungen dieses Moduls enthält und gegebenenfalls Routinen der ausführbaren Programme (*_prg), die erst durch AUSFUEHREN gestartet werden. Außerdem werden lokale Typdefinitionen, soweit sie in eas3varmod benötigt werden, exportiert. Von diesen Modulen werden aber keine weiteren Symbole exportiert (alles was sonst noch in diesen Modulen deklariert wird sollte PRIVATE sein).
| Modulname | Funktionalität | EAS3-Befehle |
| eas3basecmdmod | EAS3 Grundbefehle | FILES, INFILE, OUTFILE, SCHREIBFORMAT, INTERAKTIV, FENSTER, PARAMETER, ZEITINDEX, ZEITSCHRITT |
| eas3printmod | EAS3 Ausgabebefehle (direkt ausgeführt) | KENNSATZ, DRUCKEN, WERTEBEREICH |
| eas3ableitennmod | Berechnung von ableitungen | ABLEITEN |
| eas3scalaropmod | skalare Operationen | KOPIEREN, ABS, LN, LOG, FT_SCALERE, SCALETRANS |
| eas3convertmod | Konvertierung in verschiedene Dateiformate | CONVERT |
| tecpltmod | Tecplot-Ausgaberoutinen und entsprechende Hilfsprogramme | Tecplot-Ausgabemodul (Hilfsmodul f. eas3convertmod) |
| eas3intpolmod | Lagrange-Interpolation | INTERPOLIEREN |
| eas3integrmod | Integration | INTEGRIEREN |
| eas3meanmod | Mittelungen | MITTELUNG, FMITTELUNG |
| eas3umordnenmod | umordnen verschiedener Dimensionen | UMORDNEN, PAR2D_PAR3D, PAR3D_PAR2D |
| eas3verkettenmod | verketten verschiedener Dateien | VERKETTEN |
| eas3verknuepfenmod | verknüpfen verschiedener Dateien | VERKNUEPFEN |
| eas3ksmod | Kennsatzbearbeitung | KSSCHREIB |
| eas3intpolmod | Interpolation, Gitterverfeinerung | INTERPOLIEREN |
| eas3ttrafomod | Fourieranalyse über der Zeit | P2FT, F2PT, PHASGLATT |
| eas3ztrafomod | inverse Fouriertransformation in z-Richtung | F2PZ |
| eas3ftrealmod | Fourier Transformation für die Datenstruktur ft | FT2PHYS, PHYS2FT |
| eas3ftconvmod | Konversion zwischen verschieden Formulierungen der Fourierkoeffizienten für die Datenstruktur ft | FTREAL2FTFTZH, FTFTZHK2MODPH, FTREAL2MODPH |
| eas3ftdrehefeldmod | Darstellung eines gedrehetes 3D-Feld. | FT_DREHEFLED |
| eas3ftdrehesmod | Drehung zur Strömlinienkoordinatesystem | FT_DREHE_S |
| eas3ftlambda2mod | Berechnugn des zweiten Eigenwertes der Geschwindigkeitsgradient | FT_LAMBDA2 |
| eas3ftverkngrundmod | Binäre Verknüpfungen zwischen Grund- und Stör/Gesamtströmung | FT_VERKN_GRUND |
| eas3scalaropdirmod | Skalere Operationen mit Einbeziehung der Koordinaten aus dem Geometrie-Feld. | WINDOW, FT_SCALEGEO |
| eas3ftadimmod | Änderung der Adimensionalisierungen für daten im ft Formata | FT_ADIM |
| eas3ftcorrelationmod | Berechnung von zwei-Punkten-Korrelationen | FT_CORRELATION |
| eas3geommod | Setzen modifizieren der Geometrieinfo im Kennsatz | GEOM |
Im Parsermodul sind sämtliche Hilfsroutinen zusammengefaßt, die zur Interpretation der eingegebenen Kommandozeile benötigt werden. Dies sind einerseits Routinenen, welche nur in der Hauptschleife von eas3 benutzt werden, um die Eingabe zu lesen und einen eindeutig definierten String bestehend aus Kommandowort und Argumentliste zu generieren, und andererseits handelt es sich um Routinen zum Wandeln der Characterdaten der einzelnen Argumente in das gewünschte interne Format (Integer (get_unit, get_int), Real (get_real), Dateinamensstring (get_string), Indexintervall (get_range), Schlüsselwort (get_key)) oder zum Zählen (counttoken) oder Manipulieren (get_token, tocapital) der Befehlsargumente. Die Funktionalität der in parsermod abgelegten Routinen ist im Kopf des Moduls kurz erklärt. Der genaue Aufruf der Routinen ist den bereits bestehenden Beispielen bzw. der Definition der Subroutinen/Funktionen in pasermod zu entnehmen.
Grundsätzlich ist folgendes Vorgehen zu empfehlen:
Eine Kommandointerpreterroutine (*_cmd) wird vom eas3_dispatcher aufgerufen und bekommt die Argumentliste des jeweiligen Befehls übergeben. Daraufhin kann mit counttoken festgestellt werden, ob die geforderte Argumentanzahl (durch Komma getrennte Token) vorliegen. Anschließend kann schrittweise (mit get_token) immer ein Token von links von der Argumentliste abgeschnitten werden und je nach erwartetem Argumenttyp an die entsprechende Parserroutine zur Umwandlung weitergegeben werden.
Die Fehlerbehandlung erfolgt auf zwei grundsätzlich verschiedene Methoden:
Zunächst muß ein Kommandointerpreter (*_cmd) geschrieben werden und bei einem ausführbaren Programm auch die entsprechende ausführbare Routine (*_prg), welche dann von AUSFUEHREN aufgerufen wird. Die (*_cmd)-Routine eines ausführbaren Programmes muß am Ende den Programmzähler prg%nprg hochsetzen und sicherstellen, daß wirklich nur eine ausführbare Routine innerhalb eines AUSFUEHREN-Blockes vom Benutzer aufgerufen wird. Die Routinen werden zusammen mit einem entsprechenden Fehlerstring (*_msg), der alle notwendigen Fehlermeldungen enthält, und den notwendigen Konstanten- und Typdefinitionen in ein Modul gepackt. Das neue Modul muß dann vom eas3varmod eingebunden werden. Im Hauptprogramm ist der Gesamtfehlerstring um den Modulfehlerstring zu erweitern (verketten der entsprechenden Modulvariable (modulname_msg) mit dem Gesamtfehlerstring). Variablen zur Verwaltung der Befehlsoptionen werden in eas3varmod angelegt, initialisiert (eas3var_init) und in die Ausgaberoutine (eas3var_print) eingetragen.
Anschließend muß das neue Kommandowort im Hauptprogramm in der eas3cmdlist hinzugefügt und der Zähler CMDLISTLEN entsprechend erhöht werden. Der Aufruf für die Kommandointerpreterroutine mit den entsprechenden Argumenten muß in eas3_dispatcher hinzugefügt werden, während der Aufruf des ausführbaren Programmes in der Routine ausfuehren im Hauptprogramm hinzugefügt werden muß. Zum Schluß muß noch das Makefile angepaßt werden.
Wenn das neue Kommando funktioniert sollte natürlich auch die Dokumentation erweitert werden.
Und schon nach wenigen Stunden / Wochen wird man viel Freude an dem neuen Kommando haben! ;-)