Saya tahu, dan telah menggunakan f2py2e untuk membungkus beberapa kode Fortran 77 lama, tetapi pemahaman saya adalah bahwa itu tidak bekerja dengan kode Fortran 95 yang lebih baru. Saya telah meneliti apa yang harus saya gunakan, dan telah menemukan fwrap dan G3 f2py, yang keduanya tidak memberikan penjelasan tentang keadaan mereka saat ini, atau bagaimana menggunakannya (di luar penggunaan dasar).
Saya juga telah melihat bahwa versi f2py memiliki opsi untuk menggunakan f2py generasi ketiga, tetapi dikomentari sebagai non-fungsional. Mengingat ini, saya tidak tahu proyek mana yang harus saya gunakan untuk proyek uni. Mana yang harus saya gunakan untuk kode baru?
PS Ini pada dasarnya pertanyaan yang sama dengan /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python , disarankan bahwa bertanya di sini mungkin memberikan jawaban yang lebih baik .
Jawaban:
Anda dapat menggunakan modul ctypes builtin Python seperti yang dijelaskan di fortran90.org . Ini cukup lurus ke depan dan tidak memerlukan dependensi eksternal. Juga, helper tipe arg ndpointer sangat berguna.
sumber
Saya pribadi menggunakan f2py untuk ini. Namun, Fortran yang saya tulis untuk f2py sebenarnya bukan Fortran modern, melainkan F90 bentuk bebas dengan modul. Saya tidak menggunakan bentuk asumsi atau tipe khusus. Metode ini masih berfungsi dengan baik untuk saya.
Ada sumber daya yang ingin saya bagikan mengenai penggunaan C sebagai bagian dari pembungkus. Sisa halaman ini juga direkomendasikan.
sumber
cython
perintah, dan mengurangi tumpang tindih antara mengubah kode fortran atau kode python saya dan dengan cepat membuat semuanya berfungsi.Dokumentasi f2py benar-benar tidak terlalu bagus. Saya sedang dalam proses memindahkan proyek saya sendiri dari f2py ke Cython . Meskipun Cython dapat digunakan untuk membungkus kode C, saya menemukan bahwa itu sangat berguna untuk membuat kode kinerja tinggi baru. Jika maksud Anda adalah untuk menulis kode Fortran baru, bungkus, dan panggil dengan Python, saya sarankan Anda menggunakan Cython saja. Dengan begitu Anda dapat menulis kode Python, dan jika ada hambatan kinerja, Anda mentransfernya ke Cython dengan modifikasi kecil.
sumber
f90wrap dibangun di atas f2py dan secara otomatis menghasilkan pembungkus Python untuk basis kode Fortran yang mendasarinya, termasuk akses ke jenis turunan. Seperangkat contoh sederhana menunjukkan cara kerjanya.
sumber
Anda bisa menggunakan FortWrap untuk membuat Anda setengah jalan di sana. Ini akan membuat antarmuka C ++ ke kode Fortran Anda, yang kemudian dapat dibungkus dengan SWIG untuk mendapatkan antarmuka Python. Kami melakukan ini pada basis kode Fortran yang agak besar dan bekerja cukup baik (pada kenyataannya, FortWrap dikembangkan oleh anggota tim kami untuk tujuan yang tepat ini).
sumber
fwrap
secara khusus menargetkan Fortran90 / 95 dan menggunakan beberapa tumpukan perangkat lunak yang sama denganf2py
.sumber
f2py
di F90. Ini juga memiliki penghalang masuk yang sangat rendah. Saya senang telah menemukannya.f2py
mendukung fortran modern (array berbentuk asumsi dan sebagainya), lihat contoh skripJuga, untuk percobaan dengan kode fortran saya akan merekomendasikan IPython magic , yang mudah dipasang dan sangat nyaman (ini bergantung pada f2py juga).
sumber
Berikut adalah daftar pembungkus Fortran untuk Python:
https://github.com/mgaitan/fortran_magic/issues/4
sumber