diff --git a/arch/Eiger-mc-intel.psmp b/arch/Eiger-mc-intel.psmp new file mode 100644 index 0000000000..efa8ed1851 --- /dev/null +++ b/arch/Eiger-mc-intel.psmp @@ -0,0 +1,392 @@ +#!/bin/bash +# +# CP2K (Intel/MKL x86_64) arch file for the Alps/Eiger (AMD Zen 2) cluster at CSCS +# +# Tested with: Intel 2021.10.0, Intel MPI, Intel MKL, +# LIBINT 2.6.0, LIBXC 6.2.2, ELPA 2024.03.001, +# PLUMED 2.9.0, SPGLIB 2.3.1, LIBVORI 220621, +# GSL 2.7, COSMA 2.6.6, HDF5 1.14.2, SIRIUS 7.5.2, +# LIBGRPP 20231215, SPFFT 1.1.0, SPLA 1.6.1, +# DFTD4 3.6.0 +# on the Alps/Eiger (CSCS) +# +# Usage: Source this arch file and then run make as instructed. +# Replace or adapt the "module load" commands below if needed. +# +# Last update: 16.07.2024 +# +# \ + if [[ "${0}" == "${BASH_SOURCE}" ]]; then \ + echo "ERROR: Script ${0##*/} must be sourced"; \ + echo "Usage: source ${0##*/}"; \ + exit 1; \ + fi; \ + this_file=${BASH_SOURCE##*/}; \ + cd tools/toolchain; \ + rm -rf build; \ + module load cray; \ + module load cpeIntel; \ + module load cray-fftw; \ + module list; \ + ./install_cp2k_toolchain.sh -j32 --enable-cray --no-arch-files --target-cpu=core-avx2 --with-dftd4 --with-elpa --with-fftw --with-libtorch=no --with-intel --with-mkl --with-libtorch=no --with-libvdwxc --with-pexsi --with-plumed --with-quip=no; \ + source ./install/setup; \ + cd ../..; \ + echo; \ + echo "Check the output above for error messages and consistency!"; \ + echo; \ + echo "If everything is OK, you can build a CP2K production binary with"; \ + echo " make -j ARCH=${this_file%.*} VERSION=${this_file##*.}"; \ + echo; \ + echo "Alternatively, you can add further checks, e.g. for regression testing, with"; \ + echo " make -j ARCH=${this_file%.*} VERSION=${this_file##*.} DO_CHECKS=yes"; \ + echo; \ + return + +# Set options +DO_CHECKS := no +SHARED := no +TARGET_CPU := native +USE_COSMA := 2.6.6 +USE_DFTD4 := 3.6.0 +USE_ELPA := 2024.03.001 +USE_HDF5 := 1.14.2 +USE_LIBGRPP := 20231215 +USE_LIBINT := 2.6.0 +USE_LIBPEXSI := 1.2.0 +#USE_LIBTORCH := 1.12.1 +USE_LIBVORI := 220621 +USE_LIBXC := 6.2.2 +USE_LIBXSMM := 1.17 +USE_PLUMED := 2.9.0 +USE_SIRIUS := 7.5.2 +USE_SPFFT := 1.1.0 +USE_SPGLIB := 2.3.1 +USE_SPLA := 1.6.1 +# Only needed for SIRIUS +LIBVDWXC_VER := 0.4.0 +# Only needed for LIBPEXSI +SCOTCH_VER := 6.0.0 +SUPERLU_VER := 6.1.0 + +LMAX := 5 +MAX_CONTR := 4 + +CC := cc +FC := ftn +LD := ftn +AR := ar -r + +CFLAGS := -O2 -fPIC -fp-model precise -funroll-loops -g -mtune=core-avx2 -qopenmp -qopenmp-simd -traceback +CFLAGS += -diag-disable=10448 + +DFLAGS := -D__parallel +DFLAGS += -D__SCALAPACK +DFLAGS += -D__MKL +DFLAGS += -D__FFTW3 +DFLAGS += -D__MAX_CONTR=$(strip $(MAX_CONTR)) + +INSTALL_PATH := $(PWD)/tools/toolchain/install + +MKL_LIB := $(MKLROOT)/lib/intel64 + +ifeq ($(SHARED), yes) + LD_SHARED := $(FC) -shared + CFLAGS += -fPIC + LDFLAGS := -Wl,--enable-new-dtags + CP2K_LIB := $(PWD)/lib/$(ARCH)/$(ONEVERSION) + LDFLAGS += -Wl,-rpath=$(CP2K_LIB) + LDFLAGS += -Wl,-rpath=$(CP2K_LIB)/exts/dbcsr +else + LDFLAGS := -static-intel +endif + +# Settings for regression testing +ifeq ($(DO_CHECKS), yes) + DFLAGS += -D__CHECK_DIAG +endif + +ifneq ($(USE_PLUMED),) + USE_PLUMED := $(strip $(USE_PLUMED)) + PLUMED_LIB := $(INSTALL_PATH)/plumed-$(USE_PLUMED)/lib + DFLAGS += -D__PLUMED2 + USE_GSL := 2.7 + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(PLUMED_LIB) -L$(PLUMED_LIB) -lplumed -lplumedKernel + else + LIBS += $(PLUMED_LIB)/libplumed.a + endif +endif + +ifneq ($(USE_ELPA),) + USE_ELPA := $(strip $(USE_ELPA)) + ELPA_INC := $(INSTALL_PATH)/elpa-$(USE_ELPA)/cpu/include/elpa_openmp-$(USE_ELPA) + ELPA_LIB := $(INSTALL_PATH)/elpa-$(USE_ELPA)/cpu/lib + CFLAGS += -I$(ELPA_INC)/elpa -I$(ELPA_INC)/modules + DFLAGS += -D__ELPA + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(ELPA_LIB) -L$(ELPA_LIB) -lelpa_openmp + else + LIBS += $(ELPA_LIB)/libelpa_openmp.a + endif +endif + +ifneq ($(USE_LIBPEXSI),) + USE_LIBPEXSI := $(strip $(USE_LIBPEXSI)) + SCOTCH_VER := $(strip $(SCOTCH_VER)) + SUPERLU_VER := $(strip $(SUPERLU_VER)) + LIBPEXSI_INC := $(INSTALL_PATH)/pexsi-$(USE_LIBPEXSI)/include + LIBPEXSI_LIB := $(INSTALL_PATH)/pexsi-$(USE_LIBPEXSI)/lib + SCOTCH_INC := $(INSTALL_PATH)/scotch-$(SCOTCH_VER)/include + SCOTCH_LIB := $(INSTALL_PATH)/scotch-$(SCOTCH_VER)/lib + SUPERLU_INC := $(INSTALL_PATH)/superlu_dist-$(SUPERLU_VER)/include + SUPERLU_LIB := $(INSTALL_PATH)/superlu_dist-$(SUPERLU_VER)/lib + CFLAGS += -I$(LIBPEXSI_INC) -I$(SCOTCH_INC) -I$(SUPERLU_INC) + DFLAGS += -D__LIBPEXSI + LIBS += $(LIBPEXSI_LIB)/libpexsi.a + LIBS += $(SUPERLU_LIB)/libsuperlu_dist.a + LIBS += $(SCOTCH_LIB)/libptscotchparmetis.a + LIBS += $(SCOTCH_LIB)/libptscotch.a + LIBS += $(SCOTCH_LIB)/libptscotcherr.a + LIBS += $(SCOTCH_LIB)/libscotchmetis.a + LIBS += $(SCOTCH_LIB)/libscotch.a +endif + +ifneq ($(USE_LIBVORI),) + USE_LIBVORI := $(strip $(USE_LIBVORI)) + LIBVORI_LIB := $(INSTALL_PATH)/libvori-$(USE_LIBVORI)/lib + DFLAGS += -D__LIBVORI + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(LIBVORI_LIB) -L$(LIBVORI_LIB) -lvori + else + LIBS += $(LIBVORI_LIB)/libvori.a + endif +endif + +ifneq ($(USE_LIBXC),) + USE_LIBXC := $(strip $(USE_LIBXC)) + LIBXC_INC := $(INSTALL_PATH)/libxc-$(USE_LIBXC)/include + LIBXC_LIB := $(INSTALL_PATH)/libxc-$(USE_LIBXC)/lib + CFLAGS += -I$(LIBXC_INC) + DFLAGS += -D__LIBXC + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(LIBXC_LIB) -L$(LIBXC_LIB) -lxcf03 -lxc + else + LIBS += $(LIBXC_LIB)/libxcf03.a + LIBS += $(LIBXC_LIB)/libxc.a + endif +endif + +ifneq ($(USE_DFTD4),) + USE_DFTD4 := $(strip $(USE_DFTD4)) + DFTD4_INC := $(INSTALL_PATH)/dftd4-$(USE_DFTD4)/include + DFTD4_LIB := $(INSTALL_PATH)/dftd4-$(USE_DFTD4)/lib64 + CFLAGS += -I$(shell ls -d $(DFTD4_INC)/dftd4/Intel-*) + DFLAGS += -D__DFTD4 + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(DFTD4_LIB) -L$(DFTD4_LIB) -ldftd4 -lmstore -lmulticharge -lmctc-lib + else + LIBS += $(DFTD4_LIB)/libdftd4.a + LIBS += $(DFTD4_LIB)/libmstore.a + LIBS += $(DFTD4_LIB)/libmulticharge.a + LIBS += $(DFTD4_LIB)/libmctc-lib.a + endif +endif + +ifneq ($(USE_LIBGRPP),) + USE_LIBGRPP := $(strip $(USE_LIBGRPP)) + LIBGRPP_INC := $(INSTALL_PATH)/libgrpp-main-$(USE_LIBGRPP)/include + LIBGRPP_LIB := $(INSTALL_PATH)/libgrpp-main-$(USE_LIBGRPP)/lib + CFLAGS += -I$(LIBGRPP_INC) + DFLAGS += -D__LIBGRPP + LIBS += $(LIBGRPP_LIB)/liblibgrpp.a +endif + +ifneq ($(USE_LIBINT),) + USE_LIBINT := $(strip $(USE_LIBINT)) + LMAX := $(strip $(LMAX)) + LIBINT_INC := $(INSTALL_PATH)/libint-v$(USE_LIBINT)-cp2k-lmax-$(LMAX)/include + LIBINT_LIB := $(INSTALL_PATH)/libint-v$(USE_LIBINT)-cp2k-lmax-$(LMAX)/lib + CFLAGS += -I$(LIBINT_INC) + DFLAGS += -D__LIBINT + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(LIBINT_LIB) -L$(LIBINT_LIB) -lint2 + else + LIBS += $(LIBINT_LIB)/libint2.a + endif +endif + +ifneq ($(USE_SPGLIB),) + USE_SPGLIB := $(strip $(USE_SPGLIB)) + SPGLIB_INC := $(INSTALL_PATH)/spglib-$(USE_SPGLIB)/include + SPGLIB_LIB := $(INSTALL_PATH)/spglib-$(USE_SPGLIB)/lib + CFLAGS += -I$(SPGLIB_INC) + DFLAGS += -D__SPGLIB + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(SPGLIB_LIB) -L$(SPGLIB_LIB) -lsymspg + else + LIBS += $(SPGLIB_LIB)/libsymspg.a + endif +endif + +ifneq ($(USE_LIBXSMM),) + USE_LIBXSMM := $(strip $(USE_LIBXSMM)) + LIBXSMM_INC := $(INSTALL_PATH)/libxsmm-$(USE_LIBXSMM)/include + LIBXSMM_LIB := $(INSTALL_PATH)/libxsmm-$(USE_LIBXSMM)/lib + CFLAGS += -I$(LIBXSMM_INC) + DFLAGS += -D__LIBXSMM + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(LIBXSMM_LIB) -L$(LIBXSMM_LIB) -lxsmmf -lxsmm + else + LIBS += $(LIBXSMM_LIB)/libxsmmf.a + LIBS += $(LIBXSMM_LIB)/libxsmm.a + endif +endif + +ifneq ($(USE_SIRIUS),) + USE_SIRIUS := $(strip $(USE_SIRIUS)) + LIBVDWXC_VER := $(strip $(LIBVDWXC_VER)) + LIBVDWXC_INC := $(INSTALL_PATH)/libvdwxc-$(LIBVDWXC_VER)/include + LIBVDWXC_LIB := $(INSTALL_PATH)/libvdwxc-$(LIBVDWXC_VER)/lib + SIRIUS_INC := $(INSTALL_PATH)/sirius-$(USE_SIRIUS)/include + SIRIUS_LIB := $(INSTALL_PATH)/sirius-$(USE_SIRIUS)/lib + CFLAGS += -I$(LIBVDWXC_INC) + CFLAGS += -I$(SIRIUS_INC) + DFLAGS += -D__LIBVDWXC + DFLAGS += -D__SIRIUS + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(SIRIUS_LIB) -L$(SIRIUS_LIB) -lsirius + LIBS += -Wl,-rpath=$(LIBVDWXC_LIB) -L$(LIBVDWXC_LIB) -lvdwxc + else + LIBS += $(SIRIUS_LIB)/libsirius.a + LIBS += $(LIBVDWXC_LIB)/libvdwxc.a + endif +endif + +ifneq ($(USE_SPFFT),) + USE_SPFFT := $(strip $(USE_SPFFT)) + SPFFT_INC := $(INSTALL_PATH)/SpFFT-$(USE_SPFFT)/include + SPFFT_LIB := $(INSTALL_PATH)/SpFFT-$(USE_SPFFT)/lib + CFLAGS += -I$(SPFFT_INC) + DFLAGS += -D__SPFFT + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(SPFFT_LIB) -L$(SPFFT_LIB) -lspfft + else + LIBS += $(SPFFT_LIB)/libspfft.a + endif +endif + +ifneq ($(USE_SPLA),) + USE_SPLA := $(strip $(USE_SPLA)) + SPLA_INC := $(INSTALL_PATH)/SpLA-$(USE_SPLA)/include/spla + SPLA_LIB := $(INSTALL_PATH)/SpLA-$(USE_SPLA)/lib + CFLAGS += -I$(SPLA_INC) + DFLAGS += -D__SPLA + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(SPLA_LIB) -L$(SPLA_LIB) -lspla + else + LIBS += $(SPLA_LIB)/libspla.a + endif +endif + +ifneq ($(USE_HDF5),) + USE_HDF5 := $(strip $(USE_HDF5)) + HDF5_INC := $(INSTALL_PATH)/hdf5-$(USE_HDF5)/include + HDF5_LIB := $(INSTALL_PATH)/hdf5-$(USE_HDF5)/lib + CFLAGS += -I$(HDF5_INC) + DFLAGS += -D__HDF5 + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath,$(HDF5_LIB) -L$(HDF5_LIB) -lhdf5_fortran -lhdf5 + else + LIBS += $(HDF5_LIB)/libhdf5_fortran.a + LIBS += $(HDF5_LIB)/libhdf5_f90cstub.a + LIBS += $(HDF5_LIB)/libhdf5.a + endif +endif + +ifneq ($(USE_COSMA),) + USE_COSMA := $(strip $(USE_COSMA)) + COSMA_INC := $(INSTALL_PATH)/COSMA-$(USE_COSMA)/include + COSMA_LIB := $(INSTALL_PATH)/COSMA-$(USE_COSMA)/lib + CFLAGS += -I$(COSMA_INC) + DFLAGS += -D__COSMA + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(COSMA_LIB) -L$(COSMA_LIB) -lcosma_prefixed_pxgemm -lcosma -lcosta + else + LIBS += $(COSMA_LIB)/libcosma_prefixed_pxgemm.a + LIBS += $(COSMA_LIB)/libcosma.a + LIBS += $(COSMA_LIB)/libcosta.a + endif +endif + +ifneq ($(USE_GSL),) + USE_GSL := $(strip $(USE_GSL)) + GSL_INC := $(INSTALL_PATH)/gsl-$(USE_GSL)/include + GSL_LIB := $(INSTALL_PATH)/gsl-$(USE_GSL)/lib + CFLAGS += -I$(GSL_INC) + DFLAGS += -D__GSL + ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(GSL_LIB) -L$(GSL_LIB) -lgsl + else + LIBS += $(GSL_LIB)/libgsl.a + endif +endif + +ifeq ($(SHARED), yes) + LIBS += -Wl,-rpath=$(MKL_LIB) -L$(MKL_LIB) -lmkl_scalapack_lp64 + LIBS += -Wl,--start-group + LIBS += -lmkl_intel_lp64 + LIBS += -lmkl_sequential + LIBS += -lmkl_core + LIBS += -lmkl_blacs_intelmpi_lp64 + LIBS += -Wl,--end-group +else + LIBS += $(MKL_LIB)/libmkl_scalapack_lp64.a + LIBS += -Wl,--start-group + LIBS += $(MKL_LIB)/libmkl_intel_lp64.a + LIBS += $(MKL_LIB)/libmkl_sequential.a + LIBS += $(MKL_LIB)/libmkl_core.a + LIBS += $(MKL_LIB)/libmkl_blacs_intelmpi_lp64.a + LIBS += -Wl,--end-group +endif + +ifeq ($(shell [ $(shell ldd --version | head -n 1 | tr -s '.' '\n' | tail -n 1) -ge 27 ] && echo yes), yes) + ifneq ($(USE_LIBTORCH),) + USE_LIBTORCH := $(strip $(USE_LIBTORCH)) + LIBTORCH_INC := $(INSTALL_PATH)/libtorch-$(USE_LIBTORCH)/include + LIBTORCH_LIB := $(INSTALL_PATH)/libtorch-$(USE_LIBTORCH)/lib + CFLAGS += -I$(LIBTORCH_INC) + DFLAGS += -D__LIBTORCH + LIBS += -Wl,-rpath=$(LIBTORCH_LIB) -L$(LIBTORCH_LIB) -lc10 -ltorch_cpu -ltorch + endif +endif + +CFLAGS += $(DFLAGS) +CFLAGS += -I$(MKLROOT)/include +CFLAGS += -I$(MKLROOT)/include/fftw + +CXXFLAGS := $(CFLAGS) -std=c++14 + +FCFLAGS := $(CFLAGS) +FCFLAGS += -diag-disable=8291 +FCFLAGS += -diag-disable=8293 +FCFLAGS += -fpp +FCFLAGS += -fpscomp logicals +FCFLAGS += -free +#FCFLAGS += -std08 + +LDFLAGS += $(FCFLAGS) +LDFLAGS_C := -nofor-main + +LIBS += -lz -lstdc++ + +# Required due to memory leak that occurs if high optimisations are used +mp2_optimize_ri_basis.o: mp2_optimize_ri_basis.F + $(FC) -c $(subst O2,O0,$(FCFLAGS)) $< +# Required due to SEGFAULTS occurring for higher optimisation levels +paw_basis_types.o: paw_basis_types.F + $(FC) -c $(subst O2,O1,$(FCFLAGS)) $< +# Reduce compilation time +hfx_contraction_methods.o: hfx_contraction_methods.F + $(FC) -c $(subst -O2,-O1,$(FCFLAGS)) $< + +# End