Wiem i użyłem f2py2e do owinięcia starego kodu Fortran 77, ale rozumiem, że nie działa z nowszym kodem Fortran 95. Zbadałem, co powinienem użyć, i natknąłem się na fwrap i G3 f2py, z których żadne nie wydaje się wyjaśniać ich obecnego stanu ani sposobu ich użycia (poza podstawowym użyciem).
Widziałem również, że wersja f2py ma opcję korzystania z f2py trzeciej generacji, ale jest komentowana jako niefunkcjonalna. Biorąc to pod uwagę, nie wiem, którego projektu powinienem użyć do projektu uni. Którego należy użyć do nowego kodu?
PS Jest to w zasadzie to samo pytanie, co /programming/10665717/current-best-metod-for-wrapping-modern-fortran-code-with-python , sugerowano, że pytanie tutaj może dać lepsze odpowiedzi .
Odpowiedzi:
Można użyć Pythona wbudowane ctypes modułu zgodnie z opisem na fortran90.org . Jest to dość proste i nie wymaga żadnych zewnętrznych zależności. Ponadto pomocnik typu ndpointer arg jest bardzo przydatny.
źródło
Osobiście używam do tego f2py. Jednak Fortran, który piszę dla f2py, nie jest tak naprawdę nowoczesnym Fortranem, ale raczej swobodnym F90 z modułami. Nie używam założonych kształtów ani typów niestandardowych. Ta metoda wciąż działa dla mnie bardzo dobrze.
Istnieje zasób, który chcę udostępnić, dotyczący użycia C jako części opakowania. Polecamy także resztę tej strony.
źródło
cython
polecenia i zmniejszyć nakładanie się między zmianą mojego kodu fortran lub kodu python i szybkim uruchomieniem wszystkiego.Dokumentacja f2py nie jest naprawdę świetna. Jestem w trakcie przenoszenia własnych projektów z f2py do Cython . Mimo że Cython może być używany do zawijania kodu C, stwierdziłem, że jest on najbardziej przydatny do tworzenia nowego kodu o wysokiej wydajności. Jeśli masz zamiar napisać nowy kod Fortran, zawiń go i wywołaj w Pythonie, zalecam zamiast tego używać Cython. W ten sposób możesz napisać kod w Pythonie, a jeśli występują wąskie gardła w wydajności, przenieś go do Cython z niewielkimi modyfikacjami.
źródło
f90wrap jest zbudowany na bazie f2py i automatycznie generuje opakowania Pythona dla podstawowej bazy kodu Fortran, w tym dostęp do typów pochodnych. Zestaw prostych przykładów pokazuje, jak to działa.
źródło
Możesz użyć FortWrap, aby dostać się tam w połowie drogi. Spowoduje to utworzenie interfejsu C ++ do kodu Fortran, który można następnie owinąć SWIG w celu uzyskania interfejsu Python. Robimy to na dość dużej bazie kodu Fortrana i działa całkiem dobrze (w rzeczywistości FortWrap został opracowany przez członka naszego zespołu do tego właśnie celu).
źródło
fwrap
konkretnie atakuje Fortran90 / 95 i korzysta z tego samego stosu oprogramowania, cof2py
.źródło
f2py
na F90. Ma również bardzo niską barierę wejścia. Cieszyłem się, że go znalazłem.f2py
obsługuje nowoczesny fortran (tablice o założonych kształtach i tak dalej), patrz przykładowy skryptRównież do eksperymentów z kodem fortran polecam magię IPython , która jest łatwa w instalacji i bardzo wygodna (opiera się również na f2py).
źródło
Oto lista opakowań Fortrana dla Pythona:
https://github.com/mgaitan/fortran_magic/issues/4
źródło