Gibt es ein Tool, das Intervall-Erweiterungen von Fortran (oder C) -Funktionen durch Parsen von Fortran (oder C) -Code generieren kann?

13

Fallstudien in meiner Doktorarbeit setzen voraus, dass ich in CHEMKIN-II Intervall-Erweiterungen von Fortran-Subroutinen habe (entschuldigt den Link; es ist das Beste, was ich für ein Paket finden konnte, das nicht mehr vom Sandia National Laboratory vertrieben wird). CHEMKIN-II ist ein Chemiepaket, das in der Verbrennungschemie verwendet wird. Da es sich um das Standardpaket handelt, das bei der Verbrennung verwendet wird, kann (oder möchte ich eigentlich lieber nicht) ein anderes Paket verwenden.

Um die erforderlichen Intervallverlängerungen zu erhalten, habe ich ein eigens entwickeltes Tool namens DAEPACK verwendet. Die alten Binärdateien, mit denen ich vor ein paar Jahren die erforderlichen Intervallerweiterungen der CHEMKIN-II-Subroutinen auf einem 32-Bit-Betriebssystem (mit einer Version von libstdc entsprechend gcc 2.95) generieren konnte, sind jedoch seitdem ausgefallen Dies wäre eine enorme Tortur (da ich 32-Bit-Versionen jeder anderen Software finden müsste, die ich verwendet habe). Der Quellcode für dieses Paket ist ebenfalls proprietär, aber da es ursprünglich am MIT entwickelt wurde und ich am MIT arbeite, konnte ich (nach viel Aufwand) den Quellcode für DAEPACK erhalten. Mit dem Quellcode, den ich habe, konnte ich eine DAEPACK-Version kompilieren, die mit 64-Bit-Versionen von Linux und Versionen von libstdc kompatibel ist, die gcc 4.xx entsprechen. Kompiliert eine ausführbare Datei, die den Intervall-Erweiterungscode, den ich für die Fertigstellung meiner Diplomarbeit benötige, nicht erfolgreich generiert. Ich habe den Entwickler kontaktiert, um Hilfe bei der Korrektur des Quellcodes zu erhalten, aber aufgrund des vorherigen Kontakts mit dem Entwickler weiß ich, dass es einige Zeit dauern wird, bis er den Quellcode repariert, wenn er dies überhaupt tut.

Hier ist das große Problem: Ich habe noch 6 Monate Zeit, bis ich meinen Abschluss machen muss, weil mir die Finanzierung ausgeht. Ich kann mich nicht darauf verlassen, dass der Entwickler DAEPACK so schnell repariert, dass ich meine Doktorarbeit erfolgreich abschließen kann.

Ich brauche ein Paket, das folgendes leistet:

  • Generiert Intervallerweiterungen, Taylor-Modelle (unter Verwendung von Intervallarithmetik) und Ableitungen von nahezu beliebigem Fortran 77-Code. Ich denke, die einzigen Strukturen, die nicht von DAEPACK analysiert werden, sind DOSchleifen und IFAnweisungen. Da ich Taylor-Modelle benötige, muss der Code auch über die Fähigkeit zur automatischen Differenzierung (AD) verfügen.
  • Generiert diese Intervallerweiterungen und Taylor-Modelle durch Übersetzung des Fortran 77-Codes von Quelle zu Quelle (dh, der Quellcode wird wie ein Compiler analysiert, um den Quellcode zu generieren, der die Intervallerweiterungen und Taylor-Modelle berechnet).

Zur Not kann ich Software verwenden, die die beiden oben genannten Schritte für C-Code anstelle von Fortran 77-Code ausführt und dann alles durchläuft f2c. Ich würde es wirklich vorziehen, es nicht so zu machen, weil ich keine Ahnung habe, ob f2ces überhaupt funktionieren wird oder nicht , aber ich bin ziemlich verzweifelt.

Könnt ihr einem verzweifelten Doktoranden helfen?


Um einige mögliche Vorschläge zu antizipieren, sind hier Ansätze, die bei mir aus Zeitgründen NICHT funktionieren:

  • Es ist schwieriger, DAEPACK zum Laufen zu bringen. Glaub mir, ich habe es versucht. Und ich nerve den Entwickler häufig.
  • Werkzeuge, die Intervallverlängerungen oder Taylor-Modelle mit objektorientierten (oder objektorientierten) Ansätzen berechnen. Ich habe keine Zeit, CHEMKIN-II (oder eine andere ähnlich große Bibliothek) mit neuen Typen neu zu codieren. es ist zu groß.
  • Verwenden einer anderen Sprache als Fortran 77/90 oder C. Der CHEMKIN-II-Code befindet sich in Fortran. Ich kann es in C konvertieren, indem ich f2ceinen Sandia-basierten Klon von CHEMKIN-II namens TChem verwende oder wenn nötig benutze. Meine alten Ergebnisse verwenden CHEMKIN-II; Meine neuen Ergebnisse sollten meine alten Ergebnisse replizieren, und ich weiß bereits, dass Cantera nicht repliziert, was CHEMKIN-II basierend auf Fallstudien und Unit-Tests tut. Außerdem hat der Doktorand, der mir vorausgegangen war, den CHEMKIN-II-Quellcode mit schwarzer Magie bearbeitet, damit die Intervallarithmetik besonders gut funktioniert. Es wäre schwierig für mich, dies in einem anderen Paket zu wiederholen.
Geoff Oxberry
quelle
Ändern Sie sofort das Thema Ihrer Abschlussarbeit. Befreien Sie sich von dieser albernen Intervallarithmetik und tun Sie etwas Nützliches, idealerweise mit funktionierender Software. ;-D
Jed Brown
6
Nehmen Sie Ihre vorhandenen Ergebnisse in die Interpretation Ihres Dissertationsthemas, schreiben Sie sie gut und kaufen Sie Ihrem Verteidigungsausschuss tolle Snacks.
Matt Knepley
@Geoff Oxberry: Hilf mir zu verstehen, was du mit Intervallverlängerung meinst. erweitert auf F : ( R , Rf:RRF:(R,R0+)((R,R0+)F(ein,b)=f([ein-b,ein+b])
Deathbreath
1
Grundlegende Übersichten zur Intervallarithmetik finden Sie auf Wikipedia (einschließlich des Konzepts der Intervallerweiterung) und in den auf dieser Seite genannten Referenzen . Die beste Einführung in Taylor-Modelle, die ich finden konnte, ist hier . Die automatische Differenzierung wird normalerweise bei der Implementierung von Taylor-Modellen verwendet. Ich habe noch nie von jemandem gehört oder gesehen, der stattdessen numerische Näherungen verwendet.
Geoff Oxberry
2
@ MischaBrukman: Oh, ich habe mich nur darum gekümmert.
Geoff Oxberry

Antworten:

2

Angenommen, das Problem liegt darin, dass es DAEPACKim 32-Bit-Modus, aber nicht im 64-Bit-Modus funktioniert. Hier einige Lösungsansätze.

Kompilieren Sie DAEPACKim 32-Bit-Modus unter einem 64-Bit-Betriebssystem

Sehen Sie in einer anderen Frage nach, wie das geht . Dies kann ein einfacher Weg sein, um weiter damit zu arbeiten.

Wenn das Problem darin besteht, dass der generierte Code Probleme im 64-Bit-Modus aufweist, kompilieren Sie den generierten Code mit ähnlichen 32-Bit-Flags oder in einer 32-Bit-Umgebung (64-Bit-Betriebssystem kann bei entsprechenden Bibliotheken 32-Bit-Code ausführen, aber) nicht umgekehrt ).

Erstellen Sie eine DAEPACKsichere Umgebung

  1. Erstellen Sie eine vollständige 32-Bit-Umgebung in einer virtuellen Maschine, indem Sie z. B. VirtualBox verwenden , damit Sie diese DAEPACKproblemlos ausführen können, sei es aus alten Binärdateien oder in dieser Umgebung neu kompiliert. Sie können eine Version eines Open-Source-Betriebssystems und eines Compilers erhalten, die so alt sind, wie Sie für eine funktionierende Version der Software benötigen.

  2. Nehmen Sie die Ausgabe von DAEPACKund übertragen Sie sie auf den Hostcomputer oder einen separaten virtuellen Computer, in dem die Umgebung für die andere Software geeignet ist, und arbeiten Sie weiter. Dies kann beispielsweise ein neueres 64-Bit-Betriebssystem sein und dort weiterarbeiten.

    Verwenden der freigegebenen Ordner in VirtualBox sollte dies für Sie einfacher machen.

Tragen Sie andere ein, um das Problem zu beheben DAEPACK

Ich habe bemerkt, dass Sie gesagt haben, dass weder Sie noch der Software-Autor die Zeit haben, dies zu beheben, aber niemand hat gesagt, dass Sie die Hilfe eines anderen nicht in Anspruch nehmen können! Betrachten Sie diese Optionen:

  • Stellen Sie einige Studenten des MIT CS ein, um die 32-Bit- oder 64-Bit-Probleme zu beheben. Beachten Sie, dass Sie sie möglicherweise mit Geld oder Pizza (und / oder Bier, wenn sie das gesetzliche Mindestalter für das Trinken erreicht haben) entschädigen müssen, um daran zu arbeiten. Oder überlegen Sie, ob Ihr Berater einige Teilzeitstudenten einstellen kann, um dies zu unterstützen (dies kann ein Problem bei der Finanzierung sein, wenn Ihre eigenen Mittel knapp werden). Oder fordern Sie einige Gefälligkeiten von Forschungsprogrammierern in Ihrer Abteilung an.

  • Lobby für eine Open-Source-Veröffentlichung von DAEPACK. Es sieht so aus, als ob sein Lizenzstatus unklar ist. Beachten Sie jedoch, dass MIT eine gleichnamige Open-Source-Lizenz hat , die ziemlich bekannt ist. Die Veröffentlichung unter einer offenen Lizenz kann dazu beitragen, das Problem besser zu erkennen und die 32-Bit- und die 64-Bit-Probleme zu beheben.

    Beachten Sie, dass je nach Abteilung, Recht, Verwaltung usw. die Büros länger dauern können als die 6 Monate, die Sie für Ihre Promotion übrig haben. Beginnen Sie also frühzeitig, und suchen Sie nach anderen Alternativen.

Viel Glück!

Misha Brukman
quelle
Nachdem ich einige Zeit mit dem Verfassen dieser Antwort verbracht hatte, wurde mir gerade klar, dass Sie Ihre Frage 2012 mit einer Frist von 6 Monaten geschrieben haben, sodass diese Diskussion eher umstritten ist. Das tut mir leid! Ich bin immer noch gespannt, was Sie in diesem Fall gemacht haben.
Misha Brukman
Während meiner Promotion habe ich alle drei von Ihnen genannten Ansätze erfolglos ausprobiert. Das Problem, IIRC, war, dass es fehlerhaften Code erzeugen würde; Es zu kompilieren (obwohl es mir ein Dorn im Auge war, weil ich Teile davon modernisieren musste) war eigentlich das geringste meiner Probleme. Es ist unwahrscheinlich, dass DAEPACK Open Source veröffentlicht wird, da dies die Schlüsseltechnologie eines Unternehmens ist. Es ist auch heikel, andere Leute außerhalb dieses Unternehmens und meines ehemaligen Beraterlabors dazu zu bringen, das Problem zu beheben, und ich bezweifle, dass unternehmungslustige MIT CS-Studenten diesen undankbaren Job annehmen möchten.
Geoff Oxberry
@GeoffOxberry sorry, das zu hören, aber das ist (leider) allzu weit verbreitet in der sogenannten "Research-Quality" -Software. Herzlichen Glückwunsch zum Erhalt und zum Abschluss Ihres Studiums!
Misha Brukman