moku-moku

Elk

オープンソースの全電子計算ソフトウェアです。

インストール

以下の環境におけるインストール手順です。

Libxcのコンパイル

Elkを使う動機の一つに、様々な交換相関汎函数を利用することが挙げられます。 その実現のためにLibxcを利用します。

公式サイトから最新版ソースコード一式をダウンロードします。 執筆時点の最新版は7.1.2です。

Linuxの標準的な手順でインストールします。 aclocalコマンドがない場合は、libtoolを追加インストールしてください。 oneAPIを利用する場合は、Cコンパイラのコマンドを指定します(CC=icx FC=ifx)。 インストール先は、ホームディレクトリ直下のlocalとしてみます。

tar xf libxc-7.1.2.tar.gz
cd libxc-7.1.2
aclocal
autoreconf -f -i
./configure CC=icx FC=ifx --prefix=$HOME/local --enable-static
make install

$HOME/local/libディレクトリに、ライブラリが生成されています。

$ ls $HOME/local/lib
libxc.a  libxcf03.a  ...

Elkのコンパイル

続けてElk本体をコンパイルします。

公式サイトからソースコードをダウンロードします。 執筆時点の最新版は11.2.3です。

tar xf elk-11.2.3.tgz
cd elk-11.2.3

make.incを編集します。 まずコンパイラに関して、Intel Fortran compiler classic (ifort)を使う場合は変更しません。 最新のoneAPI(LLVM-based compiler; ifx)を利用する場合は、以下の様に行先頭の#を消去してください。

# Intel Fortran LLVM-based compiler (ifx).
F90 = mpiifx
F90_OPTS = -O3 -xHost -ipo -qopenmp -qmkl=parallel
F90_LIB = -liomp5 -lpthread -lm -ldl
SRC_MKL =
AR = xiar

(oneAPI 2025から、ifortは廃止されています。)

次に、Libxcを有効にするために、以下の様に行先頭#を消去してください。

LIB_LIBXC = libxcf03.a libxc.a
SRC_LIBXC = libxcf03.f90 libxcifc.f90

インストール済みLibxcから、$HOME/local/libにあるlibxcf03.alibxc.aの二つを、Elkのsrcディレクトリにコピーします。

cp $HOME/local/lib/libxcf03.a src
cp $HOME/local/lib/libxc.a src

(前者は無くても動作します;使わない場合は、make.incLIB_LIBXCから削除します。)

このままではコンパイルエラーになるので、ELKのソースコードを以下のように修正します。

--- libxcf03.f90.org    2026-08-21 16:10:10.534636330 +0900
+++ libxcf03.f90        2026-08-21 16:10:50.487787371 +0900
@@ -296,7 +296,7 @@ module xc_f03_lib_m
       type(c_ptr), value :: p
     end subroutine xc_func_free

-    subroutine libxc_free(p) bind(c)
+    subroutine libxc_free(p) bind(c, name="free")
       import
       type(c_ptr), value :: p
     end subroutine libxc_free

以上で準備が整いました。 makeコマンドでコンパイルします。

make

srcディレクトリにelkコマンドが生成されていることを確認してください。

$ ls src/elk
src/elk