pimd+qe+aenetのコンパイル

東京大学物性研のohtakaでpimd+qe+aenetのコンパイル方法を紹介する。
まず、ohtakaのhomeにはいてください。windowsの場合は、Tera Termで登録してください。

```ruby:
cd ~
mkdir PIMD
cd PIMD
mkdir src
cd src
```
##PIMDのダウンロード
<dl>
<dd>~/PIMD/src以下でPIMD 2.4.0用ディレクトリを作成します。~/PIMD/src/pimd-2.4.0で以下を実行しpimd-2.4.0のソースコードをダウンロード、解凍します。<dd>
<dl>

```ruby:
wget https://ccse.jaea.go.jp/software/PIMD/download/pimd.2.4.0.tar.gz
```
```ruby:
gunzip pimd.2.4.0.tar.gz
```
```ruby:
tar xvf pimd.2.4.0.tar
```

```ruby:
mkdir compile
```
```ruby:
cd compile
```
```ruby:
cp ../source/* .
```
```ruby:
vi makefile
```
makefileの中身を変えてください。
```ruby:
FCMP = mpiifort
```

```ruby:
#     MAC OSX:
OPTS   =  -O2 -g -traceback -w \
          -static-intel -qopenmp \
          -I${MKLROOT}/include/fftw
```
```ruby:
 #     compile PIMD with QE
 QE = -Dqe

#     compile PIMD without QE
#QE =
```
```ruby:
LIBQE = -L../lib/qe/q-e-qe-6.2.1/qelib -lqe -L.
LIBMKL = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 \
         -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core
```
```ruby:
#     compile PIMD with AENET
 AENET = -Daenet

#     compile PIMD without AENET
#AENET =
```
```ruby:
LIBAENET    = -I../lib/aenet/aenet-2.0.3/src \
              ../lib/aenet/aenet-2.0.3/src/libaenet.a \
              ../lib/aenet/aenet-2.0.3/lib/liblbfgsb.a
```
保存
```ruby:
:wq
```
##モジュールの準備
compileディレクトリで以下を実行します。
```ruby:
make common_variables.o
```
##QEのダウンロード
compileからライブラリ用ディレクトリに移動します。
```ruby:
cd ../lib/qe
```
```ruby:
wget https://github.com/QEF/q-e/archive/qe-6.2.1.zip
```
```ruby:
unzip qe-6.2.1.zip
```
```ruby:
patch -p0 < qe-6.2.1_to_pimdlib.patch
```
##QEのコンパイル
```ruby:
cd q-e-qe-6.2.1
```
```ruby:
MPIF90=mpiifort DFLAGS='-D__OPENMP -D__FFTW3 -D__MPI -D__SCALAPACK' SCALAPACK_LIBS='-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64' ./configure --enable-openmp
```
make.incが生成する。生成されたmake.incを手動で編集します。
```ruby:
vi make.inc
```
```ruby:
IFLAGS         = -I$(TOPDIR)/include -I$(TOPDIR)/FoX/finclude -I../include/ -I/opt/intel/oneapi/mkl/2023.0.0/include -I$(MKLROOT)/include/fftw -I../../../compile
```
```ruby:
MPIF90         = mpiifort
F90           = ifort
CC             = icc
F77            = ifort
```
```ruby:
CFLAGS         = -O3 $(DFLAGS) $(IFLAGS)
F90FLAGS       = $(FFLAGS) -nomodule -qopenmp -fpp $(FDFLAGS) $(IFLAGS) $(MODFLAGS)
FFLAGS         = -O2 -assume byterecl -g -traceback -qopenmp
```
```ruby:
FFLAGS_NOMAIN   = -nofor_main
```
```ruby:
LD             = mpiifort
LDFLAGS        =  -qopenmp
LD_LIBS        =
```

```ruby:
BLAS_LIBS      =   -lmkl_intel_lp64  -lmkl_intel_thread -lmkl_core
BLAS_LIBS_SWITCH = external
```
```ruby:
:wq
```
保存。これで準備ができましたのでpw.x（libqepw.a）をビルドします。
```ruby:
make pw
```
##AENETのダウンロード
```ruby:
cd ../../aenet/
```
```ruby:
wget http://ann.atomistic.net/files/aenet-2.0.3.tar.bz2
```
```ruby:
tar jxvf aenet-2.0.3.tar.bz2
```
```ruby:
cd aenet-2.0.3
```
```ruby:
patch -u -p1 -d src < ../src.patch
```
```ruby:
cd lib
```
```ruby:
vi Makefile
```
Makefileの中身を変更
```ruby:
FC      = ifort -c
FCFLAGS = -O2

SHRLD    = gcc
SHRFLAGS = -fPIC
SHARED   = -shared
SHRLIB   = -lm -lgfortran

TAR       = tar
AR        = ar
ARFLAGS   = -crusv
```

```ruby:
:wq
```
保存する。コンパイルを実行します。
```ruby:
make
```
```ruby:
cd ../src/makefiles/
```
```ruby:
vi Makefile.ifort_intelmpi
```
以下の部分が違いましたら、編集してください。
```ruby:
SUFFIX   = ifort_intelmpi

FC       = mpiifort -c
LD       = mpiifort
DEBUG    =
FCFLAGS  = -DPARALLEL -O2 $(DEBUG)
LDFLAGS  = -static-intel $(DEBUG)
NUMLIB   = -Wl,--start-group \
           $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
           $(MKLROOT)/lib/intel64/libmkl_core.a \
           $(MKLROOT)/lib/intel64/libmkl_sequential.a \
           -Wl,--end-group -lpthread -lm

CC       = gcc -c
CCFLAGS  =
```
```ruby:
:wq
```
保存する。makeを実行します。
```ruby:
cd ..
```
```ruby:
make -f makefiles/Makefile.ifort_intelmpi lib
```
##PIMDのコンパイル
```ruby:
cd ../../../qe/q-e-qe-6.2.1/PW/src/
```
libqepw.aというファイルが出ていることを確認する。
```ruby:
cd ../../../../../compile/
```
```ruby:
make
```
完成！
```ruby:
ls
```
pimd.mpi.x   pimd.x　この二つのファイルができたかを確認してください。