Czy istnieją biblioteki naukowe typu open source, które wykorzystują nowoczesny Fortran z OOP?

14

Ostatnie miesiące spędziłem na kodowaniu programu Fortran do rozwiązania konkretnego systemu PDE (opisuje przepływ / spalanie płynu). Próbowałem użyć najnowszego standardu Fortran i nowych możliwości OOP, jakie ma nowoczesny Fortran. Pracuję sam i nie mam obok siebie guru z Fortranu, który mógłby zadawać pytania, więc nataralnym sposobem uczenia się dla mnie byłoby spojrzenie na inne biblioteki / solwery, które używają współczesnego Fortranu.

Niestety, wydaje się, że wszystkie biblioteki Fortran są napisane w dość starych Fortranach, na szczycie Fortran90. Dlatego musiałem sam przemyśleć projekt klasy i interakcję. I wcale nie jestem certyfikatem, że zrobiłem to dobrze, zwłaszcza jeśli spojrzy się z perspektywy preformance. Ale może coś mi umknęło i jeśli Fortran używa OOP, powstają nowoczesne pakiety naukowe?

Istnieje wiele dobrych bibliotek C ++ do nauki (OpenFOAM, deal.II i więcej), a także biblioteki Python. Te języki mają również większą społeczność. Czy może lepiej porzucić Fortran i zmienić język, jeśli chcę uczyć się na przykładach?

Tiam
źródło
Jack, wygląda na to, że twój komentarz był zbyt duży: „(Reszta tego komentarza ma na celu spełnienie wymagań dotyczących długości.)”. Wzbudza we mnie nadzieję, więc proszę ją edytować, aby każdy mógł ją przeczytać: D.
tiam
2
Przepraszam, mój komentarz był mylący, ponieważ odpowiadałem na twoje ostatnie pytanie. Chodzi mi o to, że jeśli chcesz nauczyć się współczesnego OOP na przykładach z pełnoprawnych bibliotek, C ++ jest właściwą drogą. Przepraszam; Nie znam żadnych najlepszych współczesnych bibliotek Fortran typu open source.
Jack Poulson
6
Ostrzegłbym, że C ++ jest już nieco zakręconym wcieleniem orientacji obiektowej, a wiele bibliotek dalej go niewłaściwie używa (dotyczy każdego języka). Zgadzam się, że ważne jest, aby patrzeć poza Fortran, ale ważne jest również, aby patrzeć poza C ++. Nauka wyrażania pojęć w kilku różnych językach (obiektowym, ogólnym i funkcjonalnym; statycznym i dynamicznym) jest tego warta, nawet jeśli wrócisz do prostego języka, takiego jak C, dla swojej „prawdziwej” pracy.
Jed Brown

Odpowiedzi:

10

Istnieją nowoczesne kody CFD, które można przeglądać. Na przykład ...

Płynność : uniwersalny kod wielofazowy CFD (FE); Nawet robi całkowicie nieustrukturyzowany AMR

WRF : System prognozowania pogody model numeryczny nowej generacji z NCAR

Kod Saturne : Kod CFD (FV) ogólnego przeznaczenia; Niektóre funkcje wymienione na Wikipedii

Istnieją podobne nowoczesne kody Fortran do analizy strukturalnej.

Ale mogą nie korzystać z pełnych możliwości F2003 z powodu braku powszechnej obsługi kompilatora. Większość nowych kompilatorów obsługuje duże części F2003 (patrz dokumenty ACM SIGPLAN Fortran Forum), ale potrzeba dużej liczby użytkowników. Na przykład stabilna wersja Debiana ma GCC 4.4.5, więc ogólnie rzecz biorąc nie powinieneś oczekiwać, że użytkownicy będą mieli coś lepszego (tj. 4.5 / 4.6 / 4.7).

Kiedy kompilatory F2003 staną się powszechne, zobaczysz libs / code, które korzystają z możliwości F2003.

Na razie możesz zapoznać się z książką Damiana Rousona, w jaki sposób korzystać z możliwości OOP.

stali
źródło
Zgadza się, F2003 dopiero niedawno nadrabia zaległości (w mojej własnej bibliotece postanowiłem trzymać się F95, aby zapewnić maksymalną przenośność). Wkrótce zobaczymy więcej kodu napisanego w F2003, a nawet F2008.
Ondřej Čertík
Bardzo dobra uwaga. Mam nadzieję, że w najbliższych latach zobaczymy więcej nowego standardu kodu.
tiam
Damian Rouson pracuje na ForTrillinos , który jest nowoczesnym interfejsem fortran do projektu Trillinos .
Jeremy Kozdon
7

Jeśli chcesz się uczyć na przykładach, polecam rozeta , kodowanie strony chrestomathy. Można tam znaleźć wiele przykładowych problemów napisanych stosunkowo w kilku różnych językach.

Być może jeszcze bardziej interesująca byłaby dla Ciebie wiki Fortran , a tutaj jest sekcja dotycząca OOP w Fortran, która może być przydatna.

Fortan ma się dobrze - nie poddawajmy się!

John Travolta
źródło
Sam lubię Fortran :). Znam stronę wiki, książki Matcalds są również bardzo dobre, a także tutoriale PGI. Ale zobaczenie prawdziwego materiału byłoby fajne!
tiam
Styl kodowania kodu CFD firmy dolfyn jest naprawdę wszechstronny i „nowoczesny w zakresie umiejętności czytania w języku Fortran”. Tam możesz znaleźć przykłady niektórych struktur danych, takich jak listy połączone itp., Które mogą być pouczające, i trochę OOP, jeśli dobrze pamiętam.
Johntra Volta
4

Zgadzam się z komentarzem @JackPoulson. Nie znam żadnych bibliotek open source napisanych we współczesnym Fortranie. Odpowiedź na twoje konkretne pytanie dotyczące konieczności przejścia na C ++ w celu uczenia się na przykładzie jest niefortunnym „tak”. Ale dla jasności wiem, że istnieje co najmniej jedna biblioteka, która została napisana prawie wyłącznie we współczesnym Fortranie z myślą o OOP, więc jest to możliwe (i opłacalne). Ta biblioteka nie jest jednak oprogramowaniem typu open source, więc nie pomoże ci w osiągnięciu celu nauki.

Prawdopodobnie jednak nie będziesz chciał wyrzucić tego, co już ukończyłeś. Jeśli nadal interesujesz się Fortranem i masz konkretne pytania dotyczące rozwoju, zachęcam do zadawania ich na StackOverflow. Jest tam kilku wysoko wykwalifikowanych programistów Fortran, którzy chętnie służą pomocą.

Barron
źródło
3

Trochę się spóźniam, ale powinieneś rzucić okiem na wersję 3 równoległej biblioteki algebry liniowej PSBLAS , która w pełni wykorzystuje nowoczesne funkcje Fortrana , takie jak dziedziczenie i polimorfizm. Jest też artykuł , w którym porównali wydajność tej wersji ze starszymi wersjami, które utknęły w F90 / F95. Co zaskakujące, różnica prędkości była ogólnie nieznaczna.

Daniel Shapero
źródło
1

Nie wiem, w jakim dialekcie Fortran jest napisany, ale istnieje kod PHAML Williama Mitchella, który jest uniwersalnym kodem Fortran FEM.

Przyznaję, że nie jestem bezstronny w dyskusji na temat Fortran kontra C ++, ale chciałbym zauważyć, że masz trudności ze znalezieniem nowoczesnego kodu FEM opartego na Fortranie, a jednocześnie znalezienie wielu kodów opartych na C ++ mówi coś, co zdaniem całej społeczności jest właściwą drogą. Oczywiście nie ma nic złego w próbie zbudowania własnego kodu w języku, który lubisz i którego znasz, ale twoja krótka ankieta już pokazuje, że budujesz wyspę. Możesz wziąć to pod uwagę.

Wolfgang Bangerth
źródło
-1

Dostępna jest otwarta biblioteka Fortran forDat autorstwa frfr Engineering, która korzysta z funkcji oop 2003

Felix Frischmann
źródło
1
Witamy w SciComp! Twoja odpowiedź nie jest zbyt pomocna, ponieważ nie opisujesz: a) tego, co robi forDat; oraz b) jakich funkcji OOP używa forDat. Tutaj również brakuje Ci okazji, ponieważ jako programista forDat (który powinieneś przy okazji ujawnić, patrz scicomp.stackexchange.com/help/behavior ), możesz również wspomnieć, dlaczego forDat używa tych funkcji.
Christian Clason