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!
fortran
integral-equations
Rivendell
źródło
źródło
Odpowiedzi:
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
źródło
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ć.
źródło
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.