はじめに
第一原理電子状態計算など材料シミュレーションプログラムは、Linux環境で動作させることを前提に開発されている場合が多いようです。一方、シミュレーションを専門としない材料研究者は、(会社のパソコンで)Windowsを利用していることが多いです。大規模計算にはLinuxクラスタ計算機の利用をお勧めしますが、とっかかりにWindows計算機が利用できれば、材料シミュレーション人口の増加につながることが期待できます。その際Windowsネイティブ環境を利用するよりも、仮想Linux環境を用いる方が簡単ですし、将来の大規模計算に向けた準備になると思います。
仮想Linux環境を実現するためのソフトウェアは広く公開されていますが、環境構築は面倒です。過去にVirtualBoxを利用して、仮想マシンのディスクイメージを配布したことがありますが、OSやライブラリのバージョンアップに逐一対応するのが面倒でした。ここでは面倒な仮想マシンの配布をVagrantに担当してもらいます。VagrantとVirtualBoxは、WindowsとLinuxの間のSSH接続やファイル共有まで提供してくれるので、これら以外の追加ソフトウェアは不要です。
計算環境構築
Windowsで動作するLinux仮想マシンに、Fortranを含む開発環境と、材料シミュレーションで良く用いられるライブラリであるMPIとFFTW、計算結果のグラフ描画用にGnuplotをインストールします。
Windows 10 64bit版を利用し、ハードウェアの仮想化支援機能(Intel VT / AMD-V; BIOSで確認)が有効になっていることを前提とします。
VirtualBoxとVagrantのインストール
公式サイトからWindows 64bit版インストーラーをダウンロードします。Windowsのアプリケーションソフトウェアですので、インストーラーの指示に従って、普通にインストールして下さい。
VirtualBox
Vagrant
インストール後、コマンドプロンプトを起動して、Vagrantが利用可能であることを確かめます。
>vagrant --version
Vagrant 2.2.6
ファイル共有(等)のためにプラグインをインストールします。
>vagrant plugin install vagrant-vbguest
Boxの入手
Vagrantが利用するOSのテンプレートはBoxとして配布されています。バージョンアップ後間もない最新版OSを使用するとトラブルに遭遇する可能性が高まることを承知の上で、CentOSの最新版を利用します。
>vagrant box add centos/8
VirtualBox用を選択します。
材料シミュレーションでは最新版OSを利用する利点は少ないので、CentOS7を使用するのも賢い選択です。
仮想マシン作成とライブラリ類インストール
コマンドプロンプトから操作します。仮想マシンごとに、ディレクトリ(フォルダ)を作ります。
>mkdir PHASE-SYSTEM
>cd PHASE-SYSTEM
>vagrant init centos/8
Vagrantfileが作成されますが、そのままでは特別な設定はしてくれません。仮想マシン作成時にライブラリや追加プログラムをインストールするように、このファイルを修正します。
Vagrant.configure("2") do |config|
config.vm.box = "centos/8"
# config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = "2"
end
# SHELL
config.vm.provision "shell", inline: <<-SHELL
# yum groupinstall -y base-x # "X Window System" for CentOS7
# yum groupinstall -y GNOME # "GNOME Desktop" for CentOS7
yum install -y gcc-gfortran gcc-c++
yum install -y openmpi-devel # "openmpi3-devel" for CentOS7
yum install -y fftw-static
yum install -y gnuplot
# yum install -y epel-release
# yum install -y --enablerepo=epel grace
echo 'PATH=$PATH:/usr/lib64/openmpi/bin' >> .bashrc # "/usr/lib64/openmpi3/bin" for CentOS7
SHELL
end
メモリ量vb.memory
(メガバイト単位)とCPU数vb.cpus
は、ご利用の計算機に合わせて変更してください。
OpenMPIが/usr/lib64/openmpi/に、FFTWが/usr/lib64にインストールされます。また、OpenMPI関係のコマンドにパスが通らないので、パスに追加する記述を.bashrcに加えています。
先にインストールしたプラグインを利用して、Windowsのディレクトリ(ここではPHASE-SYSTEM)と、Linux仮想マシンの/vagrantディレクトリを共有します。
X Window Systemを利用する場合は、base-x
行のコメントを外します(先頭の#を削除)。base-x
の代わりにGNOME
を指定すると、たくさんのソフトウェアが追加されます。X Serverは別に用意してください。
grace
epel-release
については後述のABINITの項を参照してください。
仮想マシンの準備ができました。以上の操作は、次回以降必要ありません。
このように作成した仮想マシンのディスクサイズは10GBに設定されています。大規模電子状態計算を実行するには、容量が不足気味です。そこで計算データを/vagrant
ディレクトリに格納することを提案します。このディレクトリの実体は直接Windowsのファイルシステムにあるので、仮想ディスクの容量制限を受けずに利用できます。ただしWindowsファイルシステムですので、ファイル名の大文字小文字の区別ができないなどの理由で問題が生じることがあります。例えば下記手順でのコンパイルに失敗することがあります。計算データの格納に限定すると、問題が生じにくいと思います。
ファイル共有設定について
Box centos/8
(v1905.1)は入手直後の状態ではファイル共有に失敗しました。初回起動時は上記のようにVagrantfile
のconfig.vm.synced_folder
行をコメントアウトして、ファイル共有しないでください。
起動後にソフトウェアを追加すると、ファイル共有の準備が整います。
$ sudo yum install -y elfutils-libelf-devel
Vagrantfile
のconfig.vm.synced_folder
行を有効にしてから再起動してください。
利用方法
仮想マシンを起動します。
>vagrant up
仮想マシンを状態を確認します。
>vagrant status
仮想マシンにログインします。コマンドプロンプトに戻るためには、exit
コマンドを実行して下さい。
>vagrant ssh
他のソフトウェアを使って仮想マシンにログインする際に必要な情報を表示します。ホスト名127.0.0.1
、ポート番号(最初に起動した仮想マシンでは2222
、二つ目以降は別の数字)、ユーザー名vagrant
の他に、秘密鍵ファイルprivate_key
へのパスを読み取ります。パスワードは使いません。
>vagrant ssh-config
仮想マシンを停止させます。
>vagrant halt
仮想マシンを再起動します。
>vagrant reload
仮想マシンを削除します。Vagrantfile
は削除されませんので、vagrant up
コマンドで仮想マシンが再作成されます。
>vagrant destroy
アプリケーションソフトウェア導入
PHASE/0
平面波基底を採用した密度汎関数法による第一原理擬ポテンシャルバンド計算ソフトウェアです。
PHASE/0の最新版はパッチ(差分)形式で提供される場合があります。現在最新版2019.01.01は、2019.01(phase0_2019.01.tar.gz)に対するパッチ(phase0_2019.01.01.patch)が提供されています。
パッチ適用にはpatch
コマンドを使います。同コマンドがない場合は、追加インストールしてください。
$ sudo yum install -y patch
WindowsのPHASE-SYSTEMディレクトリに、PHASE/0配布物(上記二つのファイル)を配置してから、仮想マシンを起動します。
>vagrant ssh
$ tar zxf /vagrant/phase0_2019.01.tar.gz
$ patch -p 0 < /vagrant/phase0_2019.01.01.patch
$ cd phase0_2019.01
$ ./install.sh
選択肢はGNU Linux (EM64T/AMD64)
GNU Compiler collection (gfortran)
MPI parallel
Open MPI
Netlib BLAS/LAPACK
FFTW3 library
を選びます。FFTWライブラリのインストール場所は、/usr/lib64
です。
コンパイルが終わったら、テスト計算を実行しましょう。
$ cd samples/Si8
$ mpiexec -n 2 ../../bin/phase ne=1 nk=2
Elk
第一原理全電子計算ソフトウェアです(FP-LAPW法)。
libxc
Elk等の第一原理計算ソフトウェアと組み合わせて、様々な交換相関エネルギー汎関数を使うためのライブラリです。
$ tar zxf /vagrant/libxc-4.3.4.tar.gz
$ cd libxc-4.3.4
$ ./configure
$ make
Elkのコンパイルに必要なファイルは、src/.libsの下にあるlibxc.a
とlibxcf90.a
です。
Elk
$ tar zxf /vagrant/elk-6.3.2.tgz
$ cd elk-6.3.2
$ ./setup
コンパイラを選択するように促されるので2番のGNU Fortran (gfortran) with OpenMP
を選びます。
続けてmake.inc
を編集します。
MPI並列に対応させます。
#SRC_MPI = mpi_stub.f90
F90 = mpif90
F77 = mpif90
SRC_MPI =
libxcにも対応させます。
#SRC_libxc = libxcifc_stub.f90
LIB_libxc = libxcf90.a libxc.a
SRC_libxc = libxc_funcs.f90 libxc.f90 libxcifc.f90
libxcをコンパイルして作成したlibxc.a
とlibxcf90.a
を、src
にコピーしてからmake
を実行します。
$ cp ../libxc-4.3.4/src/.libs/libxc.a src/
$ cp ../libxc-4.3.4/src/.libs/libxcf90.a src/
$ make
テスト計算を実行します。
$ cd examples/basic/Si
$ export OMP_NUM_THREADS=1
$ mpiexec -n 2 ../../../src/elk > Log
ABINIT
PHASE/0と同種の、平面波基底を採用した密度汎関数法による第一原理擬ポテンシャルバンド計算ソフトウェアです。
ABINITは計算結果可視化用にGraceのファイルを出力します。Graceのインストールは後述します。
Elkと同様にlibxcに対応していますが、個別にコンパイルしたlibxcではなく、特別なバージョンを利用します。configure時にソースコードをダウンロードしますので、ネットワーク接続が必要です。
$ tar zxf /vagrant/abinit-8.10.3.tar.gz
$ cd abinit-8.10.3
$ ./configure FC=mpif90 CC=mpicc --enable-mpi --with-dft-flavor=libxc
$ make
tests/tutorial/Input/tbase3_5
がシリコンのバンド構造図の例題です。
$ cd tests/tutorial/Input
$ mkdir work
$ cd work
$ sed -e "s/_1/_5/" ../tbase3_x.files > file_names.data
$ mpiexec -n 2 ../../../../src/98_main/abinit < file_names.data > Log
$ gracebat tbase3_xo_DS2_EBANDS.agr -printfile band.eps
band.eps
がバンド構造図です。GNOME Desktop
をインストールしていれば、evince
コマンドで表示できます。
$ evince band.eps
Graceを用意:拡張パッケージ利用
(執筆時点ではCentOS8非対応)
Graceは拡張パッケージEPELのリポジトリからインストールするのが簡単です。
仮想マシン作成時でなく、追加インストールする場合はsudoコマンドを使います。
$ sudo yum install -y epel-release
$ sudo yum install -y --enablerepo=epel grace
Graceを用意:ソースコードから
新しいバージョンのOSでは、拡張パッケージの準備ができていない場合があります。その場合は、ソースコードからインストールします。
$ sudo yum install -y motif-devel
$ tar zxf grace-5.1.25.tar.gz
$ cd grace-5.1.25
$ ./configure
$ sudo make install
/usr/local/grace/
以下にインストールされます。環境変数PATHを設定するか、コマンド実行の際にフルパスで指定してください。
$ /usr/local/grace/bin/gracebat tbase3_xo_DS2_EBANDS.agr -printfile band.eps