Fortran(またはC)コードを解析して、Fortran(またはC)関数の間隔拡張を生成できるツールはありますか?


13

博士論文のケーススタディでは、CHEMKIN-IIの Fortranサブルーチンの間隔拡張が必要です(リンクの謝罪。SandiaNational Laboratoryによって配布されなくなったパッケージで見つけることができる最高のものです)。CHEMKIN-IIは、燃焼化学で使用される化学パッケージです。燃焼で使用される標準パッケージであるため、別のパッケージを使用することはできません(むしろ、実際には使用しないことを好みます)。

必要な間隔拡張を取得するために、社内で開発したDAEPACKというツールを使用しました。32ビットOS(gcc 2.95に対応するlibstdcのバージョン)で必要だったCHEMKIN-IIサブルーチンの必要な間隔拡張を生成できるようになっていた古いバイナリは、数年前に落ちました、そして使用するための途方もない試練になります(私が使用したソフトウェアの他のすべての部分の32ビットバージョンを見つける必要があるため)。このパッケージのソースコードもプロプライエタリですが、もともとMITで開発され、MITで働いているため、(かなりの努力を払って)DAEPACKのソースコードを取得できました。私が持っているソースコードを使用して、64ビットバージョンのLinuxおよびgcc 4.xxに対応するlibstdcのバージョンと互換性のあるDAEPACKのバージョンをコンパイルできました。しかし、このソースコードは古いと思われ、論文を完成するために必要な間隔拡張コードを正常に生成しない実行可能ファイルにコンパイルします。開発者に連絡してソースコードの修正を依頼しましたが、以前に開発者と連絡を取ったところ、彼がソースコードを修正したとしても、ソースコードを修正するには時間がかかることがわかりました。

ここに大きな問題があります。資金を使い果たしたため、卒業するまで6か月が残っています。開発者に頼ってDAEPACKをすばやく修正して、博士論文を正常に完成させることはできません。

次のことを行うパッケージが必要です。

  • 区間拡張、テイラーモデル(区間演算を使用)、およびほぼ任意のFortran 77コードの導関数を生成します。DAEPACKによって解析されない構造は、DOループとIFステートメントだけだと思います。テイラーモデルが必要なので、コードには自動微分(AD)機能も必要です。
  • Fortran 77コードのソースからソースへの変換により、これらの区間拡張とテイラーモデルを生成します(つまり、コンパイラーのようにソースコードを解析して、区間拡張とテイラーモデルを計算するソースコードを生成します)。

ピンチでは、Fortran 77コードの代わりにCコードに上記の2つのことを行うソフトウェアを使用して、すべてを通過させることができf2cます。すべてを通過させることでうまくいくかどうかわからないので、私はこのようにしないことを本当に好みますf2cが、私はかなり必死です。

必死の博士課程の学生を助けることができますか?


いくつかの可能な提案を予想するために、時間の制約を考えると、ここではうまくいかないアプローチがあります:

  • DAEPACKを機能させるために一生懸命努力しています。信じて、試してみた。そして、私は頻繁に開発者を盗聴しています。
  • オブジェクト指向(またはオブジェクト指向のような)アプローチを使用して、区間拡張またはテイラーモデルを計算するツール。CHEMKIN-II(または他の同様に大きなライブラリ)を新しいタイプで再コーディングする時間がありません。大きすぎます。
  • Fortran 77/90またはC以外の言語を使用します。CHEMKIN-IIコードはFortranにあります。を使用してCに変換できf2cます。必要な場合は、TChemと呼ばれるCHEMKIN-IIのSandiaベースのクローンを使用します。私の以前の結果はCHEMKIN-IIを使用しています。私の新しい結果は私の古い結果を再現するはずであり、Canteraはケーススタディとユニットテストに基づいてCHEMKIN-IIが行うことを再現しないことをすでに知っています。さらに、私に先行した大学院生は、CHEMKIN-IIソースコードに黒魔術をかけて、区間演算を特にうまく機能させました。それを他のパッケージに複製するのは難しいでしょう。

すぐに論文のトピックを変更してください。そのばかげた区間演算を取り除いて、理想的には機能するソフトウェアで何か便利なことをしてください。;-D
ジェドブラウン

6
既存の結果を取得し、論文のトピックの解釈にそれらをシューホーンし、素敵な記事を作成し、防衛委員会の素晴らしいスナックを購入します。
マットネプリー

fRRFRR0+RR0+Fab=f[aba+b]
デスブレス

1
区間演算の基本的な概要は、Wikipedia(区間拡張の概念を含む)、およびこのページで言及されている参考文献に記載されています。私が見つけることができるテイラーモデルの最良の紹介はこちらです。自動微分は、通常、テイラーモデルの実装で使用されます。私は、だれかが代わりに数値近似を使用することを聞いたことがなく、見たことがありません。
ジェフオックスベリー

2
@MishaBrukman:ああ、私はそのすべてに穴を開けました。
ジェフオックスベリー

回答:


2

DAEPACK32ビットモードでは機能するが64ビットモードでは機能しないという問題があると仮定すると、これに対処するためのいくつかのアプローチがあります。

DAEPACK64ビットOSで32ビットモードでコンパイルする

別の質問でこれを行う方法を参照してください。これは、それを使い続ける簡単な方法かもしれません。

生成されたコードに64ビットモードで問題があるという問題がある場合、同様の32ビットフラグまたは32ビット環境で生成されたコードをコンパイルします(64ビットOSは適切なライブラリがあれば32ビットコードを実行できますが、その逆ではありません)。

DAEPACK-safe環境全体を再作成する

  1. VirtualBoxなどを使用して、仮想マシンでフル32ビット環境を作成しDAEPACKます。これにより、古いバイナリからでも、この環境で再コンパイルしても、その環境で実行できます。ソフトウェアの正常なバージョンを取得するのに必要なだけ古いオープンソースのOSとコンパイラのリリースを取得できます。

  2. DAEPACK環境を他のソフトウェアに適したホストマシンまたは別の仮想マシンから出力を取得して転送し、作業を続行します。これは、たとえば最新の64ビットOSであり、そこで作業を続けることができます。

    を使用して VirtualBoxの共有フォルダー機能、これが簡単になります。

修正するために他の人を登録する DAEPACK

あなたもあなたもソフトウェアの作者もこれを修正する時間がないと言ったのに気づきましたが、だれも他の人の助けを借りることができないとは言いませんでした!次のオプションを検討してください。

  • 32ビットと64ビットの問題を解決するために、MIT CSの学部生を雇います。たとえば、お金やピザ(および/または法定飲酒年齢の場合はビール)を使って、それらに取り組むように誘うには注意が必要です。または、これを支援するためにアドバイザーがパートタイムの学部生を雇うことができるかどうか尋ねることを検討してください(あなた自身の資金が不足している場合、資金の問題かもしれません)。または、あなたの部署の研究プログラマーからいくつかの好意を求めてください。

  • のオープンソースリリースのロビーDAEPACK。ライセンスステータスが不明なようです、MITには有名なオープンソースライセンスがあり、かなり有名です。オープンライセンスでリリースすると、問題に目を向け、32ビットと64ビットの問題を解決できる場合があります。

    部署によっては、法務、行政などのオフィスが博士号のために残していた6か月よりも長くかかる場合があるため、他の代替手段を追求しながらこれを早期に開始することを検討してください。

幸運を!


この回答を書くのにしばらく時間を費やした後、2012年に6か月の期限で質問を書いていることに気付いたので、この議論はかなり無意味です。ごめんなさい!この場合、あなたが何をしたのか、私はまだ興味があります。
ミシャブルクマン

私は博士号取得中に、あなたが言及した3つのアプローチをすべて試みましたが、成功しませんでした。問題は、IIRCがバグのあるコードを生成することでした。それをコンパイルすること(私はそれの一部を近代化しなければならなかったので、お尻の痛みはあるが)は実際には私の問題の最小でした。DAEPACKは、企業の重要な技術であるため、オープンソースとしてリリースされることはほとんどありません。また、その会社の外の他の人や私の前のアドバイザーの研究室にそれを修正してもらうことは厄介であり、進取の気のあるMIT CS学生がそのありがたい仕事を引き受けたいとは思わない。
ジェフオックスベリー

@GeoffOxberryはそれを聞いて申し訳ありませんが、それは(残念ながら)いわゆる「研究品質」ソフトウェアであまりにも普及しています。それでも学位を維持し、修了したことをおめでとうございます!
ミシャブルクマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.