CP2K@OCTOPUS

阪大サイバーメディアセンターに新しいクラスターOCTOPUSが導入され、Intel Compilerがver2017しかないということで、これを機に最新版のCP2Kを主要なライブラリも全部つけてコンパイルすることにした。こういうビルドの情報って、イギリスとかだと公開してくれるのだが、日本だとあまり共有されない。そこそこ時間を要したので貼ることにする。

OSはRHEL7.3、コンパイラ・ライブラリは
intel compiler & libraries 2017.5.239
のコンパイラ、mkl、intel mpi。これしか選べない。

libint-1.1.4
libxc-2.2.3 or 4.0.4を解凍し、ビルドする。
configure時に FC=ifort、CC=icc、CXX=icpcをつけるのと、prefixを指定する。

またcp2k-5.1/toolsにあるautotune_grid/でlibgrid.aを、build_libsmmでlinux_libsmm.aをそれぞれ指示に従ってビルドする。これらはいずれも1晩くらいかかる。

それでarchファイルはlibxcが2.2.3の場合、

CC = icc
CPP =
FC = mpiifort
LD = mpiifort
AR = ar -r

LIBXC_DIR = /somewhere/somepath/libxc-2.2.3
LIBINT_DIR = /somewhere/somepath/libint-1.1.4
LIBSMM_DIR = /somewhere/somepath/cp2k-5.1/tools/build_libsmm
LIBGRID_DIR = /somewhere/somepath/cp2k-5.1/tools/autotune_grid

CPPFLAGS =
DFLAGS = -D__MKL -D__FFTW3 -D__LIBINT -D__LIBXC -D__parallel \
-D__SCALAPACK -D__HAS_smm_dnn -D__HAS_LIBGRID \
-I$(LIBXC_DIR)/include
CFLAGS = $(DFLAGS)
FCFLAGS = $(DFLAGS) -O2 -g -traceback -fpp -free \
-I$(MKLROOT)/include -I/somewhere/somepath/fftw-3.3.7/include
FCFLAGS2 = $(DFLAGS) -O1 -g -traceback -fpp -free \
-I$(MKLROOT)/include -I//somewhere/somepath/fftw-3.3.7/include
FCFLAGS3 = $(DFLAGS) -O0 -g -traceback -fpp -free \
-I$(MKLROOT)/include -I//somewhere/somepath/fftw-3.3.7/include
LDFLAGS = $(FCFLAGS) -static-intel
LDFLAGS_C = $(FCFLAGS) -static-intel -nofor_main
LIBS = $(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
-Wl,–start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
$(MKLROOT)/lib/intel64/libmkl_sequential.a \
$(MKLROOT)/lib/intel64/libmkl_core.a \
$(MKLROOT)/lib/intel64/libmkl_blacs_intelmpi_lp64.a -Wl,–end-group \
-lpthread -lm \
//somewhere/somepath/fftw-3.3.7/lib/libfftw3.a \
$(LIBINT_DIR)/lib/libderiv.a $(LIBINT_DIR)/lib/libint.a -lstdc++ \
-L$(LIBXC_DIR)/lib -lxcf90 -lxc \
$(LIBSMM_DIR)/lib/libsmm_dnn.a $(LIBGRID_DIR)/libgrid.a

# Required due to memory leak that occurs if high optimisations are used
mp2_optimize_ri_basis.o: mp2_optimize_ri_basis.F
../../../tools/build_utils/fypp -n $< $*.F90
$(FC) -c $(FCFLAGS3) -I’$(dir $<)’ $*.F90

libxc-4.0.4の場合は、リンクに記されているようにパッチを当て、libxc-2.2.3→libxc-4.0.4、-lxcf90→-lxcf03と変更。

これで

make ARCH=OCTOPUS VERSION=popt

でビルドしてエラーが出なければ

make ARCH=OCTOPUS VERSION=popt test

を実行するとテストが実行され、すべて成功した!なお、ulimit -s unlimitedをつけておかないとかなりのテストが失敗する。このマシン、デフォルトのスタックサイズが異様に小さい。バッチジョブを投げるときも必要。

Number of FAILED tests 0
Number of WRONG tests 0
Number of CORRECT tests 3011
Number of NEW tests 0
Total number of tests 3011

なお、旧バージョンのCP2Kのリスタートファイルを流すときは、BASIS SET、POTENTIALの詳細情報を消さないと流れない。

また、libxc-3.0.1はコンパイルがうまくいかなかった。