はじめまして。
私はFortran中級者,Python初心者です。Pythonを最近はじめたばかりなのですが、Pythonではうまく書けなかったりする場合が多く、今までに自分の使える言語、Fortranをうまく用いれないかと調べ、この記事を書きました。基本的にはf2pyのサイトに書かれている部分を日本語訳しただけなので、英語を読む力と元気のある方は元のオリジナルのページを読んでください。参考にしたオリジナルページ
自分のメモ用という側面もありますので、間違いや言葉足らずな部分があるかもしれませんが、ご了承ください。
Fortranのサブルーチンを用いるにはPythonのNumpyで提供されているf2pyというインターフェースを用います。
まず、f2pyとターミナルから入力し、自分の環境にインストールされているか確認します。
もし、インストールされていなければ、
pip install python-f2py
と入力すると、自分の環境にインストールされる。(pipをインストールしていない方は、先にインストールしてください。)
今回は簡単に、Helloと表示させ、さらに(Python側で)入力した整数の初期値を同時に出力させるサブルーチンを作成することにする。
以下で作成するhello.f90とfromfort.pyは同じディレクトリに入れてください。
subroutine foo (a)
integer :: a
write(*,*) "Hello from Fortran!" !ここで文字を出力
write(*,*) "a=",a !ここで整数を出力
end subroutine foo
このsubroutineを
f2py -c --fcompiler=gfortran -m hello hello.f90
としてコンパイルすると、この場合だとhello.soというファイルが生成される。
(※Fortran初心者の方へ書いておくと、gfortranとはFortranのコンパイラで私の環境(Ubuntu)では
sudo apt-get install gfortran
とすることでインストールできる。)
そして、Pythonのスクリプトでは、
# -*- coding: utf-8 -*-
import hello
hello.foo(4)
のように書く。このfromfort.pyを以下のようにしてターミナルから実行します。
python fromfort.py
すると、
Hello from Fortran!
a= 4
と表示されます。
うまく、PythonからFortranのsubroutineを呼び出すことに成功しました。
Spyderから同じファイルを実行すると、うまく動作しませんでした。ライブラリなどの検索ファイルに自分が作成したディレクトリを入れていないせいかもしれません。初心者なのでここらはまだ理解できていません。
今後はもう少し複雑なサブルーチンを用いる際にどうなるかといったことや、Pythonで書くよりもf2pyを用いたほうが計算速度が速いのかといったことについても具体的に調べたいと考えています。
それでは、失礼します。