Ubuntu 26.04でWannier90 3.1.0をビルドする方法(gfortran/OpenBLAS)

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.xpostw90.xの利用だけなら、make libは必要ありません。

スポンサーリンク

トラブルシューティング

MPI版のビルドが型不一致エラーで停止する

make.incFCOPTS-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 = mpiMPIF90 = mpif90に加え、-fallow-argument-mismatchを設定するのがポイントです。

スポンサーリンク

参考リンク

コメント

タイトルとURLをコピーしました