Saya baru mengenal komputasi ilmiah. Saya mencari implementasi Fortran (lebih disukai f90) dari Octree.
Masalah saya memerlukan Oktree yang membagi domain saya sampai tidak ada lebih dari beberapa partikel N (atau sumber di mana saya tahu nilai kerapatan yang dapat dicolokkan dalam metode persamaan integral untuk menyelesaikan persamaan seperti persamaan Laplace) di kotak mana pun.
Yang bisa saya temukan hanyalah implementasi C ++ ini . Saya ingin tahu apakah sudah ada perpustakaan Fortran yang bisa saya gunakan.
Juga, rekomendasi makalah yang baik tentang implementasi Octree di Fortran yang dapat digunakan sehingga menerapkan metode persamaan integral cepat pada kotak komputasi menjadi mudah, akan dihargai!
fortran
integral-equations
Rivendell
sumber
sumber
Jawaban:
Saya tidak punya pengalaman dengan Octrees, tetapi setiap kali ada beberapa perpustakaan C ++ yang bagus yang ingin saya gunakan di Fortran, saya cukup menulis driver C sederhana --- biasanya beberapa fungsi C yang melakukan persis apa yang saya butuhkan. Lalu saya memanggil mereka dari Fortran menggunakan modul iso_c_binding. Ini memiliki keuntungan besar bahwa Anda menggunakan kembali perpustakaan yang sudah teruji dengan komunitas di sekitarnya.
Untuk informasi cara menggunakan iso_c_binding, saya menulis beberapa informasi di sini:
http://fortran90.org/src/best-practices.html#interfacing-with-c
info khusus ini untuk memanggil Fortran dari C. Saya dapat melihat bahwa saya harus memperbaruinya. Berikut adalah kode saya di mana saya memanggil perpustakaan C ++ dari Fortran, tautan pertama adalah driver C sederhana, tautan kedua adalah antarmuka Fortran, dan kemudian saya menyebutnya seperti subrutin Fortran lainnya:
https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp
https://github.com/certik/hfsolver/blob/master/src/qc.f90
sumber
Anda tampaknya sangat siap menggunakan Fortran. Oktaf, ketika diimplementasikan secara efisien, adalah struktur data yang agak kompleks dan, dengan demikian, lebih cocok untuk bahasa pemrograman yang memiliki lebih banyak dukungan untuk ini, seperti C / C ++. Ada sejumlah implementasi berkualitas sangat tinggi di C / C ++ yang bisa Anda gunakan.
sumber
std::map
,std::multimap
,std::vector
,std::sort
, dan seterusnya dan sebagainya, semua independen umum avaiable dari jenis data yang mendasari disimpan. Tidak ada argumen yang dapat Anda lakukan semua ini di Fortran hari ini, tetapi itu membutuhkan hari dan minggu kerja yang dapat Anda gunakan secara produktif untuk benar-benar bekerja pada aplikasi Anda, daripada pada struktur data yang mendasarinya.