Fortran'da bir Octree Kodu


10

Bilimsel bilişimde yeniyim. Bir Octree bir Fortran (tercihen f90) uygulaması arıyorum.

Benim sorunum, herhangi bir kutuda bazı N parçacıklarından (veya Laplace denklemi gibi bir denklemi çözmek için bir integral denklem yöntemine takılabilen yoğunluk değerini bildiğim kaynaklardan) bulunmayana kadar alanımı bölen bir Octree gerektirir.

Bulabildiğim tek şey bu C ++ uygulamasıydı . Kullanabileceğim halihazırda var olan Fortran kütüphaneleri olup olmadığını bilmek istiyorum.

Ayrıca, hesaplama kutusunda hızlı integral denklem yöntemlerinin uygulanmasının kolaylaşabilmesi için kullanılabilecek Fortran'daki Octree uygulamaları hakkında iyi kağıt önerileri takdir edilecektir!


BoxLib'i deneyin. El kitabına göre saf Fortran 90 versiyonu var. Bkz. Ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Yanıtlar:


9

Octrees ile deneyimim yok, ama Fortran'da kullanmak istediğim bazı güzel C ++ kütüphanesi olduğunda, basit bir C sürücüsü --- tipik olarak tam olarak ihtiyacım olanı yapan birkaç C işlevi yazıyorum. Sonra onları iso_c_binding modülünü kullanarak Fortran'dan çağırıyorum. Bu, iyi test edilmiş bir kütüphaneyi çevresindeki bir toplulukla yeniden kullanmanızın büyük avantajına sahiptir.

İso_c_binding nasıl kullanılacağı hakkında bilgi için buraya bazı bilgiler yazdım:

http://fortran90.org/src/best-practices.html#interfacing-with-c

bu bilgi C'den Fortran'ı aramak içindir. Güncellemem gerektiğini görebiliyorum. İşte benim kod Fortran C ++ kütüphanesi, ilk bağlantı basit C sürücüsü, ikinci bağlantı bir Fortran arayüzü, ve sonra sadece herhangi bir Fortran altyordam gibi çağırır:

https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp

https://github.com/certik/hfsolver/blob/master/src/qc.f90


6

Fortran kullanmaya çok hazırsınız. Octrees, verimli bir şekilde uygulandığında oldukça karmaşık veri yapılarıdır ve bu nedenle C / C ++ gibi daha fazla desteği olan programlama dilleri için daha uygundur. C / C ++ 'da kullanabileceğiniz çok sayıda yüksek kaliteli uygulama vardır.


Cevabınız için teşekkürler! Ancak, kullanacağım hızlı integral yöntemler Fortran'da yazılıyor. Octran kodunu Fortran'a da yazmak doğal olurdu.
rivendell

Hangi hızlı integral yöntemleri? Çoğunlukla daha yüksek seviyeli dillere sarılırlar ve bu da önemli ölçüde oktrees'i de sarar. . .
meawoppl

C ile karşılaştırıldığında (modern) Fortran'da verimli oktree uygulamaları için hangi destek eksiktir? Bildiğim tek gerçek dezavantajsız tamsayıların eksik olması, böylece bazı bitsel işlemleri açıkça yazmak zorundasınız.
Jannis Teunissen

@JannisTeunissen - Fortran 200x'in karmaşık veri yapıları oluşturmak için yolları olmadığı değil, daha kolay (ya da değil) ile ilgili. C ++, örneğin, olan std::map, std::multimap, std::vector, std::sort, ve benzerleri ve benzeri, temel veri türünün tüm jenerik Avaiable bağımsız saklanır. Tüm bunları bugün de Fortran'da yapabileceğinize dair bir argüman yok, ancak temeldeki veri yapıları yerine uygulamanız üzerinde çalışmak için verimli bir şekilde kullanabileceğiniz günler ve haftalar gerektiriyor.
Wolfgang Bangerth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.