Real-time data exchange between Python and Fortran

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Yurii
User
Beiträge: 6
Registriert: Dienstag 26. April 2022, 11:15

Hallo Zusammen,

ich möcte einen Echtzeit-Datenaustausch zwischen Fortran und Python realieseren. z.B. habe ich:
Fortran Code:

Code: Alles auswählen

program simple
implicit none
integer:: a, b, c
a = 1
b = 2
c = a + b
write(*,*) 'c = ', c
end program simple
Die berechnete Variable c soll jetzt zu Python geschickt werden:
Python code:

Code: Alles auswählen

# c = received data from Fortran
d = c + 1
# the variable "d" shall be sent to Fortran
Jetzt, die berechnete in Python Variable d soll zu Fortran geschickt werden.

Ich möchte die Verwendung von externen Dokumententen, z.B. .txt File, vermeiden, in dem die Daten aufgeschrieben und abgelesen werden können. Es wäre gut etwas wie TCP-Socket zu verweden. In Python ist die realieseirung von TCP Socket einfach. TCP Socket in Fortran ist aber sehr problematisch. Ich kann leider im Internet kein vernünftiges Beispiel finden. Ich bin Anfenger in Programierung. Gibt es andere optionen diese Aufgabe zu lösen? Wenn Sie ein kleines Beispiel zur Lösung dieses Problems geben könnten, sogabr mit TCP Soket, wäre ich Ihnen dankbar.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auf welcher Plattform findet das denn alle statt? Wenn es Linux ist, oder etwas vergleichbares, dann ist das trivial über pipes lösbar. Alternativ kann man wahrscheinlich das Fortran auch als Bibliothek via ctypes einbinden. Und zu guter letzt die Frage: warum das ganze? Was kann Fortran, das Python mit numpy (unter dem dann wieder auch Fortran werkelt) nicht kann?
Yurii
User
Beiträge: 6
Registriert: Dienstag 26. April 2022, 11:15

__deets__ hat geschrieben: Dienstag 27. September 2022, 17:04 Auf welcher Plattform findet das denn alle statt? Wenn es Linux ist, oder etwas vergleichbares, dann ist das trivial über pipes lösbar. Alternativ kann man wahrscheinlich das Fortran auch als Bibliothek via ctypes einbinden. Und zu guter letzt die Frage: warum das ganze? Was kann Fortran, das Python mit numpy (unter dem dann wieder auch Fortran werkelt) nicht kann?
Ich benutze Windows 10. Die Verwendung von Fortran kann ich nicht vermeiden. Ich modeliere das Tragverhalten von Baustrukturen in Abaqus, und zwar , Ich benutze die Sabroutines, die in Fortran geschrieben sind. Wie schon gesagt, ich bin anfenger in Programierung. Die Programierung ist nicht mein Hauptbereich. Wenn ich die Lösung für dieses einfache Beispiel hätte, konnte ich die zu meinem konkreten Problem anpassen und erweitern.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Aus Abaqus kann man Fortran-Routinen ansprechen. Aber was hat das dann mit Python zu tun?
Was willst Du mit Python machen?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Abaqus hat augenscheinlich auch eine Python Anbindung. Damit lassen sich die Daten doch wahrscheinlich abgreifen. http://130.149.89.49:2080/v6.14/books/c ... =pt01.html
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Yurii hat geschrieben: Dienstag 27. September 2022, 16:50 Gibt es andere optionen diese Aufgabe zu lösen? Wenn Sie ein kleines Beispiel zur Lösung dieses Problems geben könnten, sogabr mit TCP Soket, wäre ich Ihnen dankbar.
Ich würde sagen, von einer der genannten Bedingungen – Windows, keine Dateien, Sockets zu kompliziert – musst du dich wahrscheinlich verabschieden. Die Variante mit den Sockets hattest du ja etwas relativiert, aber die Chance, dass dir in einem Python-Forum jemand erklärt, wie korrekte Socket-Programmierung mit Fortran unter Windows geht, ist vermutlich geringer als anderswo. Persönlich würde ich in deinem wohl Fall zu den Dateien greifen. Schön ist das sicher nicht, aber vermutlich der geringste Aufwand und konzeptuell auch für Anfänger gut greifbar; Socket-Programmierung oder das Einarbeiten in die IPC-Interfaces von Windows und wie man diese aus Fortran und Python heraus verwendet vielleicht eher nicht.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Fuer mich klingt das vor allem erstmal nach einem X-Y-Problem. Warum willst du diese Integration? Wenn du mal ein bisschen weiter ausholst, kann man da auch mehr zu sagen, was da sinnvoll sein koennte.
Yurii
User
Beiträge: 6
Registriert: Dienstag 26. April 2022, 11:15

__deets__ hat geschrieben: Dienstag 27. September 2022, 18:22 Abaqus hat augenscheinlich auch eine Python Anbindung. Damit lassen sich die Daten doch wahrscheinlich abgreifen. http://130.149.89.49:2080/v6.14/books/c ... =pt01.html
Python script wird in Abaqus für "pre and post processing" verwendet. Python Script hatt keinen Zugrif auf die Änderung der Parameter während der Analyse. Das kann man nur mit Subroutine machen, die in Fortran geschrieben ist.
Yurii
User
Beiträge: 6
Registriert: Dienstag 26. April 2022, 11:15

__deets__ hat geschrieben: Dienstag 27. September 2022, 20:38 Fuer mich klingt das vor allem erstmal nach einem X-Y-Problem. Warum willst du diese Integration? Wenn du mal ein bisschen weiter ausholst, kann man da auch mehr zu sagen, was da sinnvoll sein koennte.
es ist kein X-Y Problem. Es ist eine klare Aufgabe mit definiertn Randbedingungen:
-Real-time Datenaustausch zwischen Python und Fortran.
- keine Anwendung von dritten files, z.B. fite.txt, in dem die Daten abgelesen und aufgeschrieben werden können.
- Als mögliche lösung ist TCP socket.
- Als Beispiel soll die oben beschiebene Aufgabe gelöst werden.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Halte ich mit der gewaehlten Umgebung fuer vollkommenen Schwachsinn, aber so ist's halt manchmal in Ausbildung und Beruf. Kannst du ja nix fuer.

Leider ist das ganze sehr kompliziert. Und ich bezweifele, dass dir hier einer helfen kann. Denn das Problem ist nicht Python. Das kann sockets, easy peasy. Sondern das Intel Fortran in Abaqus. Ich wuerde mich an eine Abaqus-Community wenden damit. Denn wie man darin die win32-API benutzt, wird hier wohl eher keiner wissen. Ich jedenfalls nicht.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Yurii: Du hast immer noch nicht beschrieben, was die eigentlichen Rahmenbedingungen sind. Du hast Abacus, das soll Fortran-Subroutines aufrufen, aber wie spielt jetzt hier Python rein? Soll Fortran Python aufrufen und bestimmte Berechnungen in Python erfolgen?
Wer ist hier Chef und wer ist Untergebener?
Abacus gibt Kommandos, die in Python über Fortran ausgeführt werden sollen, oder umgekehrt, Python steuert irgendwie Abacus über Fortran-Subroutines?
nbehrnd
User
Beiträge: 5
Registriert: Mittwoch 5. Oktober 2022, 17:39

@Yurii Auch wenn das Mehr der Diskussionen sich um Fortran per se widmen, wird auf fortran-lang.discourse.group immer wieder der Austausch zwischen Fortran und Python angesprochen (I/O von Matrizen, etc.) Deshalb könnte sich dort Hilfe finden lassen. Beispielhaft ein paar Beiträge aus der Vergangenheit:

https://fortran-lang.discourse.group/t/ ... versa/2844
https://fortran-lang.discourse.group/t/ ... ortran/162
https://fortran-lang.discourse.group/t/ ... ython/1280
Antworten