Apakah ada perpustakaan ilmiah open-source yang menggunakan Fortran modern dengan OOP?

14

Saya telah menghabiskan beberapa bulan terakhir pada pengkodean program Fortran untuk memecahkan sistem PDE tertentu (menggambarkan aliran / pembakaran fluida). Saya mencoba menggunakan Fortran standar terbaru dan kapabilitas baru OOP yang dimiliki Fortran. Saya bekerja sendiri dan tidak memiliki guru Fortran di sebelah saya untuk mengajukan pertanyaan, jadi cara nataral untuk belajar bagi saya adalah dengan melihat perpustakaan / pemecah lain yang menggunakan Fortran modern.

Sayangnya semua perpustakaan Fortran di luar sana tampaknya ditulis dalam Fortran yang cukup tua, Fortran90. Karena itu saya harus memikirkan sendiri desain kelas dan interaksi. Dan saya sama sekali tidak yakin bahwa saya melakukannya dengan benar, terutama jika seseorang melihat dari perspektif dalm. Tapi mungkin saya telah melewatkan sesuatu dan ada paket ilmiah modern yang ditulis jika Fortran dan menggunakan OOP?

Ada banyak pustaka C ++ yang bagus untuk dipelajari (OpenFOAM, deal.II, dan lainnya) dan juga pustaka Python. Bahasa-bahasa tersebut memiliki komunitas yang lebih besar secara umum juga. Apakah mungkin lebih baik meninggalkan Fortran dan beralih bahasa jika saya ingin belajar dengan contoh?

tiam
sumber
Jack, sepertinya komentar Anda terlalu besar: "(Sisa komentar ini adalah untuk memenuhi persyaratan panjang.)". Itu membangkitkan harapan dalam diri saya, jadi harap edit sehingga semua orang dapat membacanya: D.
tiam
2
Maaf, komentar saya menyesatkan, karena saya menjawab pertanyaan terakhir Anda. Maksud saya, jika Anda ingin belajar OOP modern dengan contoh dari pustaka lengkap, C ++ adalah cara yang harus dilakukan. Maaf; Saya tidak mengetahui adanya perpustakaan Fortran modern open source terbaik yang berkembang biak.
Jack Poulson
6
Saya akan mengingatkan bahwa C ++ sudah agak inkarnasi memutar dari orientasi objek, dan banyak perpustakaan lebih lanjut menyalahgunakannya (berlaku untuk bahasa apa pun). Saya setuju bahwa penting untuk melihat melampaui Fortran, tetapi penting juga untuk melihat melampaui C ++. Mempelajari cara mengekspresikan konsep dalam bahasa dari beberapa jenis berbeda (berorientasi objek, generik, dan fungsional; statis dan dinamis) sangat berharga bahkan jika Anda kembali ke bahasa sederhana seperti C untuk pekerjaan "nyata" Anda.
Jed Brown

Jawaban:

10

Ada kode CFD modern yang bisa Anda lihat. Sebagai contoh ...

Likuiditas : Kode CFD (FE) multifase tujuan umum; Bahkan AMR sepenuhnya tidak terstruktur

WRF : Sistem prediksi cuaca model numerik generasi selanjutnya dari NCAR

Saturne Kode : Kode CFD tujuan umum (FV); Beberapa fitur tercantum di Wikipedia

Ada kode Fortran modern serupa untuk analisis struktural.

Tetapi mereka mungkin tidak menggunakan kemampuan F2003 penuh karena kurangnya dukungan kompiler yang tersebar luas. Sebagian besar kompiler baru mendukung sebagian besar F2003 (lihat makalah ACM SIGPLAN Fortran Forum) tetapi butuh waktu untuk memiliki basis pengguna yang luas. Debian stable misalnya memiliki GCC 4.4.5 sehingga secara umum Anda tidak boleh mengharapkan pengguna Anda memiliki sesuatu yang lebih baik (mis. 4.5 / 4.6 / 4.7).

Ketika kompiler F2003 menjadi luas Anda akan melihat libs / kode yang menggunakan kemampuan F2003.

Untuk saat ini Anda dapat melihat buku ini oleh Damian Rouson tentang cara menggunakan kemampuan OOP.

stali
sumber
Itu benar, F2003 baru-baru ini menyusul (untuk perpustakaan saya sendiri saya memutuskan untuk tetap menggunakan F95 untuk portabilitas maksimum). Kita akan melihat lebih banyak kode yang ditulis dalam F2003 atau bahkan F2008 segera.
Ondřej Čertík
Poin yang sangat bagus. Saya harap kita akan melihat lebih banyak kode standar baru di tahun-tahun mendatang.
tiam
Damian Rouson bekerja pada ForTrillinos , yang merupakan antarmuka fortran modern untuk Proyek Trillinos .
Jeremy Kozdon
7

Jika Anda ingin belajar dengan contoh, saya akan merekomendasikan rosettacode , sebuah situs pemrograman chrestomathy. Di sana Anda dapat menemukan banyak contoh masalah yang ditulis secara relatif dalam beberapa bahasa yang berbeda.

Mungkin yang lebih menarik bagi Anda adalah Fortran wiki , dan inilah bagian tentang OOP di Fortran yang mungkin berguna.

Fortan baik-baik saja - jangan menyerah!

Johntra Volta
sumber
Saya suka Fortran sendiri :). Saya tahu situs web wiki, buku-buku Matcalds juga sangat bagus dan juga tutorial PGI. Tetapi melihat beberapa materi nyata akan menyenangkan!
tiam
Gaya pengkodean kode CFD dolfyn benar-benar komprehensif dan "melek huruf Fortran modern". Di sana Anda dapat menemukan contoh beberapa struktur data seperti daftar tertaut dll. Yang mungkin informatif, dan sedikit OOP jika saya ingat dengan benar.
Johntra Volta
4

Saya setuju dengan komentar oleh @JackPoulson. Saya tidak mengetahui adanya perpustakaan open source yang ditulis dalam Fortran modern. Jadi jawaban untuk pertanyaan spesifik Anda tentang perlu beralih ke C ++ untuk belajar dengan contoh adalah "ya" yang disayangkan. Tapi, untuk lebih jelasnya, saya tahu bahwa setidaknya ada satu perpustakaan yang ditulis hampir secara eksklusif di Fortran modern dengan pandangan ke arah OOP, jadi itu mungkin (dan bermanfaat). Perpustakaan ini bukan open source, jadi perpustakaan tidak akan membantu Anda mencapai tujuan belajar Anda.

Namun, Anda juga cenderung enggan membuang apa yang sudah Anda selesaikan. Jika Anda masih tertarik untuk mengejar Fortran untuk ini dan memiliki pertanyaan pengembangan spesifik, saya mendorong Anda untuk menanyakannya di StackOverflow. Ada beberapa pengembang Fortran yang sangat terampil yang aktif di sana yang dengan senang hati membantu.

Barron
sumber
3

Saya sedikit terlambat dalam hal ini, tetapi Anda harus melihat versi 3 dari perpustakaan aljabar linier paralel PSBLAS , yang mengambil keuntungan penuh dari fitur Fortran modern seperti warisan dan polimorfisme. Ada juga makalah di sini di mana mereka membandingkan kinerja versi itu dengan versi lama mereka, yang menempel pada F90 / F95. Cukup mengejutkan, perbedaan kecepatan diabaikan secara keseluruhan.

Daniel Shapero
sumber
1

Saya tidak tahu dialek Fortran mana yang ditulis, tetapi ada kode PHAML William Mitchell yang merupakan tujuan umum kode FEM Fortran.

Saya akan mengakui bahwa saya tidak memihak dalam pembahasan Fortran vs C ++ tapi saya ingin menunjukkan bahwa Anda kesulitan dalam menemukan kode FEM modern berbasis Fortran sementara pada saat yang sama menemukan banyak kode berbasis C ++ memberitahu sesuatu yang dipikirkan oleh komunitas secara keseluruhan adalah jalan yang harus ditempuh. Tentu saja tidak ada yang salah dengan mencoba membangun kode Anda sendiri dalam bahasa yang Anda sukai dan kenal, tetapi survei singkat Anda sudah menunjukkan bahwa Anda sedang membangun sebuah pulau. Anda mungkin ingin mempertimbangkannya.

Wolfgang Bangerth
sumber
-1

Ada perpustakaan Fortran open source forDat oleh ffr Engineering yang menggunakan fitur oop 2003

Felix Frischmann
sumber
1
Selamat datang di SciComp! Jawaban Anda tidak terlalu membantu karena Anda tidak mendeskripsikan a) apa yang dilakukan forDat dan b) fitur OOP yang digunakan forDat. Anda juga kehilangan peluang di sini, karena sebagai pengembang forDat (yang seharusnya Anda ungkapkan, lihat scicomp.stackexchange.com/help/behavior ), Anda juga bisa menyebutkan mengapa forDat menggunakan fitur-fitur itu.
Christian Clason