Wannier90 3.1.0をUbuntu 26.04上でソースからビルドし、ユーザー領域へインストールする手順を紹介します。
この記事では、まず構成が単純なシリアル版をビルドします。後半では、大規模系の解析などでpostw90.xを並列実行したい場合に、Open MPIを有効にしてビルドする方法も説明します。
検証環境
- OS: Ubuntu 26.04 LTS(WSL2)
- CPU: x86_64、32コア
- Fortranコンパイラ: GNU Fortran 15.2.0
- BLAS/LAPACK: OpenBLAS 0.3.32
- MPI: Open MPI 5.0.10(MPI版のみ)
- Wannier90: 3.1.0
- インストール先:
$HOME/.local/wannier90
Wannier90のビルドに必要なもの
Wannier90 3.1.0は主にFortranで実装されています。シリアル版のビルドに必要なのは、gfortran、make、BLAS/LAPACKです。
UbuntuではOpenBLASの開発パッケージを導入すると、BLASとLAPACKの両方を利用できます。
sudo apt update
sudo apt install -y \
build-essential \
gfortran \
libopenblas-dev \
wget \
ca-certificates
Quantum ESPRESSO、FFTW、ScaLAPACKは、Wannier90単体のビルドには必要ありません。
ソースコードを取得する
GitHubで公開されているWannier90 3.1.0のタグtarballを取得します。
VERSION=3.1.0
WORKDIR="$HOME/installer"
mkdir -p "$WORKDIR"
cd "$WORKDIR"
wget \
"https://github.com/wannier-developers/wannier90/archive/refs/tags/v${VERSION}.tar.gz" \
-O "wannier90-${VERSION}.tar.gz"
tar xzf "wannier90-${VERSION}.tar.gz"
cd "wannier90-${VERSION}"
シリアル版をビルドする
Wannier90にはコンパイラ別の設定例が同梱されています。gfortran用テンプレートをmake.incとしてコピーし、BLAS/LAPACKのリンク先をOpenBLASに変更します。
cp config/make.inc.gfort make.inc
sed -i 's/^LIBS *=.*/LIBS = -lopenblas/' make.inc
設定を確認します。
grep -E '^(F90|FCOPTS|LDOPTS|LIBS) *=' make.inc
おおむね次の内容になっていれば問題ありません。
F90 = gfortran
FCOPTS = -O3
LDOPTS =
LIBS = -lopenblas
ビルドを実行します。
make -j"$(nproc)"
デフォルトのmakeでは、主に次の実行ファイルが生成されます。
wannier90.x: Wannier関数を構築する本体postw90.x: Berry位相や輸送特性などを解析する後処理プログラム
ユーザー領域へインストールする
システム全体ではなく、$HOME/.local/wannier90へインストールします。管理者権限は不要です。
PREFIX="$HOME/.local/wannier90"
make install PREFIX="$PREFIX"
インストールされたファイルを確認します。
find "$PREFIX" -maxdepth 2 -type f -print
通常は次の2ファイルがbinディレクトリへインストールされます。
$HOME/.local/wannier90/bin/wannier90.x $HOME/.local/wannier90/bin/postw90.x
PATHを設定する
毎回フルパスを指定せずに実行できるよう、~/.bashrcへPATHを追加します。
echo 'export PATH="$HOME/.local/wannier90/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
バージョンを確認します。
wannier90.x -v
Wannier90 3.1.0と表示されれば、シリアル版のインストールは完了です。
MPI対応のpostw90.xをビルドする場合
wannier90.xによるWannier化処理は基本的にシリアルです。一方、postw90.xはMPI並列に対応しています。大規模な後処理を行う場合は、Open MPIを有効にしてビルドできます。
Open MPIをインストールする
sudo apt install -y libopenmpi-dev openmpi-bin
make.incでMPIを有効にする
ソースディレクトリへ戻り、一度ビルド結果を消してから設定を変更します。
cd "$HOME/installer/wannier90-3.1.0"
make veryclean
cp config/make.inc.gfort make.inc
sed -i \
-e 's/^#COMMS *= *mpi/COMMS = mpi/' \
-e 's/^#MPIF90 *=.*/MPIF90 = mpif90/' \
-e 's/^FCOPTS *= *-O3/FCOPTS = -O3 -fallow-argument-mismatch/' \
-e 's/^LIBS *=.*/LIBS = -lopenblas/' \
make.inc
Wannier90 3.1.0のテンプレートでは、#COMMSの後ろに空白が2個入っています。単純な固定文字列置換では一致しないことがあるため、上記では空白の数を吸収するパターンを使用しています。
設定結果を確認します。
grep -E '^(COMMS|MPIF90|F90|FCOPTS|LIBS) *=' make.inc
次の設定が表示されることを確認してください。
F90 = gfortran
COMMS = mpi
MPIF90 = mpif90
FCOPTS = -O3 -fallow-argument-mismatch
LIBS = -lopenblas
なぜ-fallow-argument-mismatchが必要か
Wannier90 3.1.0のMPI通信コードには、異なる型の引数を同じMPIルーチンへ渡す箇所があります。gfortran 10以降ではこれがエラーになるため、MPI版をビルドするときは-fallow-argument-mismatchを追加します。
シリアル版では該当するMPIコードを使用しないため、このオプションは不要です。
再ビルド・再インストールする
make -j"$(nproc)"
make install PREFIX="$HOME/.local/wannier90"
postw90.xがMPIライブラリへリンクされていることを確認します。
ldd "$HOME/.local/wannier90/bin/postw90.x" | grep -i mpi
MPI関連ライブラリが表示されれば、MPI対応版としてビルドされています。実際の解析では、例えば次のように起動します。
mpirun -np 4 postw90.x seedname
ここでseednameは、入力ファイルseedname.winの拡張子を除いた部分です。
静的ライブラリが必要な場合
別のプログラムからWannier90をライブラリとして利用する場合は、libwannier.aもビルドできます。
make lib
make install PREFIX="$HOME/.local/wannier90"
次の場所へインストールされます。
$HOME/.local/wannier90/lib/libwannier.a
通常のwannier90.x、postw90.xの利用だけなら、make libは必要ありません。
トラブルシューティング
MPI版のビルドが型不一致エラーで停止する
make.incのFCOPTSに-fallow-argument-mismatchが含まれているか確認します。
grep '^FCOPTS' make.inc
COMMSを設定したのにpostw90.xがMPIへリンクされない
テンプレートのCOMMS行がコメントアウトされたままになっていないか確認します。
grep -n 'COMMS' make.inc
有効な設定は、行頭に#がない次の形です。
COMMS = mpi
設定を直した後は、古いオブジェクトファイルが残らないようmake verycleanしてから再ビルドします。
-lopenblasが見つからない
OpenBLASの開発パッケージを確認します。
sudo apt install libopenblas-dev
wannier90.xが入力待ちのように見える
実計算では入力ファイルのseednameを引数として指定します。
wannier90.x seedname
バージョンを確認するだけなら、次を実行します。
wannier90.x -v
ビルドからインストールまでの一括スクリプト
シリアル版を導入する手順をまとめると、次のようになります。
#!/usr/bin/env bash
set -euo pipefail
VERSION=3.1.0
PREFIX="$HOME/.local/wannier90"
WORKDIR="$HOME/installer"
sudo apt update
sudo apt install -y \
build-essential \
gfortran \
libopenblas-dev \
wget \
ca-certificates
mkdir -p "$WORKDIR"
cd "$WORKDIR"
wget \
"https://github.com/wannier-developers/wannier90/archive/refs/tags/v${VERSION}.tar.gz" \
-O "wannier90-${VERSION}.tar.gz"
tar xzf "wannier90-${VERSION}.tar.gz"
cd "wannier90-${VERSION}"
cp config/make.inc.gfort make.inc
sed -i 's/^LIBS *=.*/LIBS = -lopenblas/' make.inc
make -j"$(nproc)"
make install PREFIX="$PREFIX"
"$PREFIX/bin/wannier90.x" -v
まとめ
Wannier90 3.1.0のシリアル版は、gfortranとOpenBLASがあれば比較的簡単にビルドできます。
MPIが必要になるのは主にpostw90.xを並列化するときです。gfortran 10以降でWannier90 3.1.0のMPI版をビルドする場合は、COMMS = mpiとMPIF90 = mpif90に加え、-fallow-argument-mismatchを設定するのがポイントです。
コメント