Apakah ada alat di luar sana yang dapat menghasilkan ekstensi interval fungsi Fortran (atau C) dengan mem-parsing kode Fortran (atau C)?

13

Studi kasus dalam tesis PhD saya mengharuskan saya memiliki ekstensi interval subrutin Fortran di CHEMKIN-II (permintaan maaf untuk tautan tersebut; ini adalah yang terbaik yang bisa saya temukan untuk paket yang tidak lagi didistribusikan oleh Sandia National Laboratory). CHEMKIN-II adalah paket kimia yang digunakan dalam kimia pembakaran; karena ini adalah paket standar yang digunakan dalam pembakaran, saya tidak bisa (atau lebih tepatnya, akan lebih suka untuk tidak) menggunakan paket berbeda di luar sana.

Untuk mendapatkan ekstensi interval yang diperlukan, saya telah menggunakan alat yang dikembangkan sendiri bernama DAEPACK. Binari-binari lama yang saya gunakan untuk dapat menghasilkan ekstensi interval yang diperlukan dari subrutin CHEMKIN-II yang saya butuhkan pada OS 32-bit (dengan versi libstdc yang sesuai dengan gcc 2.95) beberapa tahun yang lalu, tetapi sejak itu rontok. tanggal, dan akan menjadi cobaan yang luar biasa untuk digunakan (karena saya harus menemukan versi 32-bit dari setiap bagian dari perangkat lunak yang saya gunakan). Kode sumber untuk paket ini juga merupakan hak milik, tetapi karena awalnya dikembangkan di MIT, dan saya bekerja di MIT, saya dapat (setelah banyak upaya) mendapatkan kode sumber untuk DAEPACK. Menggunakan kode sumber yang saya miliki, saya dapat mengkompilasi versi DAEPACK yang kompatibel dengan Linux versi 64-bit dan versi libstdc yang sesuai dengan gcc 4.xx Namun, kode sumber ini, yang saya duga sudah tua, mengkompilasi menjadi executable yang tidak berhasil menghasilkan kode ekstensi interval yang saya butuhkan untuk menyelesaikan tesis saya. Saya telah menghubungi pengembang dalam upaya untuk mendapatkan bantuannya dalam memperbaiki kode sumber, tetapi dari kontak sebelumnya dengan pengembang, saya tahu bahwa akan butuh waktu baginya untuk memperbaiki kode sumber, jika ia melakukannya sama sekali.

Inilah masalah besar: Saya memiliki 6 bulan tersisa sampai saya harus lulus karena saya kehabisan dana. Saya tidak dapat mengandalkan pengembang untuk memperbaiki DAEPACK dengan cukup cepat sehingga saya dapat dengan sukses menyelesaikan tesis PhD saya, di situlah kalian masuk.

Saya memerlukan paket yang melakukan hal berikut:

  • Menghasilkan ekstensi interval, model Taylor (menggunakan aritmatika interval), dan turunan dari kode Fortran 77 yang hampir sewenang-wenang; Saya pikir satu-satunya struktur yang tidak diuraikan oleh DAEPACK adalah DOloop dan IFpernyataan. Karena saya memerlukan model Taylor, kode juga harus memiliki kemampuan diferensiasi otomatis (AD).
  • Menghasilkan ekstensi interval ini dan model Taylor dengan terjemahan sumber-ke-sumber dari kode Fortran 77 (yaitu, mem-parsing kode sumber seperti kompiler untuk menghasilkan kode sumber yang menghitung ekstensi interval dan model Taylor).

Dalam keadaan darurat, saya dapat menggunakan perangkat lunak yang melakukan dua hal di atas untuk kode C alih-alih kode Fortran 77, dan kemudian melewati semuanya f2c. Saya benar-benar memilih untuk tidak melakukannya dengan cara ini, karena saya tidak tahu apakah melewati semua itu f2cakan berhasil atau tidak , tetapi saya sangat putus asa.

Bisakah kalian membantu mahasiswa PhD yang putus asa?


Untuk mengantisipasi beberapa saran yang mungkin, berikut adalah pendekatan yang TIDAK akan bekerja untuk saya, mengingat batasan waktu:

  • Berusaha lebih keras agar DAEPACK bekerja; percayalah, saya sudah mencoba. Dan saya sering mengganggu pengembang.
  • Alat yang menghitung ekstensi interval atau model Taylor menggunakan pendekatan berorientasi objek (atau berorientasi objek). Saya tidak punya waktu untuk recode CHEMKIN-II (atau perpustakaan lain yang serupa besar) dengan tipe baru; ini terlalu besar.
  • Menggunakan bahasa apa pun selain Fortran 77/90 atau C. Kode CHEMKIN-II ada di Fortran. Saya dapat mengonversinya menjadi C menggunakan f2c, atau jika perlu, menggunakan klon CHEMKIN-II berbasis Sandia yang disebut TChem. Hasil lama saya menggunakan CHEMKIN-II; hasil baru saya harus meniru hasil lama saya, dan saya sudah tahu bahwa Cantera tidak akan meniru apa yang dilakukan CHEMKIN-II berdasarkan studi kasus dan pengujian unit. Selanjutnya, mahasiswa pascasarjana yang mendahului saya melakukan beberapa ilmu hitam ke kode sumber CHEMKIN-II untuk mendapatkan aritmatika interval untuk bekerja dengan sangat baik. Akan sulit bagi saya untuk meniru itu dalam paket lain.
Geoff Oxberry
sumber
Ganti topik tesis Anda segera. Singkirkan aritmatika interval konyol itu dan lakukan sesuatu yang bermanfaat, idealnya dengan perangkat lunak yang berfungsi. ;-D
Jed Brown
6
Mengambil hasil yang sudah ada, usir mereka ke dalam interpretasi topik tesis Anda, lakukan penulisan yang bagus, dan beli makanan ringan yang enak bagi komite pertahanan Anda.
Matt Knepley
f:RRF:(R,R0+)((R,R0+)F(Sebuah,b)=f([Sebuah-b,Sebuah+b])
Deathbreath
1
Ikhtisar dasar aritmatika interval dapat ditemukan di Wikipedia (yang mencakup konsep ekstensi interval), dan dalam referensi yang disebutkan di halaman ini . Pengantar terbaik untuk model Taylor yang bisa saya temukan ada di sini . Diferensiasi otomatis biasanya digunakan dalam implementasi model Taylor; Saya belum pernah mendengar atau melihat orang yang menggunakan pendekatan numerik.
Geoff Oxberry
2
@MishaBrukman: Oh, saya hanya mengerjai semua itu.
Geoff Oxberry

Jawaban:

2

Dengan asumsi bahwa masalahnya adalah yang DAEPACKbekerja dalam mode 32-bit tetapi tidak dalam mode 64-bit, berikut adalah beberapa pendekatan untuk mengatasinya.

Kompilasi DAEPACKdalam mode 32-bit pada OS 64-bit

Lihat bagaimana melakukan ini di pertanyaan lain . Ini mungkin cara mudah untuk terus bekerja dengannya.

Jika masalahnya adalah kode yang dihasilkan mengalami masalah dalam mode 64-bit, kompilasi kode yang dihasilkan dengan flag 32-bit yang serupa atau dalam lingkungan 32-bit (OS 64-bit dapat menjalankan kode 32-bit yang diberikan pustaka yang sesuai, tetapi bukan sebaliknya ).

Menciptakan seluruh DAEPACKlingkungan yang aman

  1. Buat lingkungan 32-bit penuh di mesin virtual menggunakan, misalnya, VirtualBox , sehingga DAEPACKsenang berjalan di dalamnya, apakah dari binari lama, atau dikompilasi ulang di lingkungan ini. Anda bisa mendapatkan rilis OS open-source dan kompiler setua yang Anda butuhkan untuk mendapatkan versi perangkat lunak yang berfungsi.

  2. Ambil output dari DAEPACKdan transfer ke mesin host atau mesin virtual terpisah di mana lingkungan sesuai untuk perangkat lunak lain dan terus bekerja. Ini bisa menjadi OS 64-bit yang lebih baru, misalnya, dan terus bekerja di sana.

    Menggunakan fitur folder bersama di VirtualBox seharusnya memudahkan Anda.

Mintalah orang lain untuk membantu memperbaikinya DAEPACK

Saya perhatikan bahwa Anda mengatakan bahwa Anda maupun pembuat perangkat lunak tidak memiliki waktu untuk memperbaikinya, tetapi tidak ada yang mengatakan Anda tidak dapat meminta bantuan orang lain! Pertimbangkan opsi-opsi ini:

  • Pekerjakan beberapa mahasiswa MIT CS sarjana untuk membantu memperbaiki masalah 32-bit vs. 64-bit. Perhatikan bahwa untuk memikat mereka agar mengerjakannya, Anda mungkin harus menggantinya, baik dengan uang atau pizza (dan / atau bir, jika sudah cukup umur untuk minum), misalnya. Atau pertimbangkan untuk bertanya apakah penasihat Anda dapat mempekerjakan beberapa mahasiswa paruh waktu untuk membantu dalam hal ini (mungkin masalah dengan pendanaan, jika dana Anda sendiri hampir habis). Atau minta bantuan dari pemrogram riset di departemen Anda.

  • Lobi untuk rilis sumber terbuka DAEPACK. Sepertinya status perizinannya tidak jelas , tetapi perhatikan bahwa MIT memiliki lisensi sumber terbuka eponymous yang cukup terkenal; melepaskannya di bawah lisensi terbuka dapat membantu mendapatkan lebih banyak perhatian pada masalah dan membantu memperbaiki masalah 32-bit vs 64-bit.

    Perhatikan bahwa tergantung pada departemen, hukum, administrasi, dll. Kantor Anda mungkin memerlukan waktu lebih lama dari 6 bulan yang tersisa untuk Ph.D., jadi pertimbangkan untuk memulai ini lebih awal, sambil mencari alternatif lain.

Semoga berhasil!

Misha Brukman
sumber
Setelah menghabiskan beberapa saat menulis jawaban ini, saya baru menyadari bahwa Anda menulis pertanyaan Anda pada 2012 dengan tenggat waktu 6 bulan, jadi diskusi ini agak diperdebatkan. Maaf soal itu! Saya masih penasaran apa yang akhirnya Anda lakukan dalam kasus ini.
Misha Brukman
Selama PhD, saya mencoba ketiga pendekatan yang Anda sebutkan tanpa hasil. Masalahnya, IIRC, adalah bahwa ia akan menghasilkan kode buggy; mengkompilasinya (walaupun terasa sakit di pantat, karena saya harus memodernisasi bagiannya) sebenarnya adalah masalah saya yang paling kecil. DAEPACK sepertinya tidak akan dirilis open source, karena itu adalah teknologi utama perusahaan. Juga sulit untuk membuat orang lain keluar dari perusahaan itu dan laboratorium mantan penasihat saya untuk memperbaikinya, dan saya ragu para mahasiswa MIT CS yang giat ingin mengambil pekerjaan tanpa pamrih itu.
Geoff Oxberry
@ GeoffOxberry menyesal mendengarnya, tapi itu (sayangnya) terlalu lazim dalam perangkat lunak yang disebut "kualitas penelitian". Meskipun demikian, selamat atas ketekunan dan menyelesaikan gelar Anda!
Misha Brukman