Introduction :
CP2K (http://cp2k.berlios.de/) is a freely available (GPL) program, written in Fortran, to perform atomistic and molecular simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and classical pair and many-body potentials.
Version :
1.08
Obtaining Source Code :
CP2K stable version
- the cp2k-2_1-branch: ftp://ftp.berlios.de/pub/cp2k/cp2k-2_1-branch.tar.gz
- the cp2k-2_2-branch: ftp://ftp.berlios.de/pub/cp2k/cp2k-2_2-branch.tar.gz
CP2K development version
- (nightly snapshot): ftp://ftp.berlios.de/pub/cp2k/cp2k.tar.gz
Prerequisites :
CP2K requires that you already have installed the Fortran compiler, math library with FFTW 2.x/3.x support. We suggest using both Intel Fortran compiler and Intel Math Kernel Library for better performance.
Configuration Set Up :
n/a
Source Code Changes :
n/a
Building the Application :
Here we show the detail on how to build the CP2K source with Intel Fortran Compiler for Intel 64 platform.
Part I. Intel Fortran Composer XE 2011
1) Download and install Intel Fortran Composer XE 2011 (first release version 2011.0.084).
Make sure you select to install both Intel Fortran compiler and Intel Math Kernel Library (MKL). The default installation directory is/opt/intel/composerxe-2011/ .
2) Build FFTW version 3.x wrappers library for Intel MKL Library
From Intel MKL version 10.2 and later, FFTW3 interface for Intel Fortran compiler is pre-built and ntegrated in Intel MKL core libraries. See http://software.intel.com/en-us/articles/intel-mkl-main-libraries-contain-fftw3-interfaces/.
Source code is still available to create wrappers for use with other compilers. Here is example to build Fortran version by gnu compiler.
] cd /opt/intel/composerxe-2011/mkl/interfaces/fftw3xf
] make libintel64 compiler=gnu
INTEL_MKL = /opt/intel/composerxe-2011/mklNotice: The options (-O2 -xHost) are available for both Intel® and non-Intel microprocessors but it may result in more optimizations for Intel microprocessors than for non-Intel microprocessors.
INTEL_INC = $(INTEL_MKL)/include/fftw
INTEL_LIB = $(INTEL_MKL)/lib/intel64
LIBINT_PATH = /usr/lib/libint-1.1.4
LIBINT_LIB = $(LIBINT_PATH)/lib/libderiv.a $(LIBINT_PATH)/lib/libint.a -lstdc++
FC = ifort
LD = ifort
AR = xiar -r
DFLAGS = -D__INTEL -D__FFTSG -D__FFTW3 -D__FFTMKL -D__LIBINT
CPPFLAGS = -C -traditional $(DFLAGS) -I$(INTEL_INC)
FCFLAGS = $(DFLAGS) -I$(INTEL_INC) -O2 -xHost -heap-arrays 64 -fpp -free
LDFLAGS = $(FCFLAGS)
#LIBS = -mkl
LIBS = -L$(INTEL_LIB) -mkl $(LIBINT_LIB)
OBJECTS_ARCHITECTURE = machine_intel.o
] source /opt/intel/composerxe-2011/bin/compilervars.sh intel64
] cd cp2k/makefiles/
] make ARCH=Linux-x86-64-intel VERSION=sopt
] cd /opt/intel/Compiler/11.0/083/mkl/interfaces/fftw3xf
] make libem64t compiler=intel (or make libem64t compiler=gnu)
INTEL_MKL = /opt/intel/Compiler/11.0/083/mklNotice: The options (-O2 -xHost) are available for both Intel® and non-Intel microprocessors but it may result in more optimizations for Intel microprocessors than for non-Intel microprocessors.
INTEL_INC = $(INTEL_MKL)/include/fftw
INTEL_LIB = $(INTEL_MKL)/lib/em64t
FC = ifort
LD = ifort
AR = xiar -r
DFLAGS = -D__INTEL -D__FFTSG -D__FFTW3 -D__FFTMKL
CPPFLAGS = -C -traditional $(DFLAGS) -I$(INTEL_INC)
FCFLAGS = $(DFLAGS) -I$(INTEL_INC) -O2 -xHost -heap-arrays 64 -fpp -free
LDFLAGS = $(FCFLAGS)
# If you are using ifort verison 11.1 with MKL version 10.2 and later, Intel MKL libraries and FFTW interfaces will be linked automatically with -mkl option
# LIBS = -L$(INTEL_LIB) -mkl
LIBS = -L$(INTEL_LIB) -lfftw3xf_intel -lmkl_intel_lp64 -lmkl_sequential -lmkl_core
OBJECTS_ARCHITECTURE = machine_intel.o
] source /opt/intel/Compiler/11.0/083/bin/ifortvars.sh intel64
] cd cp2k/makefiles/
] make ARCH=Linux-x86-64-intel VERSION=sopt
] cd cp2k/tests/QS
] ./../../exe/Linux-x86-64-intel/cp2k.sopt H2O-32.inp
] ./../../exe/Linux-x86-64-intel/cp2k.sopt H2O-3x3.inp
FCFLAGS2 = -I$(INTEL_INC) -O1 -xHost -heap-arrays 64 -fpp -free $(DFLAGS)
qs_vxc_atom.o: qs_vxc_atom.F
$(FC) -c $(FCFLAGS2) $<
FCFLAGS2 = -I$(INTEL_INC) -O1 -xHost -heap-arrays 64 -fpp -free $(DFLAGS)
et_coupling.o: et_coupling.F
$(FC) -c $(FCFLAGS2) $<
qs_vxc_atom.o: qs_vxc_atom.F
$(FC) -c $(FCFLAGS2) $<