How to use mVMC?

要件

mVMCのコンパイル \(\cdot\) 使用には次のものが必要です。

  • Cコンパイラ (インテル、富士通、GNUなど)

  • MPIライブラリ

  • LAPACKライブラリ (インテルMKL, 富士通, ATLASなど)

  • オプション:ScaLAPACKライブラリ

注釈

intelコンパイラーでの設定

intelコンパイラを使用する場合には、コンパイラに付属の設定用スクリプトを使用するのが簡単です。

64ビットOSでbashを使っている場合には

$ source /opt/intel/bin/compilervars.sh intel64

または

$ source /opt/intel/bin/iccvars.sh intel64
$ source /opt/intel/mkl/bin/mklvars.sh

等を ~/.bashrc に記載してください。 詳しくはお手持ちのコンパイラ、ライブラリのマニュアルをお読みください。

インストール方法

mVMC は次の場所からダウンロードできます。 https://github.com/issp-center-dev/mVMC/releases

ダウンロードしたファイルを次のように展開してください。

$ tar xzvf mVMC-xxx.tar.gz

mVMCは次の2通りの方法でインストールできます。

mVMCconfig.sh を使う方法

展開したディレクトリのなかにある mVMCconfig.sh スクリプトを次のように実行してください。 (物性研システムB”sekirei”の場合)

$ bash mVMCconfig.sh sekirei

これによりコンパイル環境設定ファイル make.syssrc/ ディレクトリに作られます。 mVMCconfig.sh の引数は次のものに対応しています。

  • sekirei : 物性研究所システムB "sekirei"

  • kei : 京コンピューターおよび物性研究所システムC "maki"(FX10)

  • intel-openmpi : Intel コンパイラ + OpenMPI

  • intel-mpich : Intelコンパイラ + MPICH2

  • intel-intelmpi : Intelコンパイラ + IntelMPI

  • gcc-mpich-mkl : GCC + MPICH + MKL

  • gcc-openmpi : GCC + OpenMPI

make.sys の中身は次のようになっています(物性研システムB "sekirei"の場合)。

CC = mpicc
F90 = mpif90
CFLAGS = -O3 -no-prec-div -xHost -qopenmp -Wno-unknown-pragmas
FFLAGS = -O3 -implicitnone -xHost
LIBS = -L $(MKLROOT)/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 \
        -lmkl_intel_thread -lmkl_core -lmkl_blacs_sgimpt_lp64 -lpthread -lm
SFMTFLAGS = -no-ansi-alias -DHAVE_SSE2

となります。それぞれのマクロ(変数)の説明は次のとおりです。

  • CC : C コンパイラー( mpicc, mpifccpx など)

  • F90 : fortran コンパイラー( ifort, frtpx など)

  • LIBS : リンカーオプション。

  • CFLAGS : C コンパイルオプション。

  • FFLAGS : fortran コンパイルオプション。

これでコンパイルのための準備が整います。その後

$ make mvmc

とすることで実行可能ファイル vmc.outvmcdry.outsrc/内に 生成されるので、 このディレクトリにパスを通すか、 パスの通っている場所にシンボリックリンクを作ってください。

実行ファイルにパスを通す時には、次のようにします。 $ export PATH=${PATH}: /src/ この設定を常に残すには、例えばログインシェルが bash の場合には ~/.bashrc ファイルに上記のコマンドを記載します。

cmakeを使う方法

mVMCを展開したディレクトリのパスを$PathTomvmc、ビルドディレクトリを$HOME/build/mvmc (任意の場所を指定可能)とした場合に、

cd $HOME/build/mvmc
cmake -DCONFIG=gcc $PathTomvmc
make

でコンパイルすることができます。コンパイル後、 $HOME/build/mvmc 直下に src フォルダが作成され、実行ファイルである vmc.out がそのフォルダ内に作成されます。

なお、上の例ではgccコンパイラを前提としたコンパイルになっていますが、

  • sekirei : 物性研究所システムB "sekirei"

  • fujitsu : 富士通コンパイラ

  • intel : intelコンパイラ + Linux PC

  • gcc : GCC + Linux PC

のオプションが用意されています。以下、mVMCを展開したディレクトリでビルドする例を示します(intelコンパイラの場合)。

mkdir ./build
cd ./build
cmake -DCONFIG=intel ../
make

実行後、 build/ フォルダ直下に src/ フォルダが作成され、 vmc.outsrc/ フォルダ内に作成されます。 また、LAPACKに代わりScaLAPACKを計算に使用することが可能です。その場合には、

-DUSE_SCALAPACK=ON -DSCALAPACK_LIBRARIES="xxx"

をcmakeをする際に付け加えてください(xxxにはScaLAPACKを利用するためのライブラリ一式を指定します)。 なお、コンパイラを変更しコンパイルし直したい場合には、都度buildフォルダごと削除を行った上で、新規に上記作業を行うことをお薦めします。

注釈

sekirei で cmake を利用するには

$ source /home/issp/materiapps/tool/env.sh

をあらかじめ実行する必要があります。

またScaLAPACK を利用するには

cmake -DCONFIG=sekirei ../ -DUSE_SCALAPACK=ON

を行うと、デフォルトで

-DSCALAPACK_LIBRARIES="\${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64
-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core
-lmkl_blacs_sgimpt_lp64"

が指定されます。ライブラリへのパスが異なる場合には、 -DSCALAPACK_LIBRARIES を適宜変更してください。

ディレクトリ構成

mVMC-xxx.gzを解凍後に構成されるディレクトリ構成を以下に示します。:

.
|-- CMakeLists.txt
|-- COPYING
|-- README.md
|-- config/
|   |-- fujitsu.cmake
|   |-- gcc.cmake
|   |-- intel.cmake
|   `-- sekirei.cmake
|-- dist.sh*
|-- doc/
|   |-- CMakeLists.txt
|   |-- bib/
|   |-- en/
|   |-- figs/
|   |-- ja/
|   |-- package/
|   `-- userguide.html
|-- mVMCconfig.sh
|-- samples/
|   |-- Standard/
|   |   |-- Hubbard/
|   |   |-- Kondo/
|   |   `-- Spin/
|   `-- Wannier/
|       |-- Sr2CuO3/
|       `-- Sr2VO4/
|-- src/
|   |-- ComplexUHF/
|   |-- StdFace/
|   |-- common/
|   |-- mVMC/
|   |-- pfapack/
|   `-- sfmt/
|-- test/
|   |-- CMakeLists.txt
|   |-- python/
|   `-- tool/
`-- tool/

基本的な使い方

mVMCは次の二つのいずれかのモードで動作します。

  • エキスパートモード

    mVMCでは一般的な格子フェルミオン/スピン系に対応しており、 各サイト毎にホッピング等を別々に指定することが出来ます。 これにより計算対象の柔軟な指定が可能となりますが、用意する入力ファイルは多く、 計算のセットアップは比較的煩雑になります。

  • スタンダードモード

    典型的なモデル(正方格子上のHeisenbergモデルなど)では、 計算するセルのサイズや共通の相互作用項の大きさなど少数のパラメーターのみを入力して エキスパートモード用の入力ファイルを自動生成し、計算をすることが出来ます。 計算対象はエキスパートモードに比べて限られますが、比較的容易に計算をセットアップすることが出来ます。 また、エキスパートモード用の入力ファイルを自動生成した後、計算をする前にそれらを手動で編集して より広範なモデルに対応させることも可能です。

これらのモードを用いて次の用に計算を行います。

  1. 計算用ディレクトリの作成

    計算シナリオ名を記載したディレクトリを作成します。

  2. スタンダードモードの入力ファイルの作成

    あらかじめ用意されたいくつかのモデル(HeisenbergモデルやHubbardモデル)や格子(正方格子など)を指定し、 それらに対するいくつかのパラメーター(最近接 \(\cdot\) 次近接スピン結合やオンサイトクーロン積分など)を設定します。 各ファイルは スタンダードモード用入力ファイル書式 に従い記載してください。

  3. 実行

    作成した入力ファイル名を引数として vmc.out を実行します。 このとき入力ファイル名の前にオプション -s を付けます。

    $ mpiexec -np プロセス数 パス/vmc.out -s 入力ファイル
    

    ワークステーションやスパコン等でキューイングシステムを利用している場合は プロセス数をジョブ投入コマンドの引数として与える場合があります。 詳しくはお使いのシステムのマニュアルをご参照ください。

  4. 途中経過

    計算実行の経過についてカレントディレクトリ直下の output/ ディレクトリ(無ければ作られる)にログファイルが出力されます。 出力されるファイルの詳細に関しては 出力ファイル を参考にしてください。

  5. 最終結果

    計算が正常終了した場合、 計算モードに従い output/ ディレクトリに計算結果ファイルが出力されます。 出力されるファイルの詳細に関しては 出力ファイル を参考にしてください。

  6. エキスパートモードの入力ファイルの作成と実行

    上の例ではエキスパートモードのファイルを自動生成した後そのまま計算を開始していますが、 エキスパートモードのファイルの生成のみを行う場合には vmcdry.out を実行します。 MPIは使用しません。

    $ パス/vmcdry.out 入力ファイル
    

    このとき生成されたファイルを必要に応じて手動で編集したのち、 -e というオプションの後に namelist/def というファイルを引数として vmcd.out を実行します。

    $ mpiexec -np プロセス数 パス/vmc.out -e namelist.def
    

    以降はスタンダードモードと同様です。

OpenMPスレッド数の指定

実行時のOpenMPのスレッド数を指定する場合は、 vmc.out を実行する前に以下の様にしてください(16スレッドの場合)。

export OMP_NUM_THREADS=16

バージョン番号の確認

次のように -v オプションをつけて vmc.out, vmcdry.out を実行すると, バージョン番号を標準出力した後終了します。

$ パス/vmcdry.out -v
$ パス/vmc.out -v