Fortran環境構築 (Windows) #
1. コンパイラの導入 #
1.1. gfortranのインストール #
Windows上でfortranコンパイラを使用可能にするために、gfortranを導入します。
gfortran 導入方法 (Windows ver.)-信州大学, 古明地美陽
2. エディタの整理 (VScode) #
VSCodeのFortran向け拡張を整理,最新化する(2022年6月) -Qiita, @implicit_none
2.1. VScode 拡張機能 #
2.2. VScodeの拡張機能 Modern Fortran
のインストール
#
下記の拡張機能をインストールします。これらを利用することで、コードのハイライトとコードの自動整形ができるようにするための準備です。
-
VScodeの拡張機能
C/C++
(publisher:“Microsoft”)- メインの拡張機能である
Modern Fortran
の要件として、上記の拡張機能が必要です。
- メインの拡張機能である
-
VScodeの拡張機能
Modern Fortran
(publisher:“fortran-lang.org”)
2.3. Fortran用 言語サーバ fortls
のインストール
#
pip install fortls
私の場合、インストール後に下記場所にexeが置かれました。
C:\Users\username\AppData\Local\Programs\Python\Python313\Scripts\fortls.exe
上記の実行ファイルのパスをModern Fortranの設定項目に設定します。
2.4. Fortran用 自動整形ツール fprettify
のインストール
#
pip install fprettify
私の場合、インストール後に下記場所にexeが置かれました。
C:\Users\username\AppData\Local\Programs\Python\Python313\Scripts\fprettify.exe
上記の実行ファイルのパスをModern Fortranの設定項目に設定します。
2.5. settins.json
に書くべき内容
#
VS codeの settins.json
に下記の内容を書きます。
"editor.formatOnSave": true,
"fortran.linter.compiler": "gfortran",
"fortran.linter.compilerPath": "C:/TDM-GCC-64/bin/gfortran.exe",
"fortran.fortls.path": "C:/Users/username/AppData/Local/Programs/Python/Python313/Scripts/fortls.exe",
"fortran.formatting.path": "C:/Users/username/AppData/Local/Programs/Python/Python313/Scripts",
"fortran.formatting.formatter": "fprettify",
"fortran.formatting.fprettifyArgs": ["--indent", "4", "--enable-decl", "--strip-comments", "--case", "1", "1", "1", "1"],
下記の通りパスを指定しています。
fortran.linter.compilerPath
のパスは、gfortran.exe
を含むパスを指定fortran.fortls.path
のパスは、fortls.exe
を含むパスを指定fortran.formatting.path
のパスは、frettify.exe
を含むフォルダまでのパスを指定
3. LAPACKのインストール #
英語では次の説明が参考になります。
日本語では下記が参考になります。
ただし、日本語の上記説明だけではインストールができず、以下を変更する必要がありました。
-
日本語説明の11.を変更 Specify native compilers にて、LAPACK for Windowsに従い下記のように変更しました。
- Compilers
- C ……….
C:/TDM-GCC-64/bin/x86_64-w64-mingw32-gcc.exe
- C++ ……..
C:/TDM-GCC-64/bin/x86_64-w64-mingw32-g++.exe
- Fortran ….
C:/TDM-GCC-64/bin/x86_64-w64-mingw32-gfortran.exe
- C ……….
- Compilers
-
日本語説明の12.を変更 LAPACK for Windowsに従い下記のように変更しました。
BUILD_SHARED_LIBS
のオプションをONCMAKE_GNUtoMS
のオプションをON
ここまででLapackが使用できるようになりました。次はFFTWです。
4. FFTWのインストール #
Downloading FFTW, Windows Installation Notes -FFTW
4.1. WSL2のインストール #
- Linux 用 Windows サブシステム 機能の有効化
管理者権限でPowerShellまたはコマンドプロンプトを起動
wsl --update
wsl --install
wslインストール作業中・作業後に再起動が要求されるかもしれませんが、記載はしておりません。
WSLの導入が完了すれば、アプリにUbuntu
が追加されているはずです。次のようにUbuntuターミナルが存在するか確認してください。
Ubuntu
を立ち上げ後、ユーザー名とパスワード等を案内に従って設定すればWSLの準備は完了です。
4.2. fftwの導入 #
4.2.1. fftwのダウンロード #
wget http://www.fftw.org/fftw-3.3.10.tar.gz
tar -xvzf fftw-3.3.10.tar.gz
cd fftw-3.3.10 # ← このディレクトリが「FFTWソースディレクトリ」です
4.2.2. MinGWクロスコンパイラ環境の事前準備 #
Ubuntu上 (WSL上) でMinGWクロスコンパイル用のツールチェインとビルドに必要なツールをインストールします。 少なくとも以下をインストールしてください(root権限が必要です)
sudo apt update
sudo apt install mingw-w64 gfortran-mingw-w64 build-essential
上記2行目において、次のツールをインストールしています。
ツール | 説明 |
---|---|
build-essential | GCCやMakeなど標準的なビルドツール |
mingw-w64 | Windows向けクロスコンパイラ(x86_64-w64-mingw32およびi686-w64-mingw32のコンパイラ一式) |
gfortran-mingw-w64 | MinGW版GFortran(Fortranコンパイラ)。※mingw-w64に含まれる場合もあります。 |
4.3. ビルド #
4.3.1. 倍精度ライブラリ #
# 1) クリーン
make distclean
# 2) コンフィグ(double precision有効化)
./configure --host=x86_64-w64-mingw32 \
--disable-alloca \
--with-our-malloc16 \
--with-windows-f77-mangling \
--disable-shared \
--enable-static \
--prefix=/mnt/c/fftw
# 3) ビルド
make -j$(nproc)
# 4) インストール(ヘッダは既にあるのでライブラリだけ手動コピー)
make install
mkdir -p /mnt/c/fftw/lib
cp .libs/libfftw3.a /mnt/c/fftw/lib/
4.3.2. 単精度ライブラリ #
# 1) クリーン
make distclean
# 2) コンフィグ(float有効化)
./configure --host=x86_64-w64-mingw32 \
--disable-alloca \
--with-our-malloc16 \
--with-windows-f77-mangling \
--disable-shared \
--enable-static \
--enable-float \
--prefix=/mnt/c/fftw
# 3) ビルド
make -j$(nproc)
# 4) インストール
mkdir -p /mnt/c/fftw/lib
cp .libs/libfftw3f.a /mnt/c/fftw/lib/
4.3.3. 4倍精度ライブラリ #
make distclean
# 2) コンフィグ(4倍精度有効化)
./configure --host=x86_64-w64-mingw32 \
--disable-alloca \
--with-our-malloc16 \
--with-windows-f77-mangling \
--disable-shared --enable-static \
--enable-quad-precision \
--prefix=/mnt/c/fftw
# 3) ビルド
make -j$(nproc)
# 4) インストール
mkdir -p /mnt/c/fftw/lib
cp .libs/libfftw3q.a /mnt/c/fftw/lib/
4.4. 動作確認用 #
program test_fftw
implicit none
! Fortran77形式のラッパーを読み込む
include 'fftw3.f'
integer, parameter :: N = 8
integer*8 :: plan_fwd, plan_bwd
complex*16 :: in(N), out(N)
integer :: i
!--- 入力データの初期化 ---
do i = 1, N
in(i) = cmplx(dble(i), 0.0d0) ! 例えば実部に 1,2,…,N を設定
end do
!--- プラン(計画)の作成 ---
! FFTW_FORWARD = -1, FFTW_BACKWARD = +1, FFTW_ESTIMATE = 64
call dfftw_plan_dft_1d(plan_fwd, N, in, out, FFTW_FORWARD, FFTW_ESTIMATE)
call dfftw_plan_dft_1d(plan_bwd, N, out, in, FFTW_BACKWARD, FFTW_ESTIMATE)
!--- FFT の実行 ---
call dfftw_execute_dft(plan_fwd, in, out)
print *, '=== FFT result ==='
do i = 1, N
print '(I2,2X,2F12.5)', i, real(out(i)), aimag(out(i))
end do
!--- IFFT の実行(逆変換後に正規化)---
call dfftw_execute_dft(plan_bwd, out, in)
do i = 1, N
in(i) = in(i) / dble(N)
end do
print *, '=== IFFT result (normalized) ==='
do i = 1, N
print '(I2,2X,2F12.5)', i, real(in(i)), aimag(in(i))
end do
!--- プランの破棄 ---
call dfftw_destroy_plan(plan_fwd)
call dfftw_destroy_plan(plan_bwd)
end program test_fftw
下記のコマンドをpowershell上で実行すればよいです。
gfortran .\test_fft_fortran.f90 -I"C:\fftw\include" -L"C:\fftw\lib" -lfftw3 -o test_fftw.exe
.\test_fftw.exe