Fortran: Fortran und Tcl
<< zur Fortran-Startseite | |
< OpenMP | Fortran und C > |
Tcl/Tk kann im Zusammenhang mit Fortran zwecks Erstellung einer Tk-Benutzeroberfläche für Fortran-Programme interessant sein. Die zeitkritischen oder mathematisch orientierten Programmteile werden mittels Fortran-Code realisiert. Der Programmcode für die Benutzerschnittstelle wird mittels Tcl/Tk-Skript zur Verfügung gestellt.
Beispiel
BearbeitenPrinzipskizze
BearbeitenTcl/Tk-Code
Bearbeiten#!/usr/bin/wish
wm title . Sinus ;# Fenstertitel
entry .e1 ;# Eingabefeld
button .b1 -text "Hier drücken" -command fcall ;# Schaltfläche
label .l1 -bg green ;# Textfeld
pack .e1 -padx 10 -pady 5 ;# Widgets packen
pack .b1 -padx 10 -pady 5
pack .l1 -padx 10 -pady 5
proc fcall { } { ;# Kommunikation mit Fortran, Ergebnis schreiben
set f [open "|./a.out" r+] ;# a.out ist das kompilierte und gelinkte Fortran-Programm
set val [.e1 get]
puts $f $val
flush $f
gets $f wert
close $f
.l1 config -text $wert
}
Fortran-Code
BearbeitenFortran 90/95-Code (free source form) |
program bsp implicit none real :: val, sin read (*,*) val write(*,'(A12,F6.3)') "Ergebnis = ", sin(val) end |
Programmausführung
BearbeitenDas Fortran-Programm muss selbstverständlich vorab einmal kompiliert und gelinkt werden. Im Beispielsfall muss die exekutierbare Ausgabedatei a.out heißen. Unter Linux wird das Tcl-Skript vor dem ersten Start als ausführbar (-> mittels chmod-Befehl) markiert. Der Programmaufruf erfolgt über das Tcl-Skript, das wie ein normales Programm durch Eingabe des Programmnamens gestartet wird.
Ergebnis
BearbeitenAlternativen
BearbeitenTcl/Tk bietet eine Schnittstelle zur Programmiersprache C (tcl.h, tk.h, libtcl*.so, libtk*.so
). Mit dem im nächsten Kapitel behandelten Fortran-C-Binding kann auf diese C-Funktionen zugegriffen werden. Die Ftcl-Bibliothek nutzt diesen Mechanismus.
Weblinks
Bearbeiten- Tcl/Tk-Homepage
- Programming:Tcl (englischsprachiges Wikibook)
- Ftcl: Using Tcl in Fortran programs and vice versa
<< zur Fortran-Startseite | |
< OpenMP | Fortran und C > |