Kod Octree w Fortranie


10

Jestem nowy w informatyce naukowej. Szukam implementacji Fortran (najlepiej f90) Octree.

Mój problem wymaga Octree, który dzieli moją domenę, dopóki nie będzie więcej niż niektóre cząsteczki N (lub źródła, w których znam wartość gęstości, którą można podłączyć do metody równania całkowego w celu rozwiązania równania takiego jak równanie Laplace'a) w dowolnym polu.

Mogłem tylko znaleźć implementację C ++ . Chcę wiedzieć, czy istnieją już biblioteki Fortran, których mogę używać.

Docenione zostaną również dobre rekomendacje papierowe dotyczące implementacji Octree w Fortranie, które można zastosować, aby stosowanie metod szybkiego równania całkowego na polu obliczeniowym stało się łatwe!


Wypróbuj BoxLib. Zgodnie z instrukcją istnieje czysta wersja Fortran 90. Zobacz ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Odpowiedzi:


9

Nie mam doświadczenia z Octrees, ale ilekroć w Fortran jest jakaś fajna biblioteka C ++, po prostu piszę prosty sterownik C - zwykle kilka funkcji C, które robią dokładnie to, czego potrzebuję. Następnie dzwonię do nich z Fortran za pomocą modułu iso_c_binding. Ma to tę wielką zaletę, że można ponownie wykorzystać dobrze przetestowaną bibliotekę z otaczającą ją społecznością.

Aby uzyskać informacje na temat korzystania z iso_c_binding, napisałem tutaj kilka informacji:

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

ta konkretna informacja dotyczy dzwonienia do Fortrana z C. Widzę, że powinienem go zaktualizować. Oto mój kod, w którym wywołuję bibliotekę C ++ z Fortran, pierwsze łącze to prosty sterownik C, drugie łącze to interfejs Fortran, a następnie po prostu nazywam go jak każdą inną podprogramem Fortran:

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

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


6

Wyglądasz na bardzo nastawionego na używanie Fortrana. Oktawy, gdy są efektywnie zaimplementowane, są raczej złożonymi strukturami danych i jako takie lepiej nadają się do języków programowania, które mają większą obsługę tego, takich jak C / C ++. Istnieje wiele bardzo wysokiej jakości implementacji w C / C ++, których można użyć.


Dzięki za odpowiedź! Ale szybkie metody integralne, których mam użyć, zostały napisane w Fortranie. Naturalne byłoby również pisanie kodu Octree w Fortranie.
rivendell

Jakie metody szybkiego całkowania? Większość z nich jest owinięta w języki wyższego poziomu, które również w znacznym stopniu obejmują również oktuty. . .
meawoppl,

Jakiego wsparcia dla wydajnych implementacji oktawy brakuje w (nowoczesnym) Fortranie w porównaniu do C? Jedynym prawdziwym minusem, jaki znam, jest brak liczb całkowitych bez znaku, więc musisz jawnie napisać niektóre operacje bitowe.
Jannis Teunissen

@JannisTeunissen - to nie jest tak, że Fortran 200x nie ma możliwości tworzenia złożonych struktur danych, chodzi raczej o to, jak łatwe jest to (lub nie). C ++, na przykład, std::map, std::multimap, std::vector, std::sort, i tak dalej, i tak dalej, wszystko ogólnie dostarczony niezależnie od bazowego typu danych są przechowywane. Nie ma argumentów, że możesz zrobić to wszystko w Fortran również dzisiaj, ale wymaga to dni i tygodni pracy, które możesz produktywnie wykorzystać do pracy nad aplikacją, a nie na podstawowych strukturach danych.
Wolfgang Bangerth,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.