We recommend to try first the [[https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-11-with-gui-support#1-overview|Windows Subsystem for Linux]] (WSL) before reaching for Cygwin.
Check [[howto:compile_on_windows|this howto]] for further details.
======How to Compile and Install CP2K on Windows with Cygwin======
I believe there are several ways to build CP2K binaries for Windows. Here I describe how to install Cygwin on Windows 10/11, build CP2K with openmpi on the Cygwin, and run it on a PC without Cygwin.\\
=====1 Install Cygwin=====
[[https://www.cygwin.com|Cygwin]] is a large collection of GNU and Open Source tools which provides functionality similar to a Linux distribution on Windows, which has been used for a long time.\\
You can install Cygwin on your 64 bit Windows by using [[https://www.cygwin.com/setup-x86_64.exe|setup-x86_64.exe]]
and build cp2k on the Cygwin-Windows system.\\
When installing Cygwin, make sure that you will install the following additional packages:\\
Archive
hdf5
libhdf5-devel
Devel
bison
byacc
cmake
gcc-fortran
gcc-g++
make
GNOME
libglade
Libs
fftw3
lapack
libevent-devel
libxerces-c31
libxerces-c-devel
libfftw3-devel
libfftw3-omp3
libfftw3_3
libgsl-devel
libgsl0
libgsl19
liblapack-devel
liblapack0
libopenmpi-devel
libopenmpi12
libopenmpi40
libopenmpicxxl
libopenmpifh40
libopenmpiusef08_40
libopenmpiusetkr40
openmpi
zlib
zlib-devel
Python
Math
libopenblas
Science
gsl
Utils
hdf5
libhdf5-devel
libhwloc-devel
Follow the wizard instruction to finish the Cygwin (and packages) installation.\\
=====2 Acquire the Code=====
Download a [[https://github.com/cp2k/cp2k/releases/|release]]
(use the versioned tarballs, `cp2k-X.Y.tar.bz2`) and extract a tarball on the Cygwin64 bash terminal as follows:\\
$ tar -xvf cp2k-X.Y.tar.bz2
For more details on downloading CP2K, see [[https://www.cp2k.org/download]].\\
=====3 Build Prerequisites=====
Source codes of most prerequisities are available not only on individual supplyers but also on [[https://www.cp2k.org/static/downloads/]].\\
====3a scalapack(optional)====
Download and extract [[https://www.cp2k.org/static/downloads/scalapack-2.1.0.tgz|"scalapack-2.1.0.tgz"]].\\
Rename "SLmake.inc.example" to "SLmake.inc" in the generated "scalapack-2.1.0" directory.\\
Edit the "SLmake.inc" as follows:\\
#FCFLAGS = -O3
FCFLAGS = -O3 -w -fallow-argument-mismatch
Edit "BLACS/TESTING/Makefile" as follows:\\
#blacstest.o : blacstest.f
# $(FC) $(NOOPT) -c $*.f
blacstest.o : blacstest.f
$(FC) -c $(FCFLAGS) $*.f
Change the current directory to "scalapack-2.1.0" on the Cygwin 64 terminal and execute "make".\\
After the "make" is completed, copy the generated "libscalapack.a" to "/usr/local/lib" because "make install" does not work.\\
====3b LIBINT (optional)====
Download a CP2K-configured LIBINT library from [[https://github.com/cp2k/libint-cp2k|libint-cp2k]]
and extract the archive (e.g."libint-v2.6.0-cp2k-lmax-7.tgz") by using the similar way as the cp2k tarball case or something like [[https://www.7-zip.org|7-zip]].\\
Change the current directory to the generated libint directory and execute the following commands on Cygwin 64 bash terminal:\\
$ cd libint-v2.6.0-cp2k-lmax-7
$ ./configure --enable-fortran=yes --with-cxx=gcc
$ make
If you find a static library file "libint2.a" in "libint-v2.6.0-cp2k-lmax-7/lib/.libs" directory, the "make" is successful.\\
And then change the current directory to "fortran" and execute "make". \\
$ cd fortran
$ make
However this may result in:
"Error: missing '(' before "__has_include" operand"
and so on, the "make" is successful if "libint_f.mod" is found in the "fortran" directory.\\
Copy a generated file "libint-v2.6.0-cp2k-lmax-7/lib/.libs/linint2.a" and a "libint-v2.6.0-cp2k-lmax-7/include/libint2" directory manually into "(cygwin-root)/usr/local/lib" and "(cygwin-root)/usr/local/include" directories respectively.\\
("Make install" does not seem to work.)\\
In the arch file of CP2K: add -D__LIBINT
to the DFLAGS. Add -L/usr/local/lib -lint2 -lstdc++
to LIBS and -I/usr/local/include
to FCFLAGS. lstdc++ is needed because of using the GNU C++ compiler.\\
====3c LIBXC (optional)====
The version 5.1.0 (or later) of LIBXC can be downloaded from [[https://www.tddft.org/programs/libxc]].\\
Download and extract "libxc-5.1.0.tar.gz" by using the similar way as cp2k tarball case or something like [[https://www.7-zip.org|7-zip]].\\
Change the current directory to the "libxc-5.1.0" directory and execute the following commands on the Cygwin 64 bash terminal:\\
$ cd libxc-5.1.0
$ export F77=gfortran
$ ./configure --prefix=/usr/local
$ make
$ make install
Libxc will be installed into /usr/local/ in this case.\\
In the arch file of CP2K: add -D__LIBXC
to DFLAGS, -I/usr/local/include
to FCFLAGS and -L$/usr/local/lib -lxcf03 -lxc
to LIBS.
====3d libxsmm(optional)=====
A library for matrix operations and deep learning primitives: [[https://github.com/hfp/libxsmm/]]\\
Download and extract [[https://github.com/libxsmm/libxsmm/archive/refs/tags/1.16.1.tar.gz|"libxsmm-1.16.1.tar.gz"]].\\
Change the current directory to the "libxsmm-1.16.1" and execute the following commands on the Cygwin 64 terminal:\\
$ make
$ make PREFIX=/usr/local install
In the arch file of CP2K: add -D__LIBXSMM
to enable it, with include and library paths, i.e., FCFLAGS += -I/usr/local/include -D__LIBXSMM
and LIBS += -L/usr/local/lib -lxsmmf -lxsmm -ldl
S\\
====3e PEXSI (optional)====
PEXSI requires parmetis, scotch, CombBLAS_bata, upcxx, symPACK and superLU_dist.\\
===3e1 parmetis===
Download and extract [[http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz|"parmetis-4.0.3.tar.gz"]].\\
Cygwin does'nt have execinfo, edit "metis/GKlib/error.c" and invalidate (comment out) the "#ifdef HAVE_EXECINFO_H to #endif" section such as:\\
/*************************************************************************
* This function prints a backtrace of calling functions
**************************************************************************/
void PrintBackTrace()
{
#ifdef HAVE_EXECINFO_H
/*
void *array[10];
int i, size;
char **strings;
size = backtrace(array, 10);
strings = backtrace_symbols(array, size);
printf("Obtained %d stack frames.\n", size);
for (i=0; i
And then execute the following commands on the Cygwin terminal:
$ make config
If you find "ld: cannot find -lmpi_cxx" error during "make config (cmake)", dupulicate "cygwin/lib/libmpi.dll.a" by using cp(copy) command and rename a half of it to "libmpi_cxx.a".\\
After "make config", execute the following commands:
$ make
$ make install
Parmetis will be installed into /usr/local/ by default.\\
If you have an error during the "make", delete the all contents in "build" directory and try to rebuild.\\
===3e2 scotch===
Download and extract [[https://www.cp2k.org/static/downloads/scotch_6.0.0.tar.gz|"scotch_6.0.0.tar.gz"]].\\
(It looks like [[https://gitlab.inria.fr/scotch/scotch/-/releases|the original supplyer]] no longer supports v6.0.0.) \\
Copy "src/Make.inc/Makefile.inc.i686_pc_linux2" into "src" and rename it as "Makefile.inc".\\
Add "-DINTSIZE64 -DIDXSIZE64 -DOMPI_BUILDING" to CFLAGS on the "Makefile.inc".\\
CFLAGS = -O3 -DCOMMON_FILE_COMPRESS_GZ -DCOMMON_PTHREAD -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -DSCOTCH_PTHREAD -Drestrict=__restrict -DINTSIZE64 -DIDXSIZE64 -DOMPI_BUILDING
And then execute the following commands on the Cygwin terminal:\\
$ cd scotch_6.0.0/src
$ make ptscotch
$ make install
===3e3 CombBLAS_bata===
Download and extract [[https://eecs.berkeley.edu/~aydin/CombBLAS_FILES/CombBLAS_beta_16_2.tgz|CombBLAS_beta_16_2.tgz]].\\
Edit "CombBLAS_beta_16_2/CMakeLists.txt" and add a linker flag "-lmpi".\\
ADD_SUBDIRECTORY( usort )
target_link_libraries(CombBLAS PUBLIC Usortlib)
ADD_SUBDIRECTORY( graph500-1.2/generator )
target_link_libraries(CombBLAS PUBLIC GraphGenlib)
# add new
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lmpi")
#end add new
# Set up exported configuration
# This allows CombBLAS to be installed in two ways:
# 1. In /usr/local (or whatever prefix is specified)
# 2. Exporting the current build directory. This allows a user to make
# modifications to CombBLAS and have the changes automatically recompiled for
# dependent projects.
# Either way, we need to create a CombBLASConfig.cmake
And then execute the following commands on the Cygwin terminal:\\
$ cd CombBLAS_beta_16_2
$ mkdir build
$ mkdir install
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=../install
$ make
$ make install
===3e4 upcxx===
Download and extract [[https://bitbucket.org/berkeleylab/upcxx/downloads/upcxx-2019.9.0.tar.gz|"upcxx-2019.9.0.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ ./install /usr/local/upcxx
The successful installation will display "UPC++ successfully installed" at the end.\\
===3e5 symPACK===
Download and extract [[https://github.com/symPACK/symPACK/archive/refs/tags/v2.0.1.tar.gz|"symPACK-2.0.1.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd symPACK-2.0.1
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_PREFIX_PATH=/usr/local/upcxx
===3e6 superLU_dist===
Download and extract [[https://github.com/xiaoyeli/superlu_dist/archive/refs/tags/v6.1.0.tar.gz|"superlu_dist_6.1.0.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd SuperLU_DIST_6.1.0
$ export PARMETIS_ROOT=/usr/local
$ export PARMETIS_BUILD_DIR=${HOME}/parmetis-4.0.3/build/CYGWIN_NT-10.0-x86_64
$ export COMBBLAS_ROOT=/usr/local/combblas
$ export COMBBLAS_BUILD_DIR=${HOME}/CombBLAS_beta_16_2/build
$ mkdir build
$ cd build
$ cmake .. \
-DTPL_PARMETIS_INCLUDE_DIRS="/usr/local/include;${HOME}/parmetis-4.0.3/metis/include" \
-DTPL_PARMETIS_LIBRARIES="/usr/local/lib/libparmetis.a;/usr/local/lib/libmetis.a" \
-DCMAKE_INSTALL_PREFIX=/usr/local
Edit the following generated files after cmake and add the "-lmpi" flag at the end of the line.\\
*build/TEST/CMakeFiles/pdtest.dir/link.txt
*build/EXAMPLE/CMakeFiles/pddrive.dir/link.txt
*build/EXAMPLE/CMakeFiles/pddrive1.dir/link.txt
*build/EXAMPLE/CMakeFiles/pddrive2.dir/link.txt
*build/EXAMPLE/CMakeFiles/pddrive3.dir/link.txt
*build/EXAMPLE/CMakeFiles/pddrive4.dir/link.txt
*build/EXAMPLE/CMakeFiles/pzdrive.dir/link.txt
*build/EXAMPLE/CMakeFiles/pzdrive1.dir/link.txt
*build/EXAMPLE/CMakeFiles/pzdrive2.dir/link.txt
*build/EXAMPLE/CMakeFiles/pzdrive3.dir/link.txt
*build/EXAMPLE/CMakeFiles/pzdrive4.dir/link.txt\\
For example:\\
/usr/bin/c++.exe -fopenmp -fexceptions -std=c++11 -Wl,--enable-auto-import -fopenmp CMakeFiles/pddrive.dir/pddrive.c.o CMakeFiles/pddrive.dir/dcreate_matrix.c.o -o pddrive.exe -Wl,--out-implib,libpddrive.dll.a -Wl,--major-image-version,0,--minor-image-version,0 ../SRC/libsuperlu_dist.a -lblas -lm -lmpi -lopen-rte -lopen-pal -Wl,-Bstatic -lm -Wl,-Bdynamic /usr/lib/w32api/libgdi32.a -llapack -lblas /usr/local/lib/libparmetis.a /usr/local/lib/libmetis.a -lm -lmpi
Execute the following commands on the Cygwin terminal:\\
$ make
$ make install
SuperLU_DIST will be installed into /usr/local/ by default.\\
===3e7 PEXSI===
Download and extract [[https://bitbucket.org/berkeleylab/pexsi/downloads/pexsi_v1.2.0.tar.gz|"pexsi_v1.2.0.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd pexsi_v1.2.0
$ mkdir build
Copy config/build.sh.linux.gnu into "build" directory and rename it as "build.sh".\\
$ cp config/build.sh.linux.gnu ./build
$ mv build/build.sh.linux.gnu build/build.sh
Edit the content of "build/build.sh" and replace the content with:\\
CC=mpicc
CXX=mpicxx
FC=mpif90
PEXSI_INSTALL_DIR=/usr/local/pexsi
BLAS_LIB=/lib/libblas.dll.a
LAPACK_LIB=/lib/liblapack.dll.a
DSUPERLU_DIR=/usr/local
PARMETIS_DIR=/usr/local
METIS_DIR=/usr/local
GFORTRAN_LIB=/lib/gcc/x86_64-pc-cygwin/10/libgfortran.dll.a
cmake \
-DCMAKE_INSTALL_PREFIX=$PEXSI_INSTALL_DIR \
-DCMAKE_C_COMPILER=$CC \
-DCMAKE_CXX_COMPILER=$CXX \
-DCMAKE_CXX_FLAGS=-DOMPI_BUILDING \
-DCMAKE_Fortran_COMPILER=$FC \
-Dlinalg_BLAS_LIBRARIES="$BLAS_LIB;-fopenmp;-lm;$GFORTRAN_LIB;-lblas;-lquadmath" \
-Dlinalg_LAPACK_LIBRARIES="$LAPACK_LIB;-lblas;-lquadmath" \
-Dsuperlu_dist_INCLUDE_DIR=$DSUPERLU_DIR/include \
-Dsuperlu_dist_LIBRARIES=$DSUPERLU_DIR/lib/libsuperlu_dist.a \
-Dmetis_INCLUDE_DIR=$METIS_DIR/include \
-Dmetis_LIBRARIES=$METIS_DIR/lib/libmetis.a \
-Dparmetis_INCLUDE_DIR=$PARMETIS_DIR/include \
-Dparmetis_LIBRARIES=$PARMETIS_DIR/lib/libparmetis.a \
..
Execute the following commands:\\
$ ./build.sh
$ make
$ make install
The "make install" will install pexsi into the specified directory "usr/local/pexsi".\\
In the arch file of CP2K: Add -D__LIBPEXSI
to DFLAGS. Add -I$(PEXSI_DIR)/fortran/ (e.g.-I/(username)/pexsi_v1.2.0/fortran)
to FCFLAGS.
Add -lpexsi -llapack -lblas -lsuperlu_dist -lparmetis -lmetis
, and their paths with -L/usr/local/pexsi/lib
to LIBS.\\
====3f QUIP (optional)===
Download "[[https://www.cp2k.org/static/downloads/QUIP-b4336484fb65b0e73211a8f920ae4361c7c353fd.tar.gz|QUIP-b4336484fb65b0e73211a8f920ae4361c7c353fd.tar.gz]]" and extract it.
Execute the following commands on the Cygwin terminal:\\
$ cd QUIP-b4336484fb65b0e73211a8f920ae4361c7c353fd
$ export QUIP_ARCH=linux_x86_64_gfortran
$ make config
In the following "make config" example, the defaults are accepted except the python and pip location on the cygwin and cp2k support choice for quip.\\
Using QUIP_ARCH=linux_x86_64_gfortran, MODULES=libAtoms Potentials Utils, QUIP_ROOT=/home/gan_t/QUIP-b4336484fb65b0e73211a8f920ae4361c7c353fd
In the following, hit enter to accept the defaults.
BUILD OPTIONS
=============
Please enter the linking options for LAPACK and BLAS libraries:
Default: -llapack -lblas
Please enter the preferred python command:
Default: /usr/bin/python
/bin/pyton2.7
Please enter the preferred pip command:
Default:
/bin/pip2.7
Please enter any other extra linking options:
Default: none
OPTIONAL INTERNAL FEATURES
==========================
Would you like to compile with CP2K support? [y/n]
Default: n
y
Would you like to compile with VASP support? [y/n]
Default: n
Would you like to compile with Tight Binding (TB) support? [y/n]
Default: n
Would you like to compile with preconditioned minimisation support? (not working with Intel compiler) [y/n]
Default: y
Would you like to compile with Learn-on-the-fly (LOTF) support? [y/n]
Default: n
Would you like to compile with ONIOM support? [y/n]
Default: n
Would you like to compile with LOCAL_E_MIX support? [y/n]
Default: n
Would you like to compile with QuasiContinuum wrapper support? [y/n]
Default: n
OPTIONAL FEATURES (EXTRA CODE REQUIRED)
=======================================
Would you like to compile with GAP support ? [y/n]
Default: n
Please enter directories where the Turbo-GAP main directory is:
Default: no Turbo-GAP present
Would you like to turn on QR decomposition for some GAP operations? [y/n]
Default: y
Checking for ThirdParty directory...
Not found.
Would you like to compile with TTM3-F support? [y/n]
Default: n
Would you like to compile with SCME support ? [y/n]
Default: n
Would you like to compile with MTP support ? [y/n]
Default: n
Would you like to compile with many-body dispersion support ? [y/n]
Default: n
Would you like to compile with TTM_NF support ? [y/n]
Default: n
Would you like to compile with CH4 support ? [y/n]
Default: n
OPTIONAL EXTERNAL LIBRARIES
===========================
Would you like to compile with NetCDF4 support? [y/n]
Default: n
Please enter directories where MDCORE libraries are kept:
Default: no MDCORE present
Please enter directory where the ASAP library is kept:
Default: no ASAP library present
Please enter directories where CGAL libraries are kept:
Default: no CGAL present
Please enter directories where METIS libraries are kept:
Default: no METIS present
Please enter directories where LMTO_TBE libraries are kept:
Default: no LMTO_TBE present
After "make config", execute the following commands on the Cygwin terminal:\\
$ make
$ export QUIP_INSTALLDIR=/usr/local
$ make install
$ make libquip
If you find "libquip.a" in build/linux_x86_64_gfortran directory, the make was completed successfully.\\
Copy "build/linux_x86_64_gfortran/libquip.a" into "usr/local/lib" manually and finish the installation.\\
In the arch file of CP2K: Add -D__QUIP
to DFLAGS. Add -lquip
to LIBS. Add -Wl,--stack,4194304
to FCFLAGS, to avoid a "Exception: STATUS_STACK_OVERFLOW" error.\\
====3g spfft(optional)====
Download and extract [[https://github.com/eth-cscs/SpFFT/archive/refs/tags/v1.0.5.tar.gz|"SpFFT-1.0.5.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd spFFT-1.0.5
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DSPFFT_FORTRAN=ON -DSPFFT_OMP=ON -DSPFFT_MPI=ON -DSPFFT_SINGLE_PRECISION=OFF -DCMAKE_INSTALL_PREFIX=/usr/local
$ make
$ make install
====3h spla(optional)====
Download and extract [[https://github.com/eth-cscs/spla/archive/refs/tags/v1.5.2.tar.gz|"spla-1.5.2.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd spla-1.5.2
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
$ make
$ make install
====3i SIRIUS (optional)====
SIRIUS-7.3.0 requires spglib-1.0.2 or later and gsl 2.7 or later.\\
===3i1 spglib===
Download and extract [[https://www.cp2k.org/static/downloads/spglib-1.16.0.tar.gz|"spglib-1.16.1.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd spglib-1.16.2
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install
The "make install" will install spglib into /usr/local by default.\\
In the arch file of CP2K: Add -D__SPGLIB
to DFLAGS.
===3i2 gsl 2.7===
If you have the following gsl-related error during building sirius (i.e. "make" sirius), gsl has not been installed on cygwin or the installed gsl is too old for the sirius.\\
sirius-7.3.0/src/specfunc/specfunc.hpp:31:10: fatal error: gsl/gsl_sf_hermite.h: No such file or directory
31 | #include
| ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Gsl 2.7 or later is required in this case. If Cygwin setup.exe does't supply the latest binary, you had better build the gsl from the source.\\
Download and extract [[https://mirror.ibcp.fr/pub/gnu/gsl/gsl-2.7.tar.gz|"gsl-2.7.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd gsl-2.7
$ ./configure
$ make
$ make install
The "make install" will install gsl into usr/local by default.
===3i3 SIRIUS===
Download and extract [[https://github.com/electronic-structure/SIRIUS/archive/refs/tags/v7.3.0.tar.gz|"SIRIUS-7.3.0.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd sirius-7.3.0
$ mkdir build
$ cd build
$ export CXX=mpicxx CC=mpicc FC=mpif90
$ cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/sirius
$ make
$ make install
If you have a link error "ld: smearing.cpp: undefined reference to `gsl_sf_hermite'" during the "make",
the error is caused by your own built gsl which installed into "usr/local" instead of Cygwin root.
Edit "build/src/CMakeFiles/sirius.dir/link.txt" and add the string "/usr/local/lib/libgsl.dll.a" as following:\\
/usr/bin/mpicxx -Wall -O3 -DNDEBUG -shared -Wl,--enable-auto-import -o cygsirius.dll -Wl,--out-implib,libsirius.dll.a -Wl,--major-image-version,0,--minor-image-version,0 CMakeFiles/sirius.dir/hamiltonian/hamiltonian.cpp.o
...
CMakeFiles/sirius.dir/context/simulation_context.cpp.o CMakeFiles/sirius.dir/context/simulation_parameters.cpp.o CMakeFiles/sirius.dir/api/sirius_api.cpp.o CMakeFiles/sirius.dir/api/sirius.f90.o /usr/local/lib/libspfft.dll.a /usr/local/lib/libspla.dll.a /usr/local/lib/libgsl.dll.a /usr/lib/libgsl.dll.a /usr/local/lib/libopenblas.dll.a -lm -ldl /usr/local/lib/libxc.a /usr/local/lib/libsymspg.dll.a /usr/lib/libhdf5.dll.a /usr/lib/gcc/x86_64-pc-cygwin/11/libgomp.dll.a -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lgfortran -lquadmath -lm
Edit the cp2k code, "src/sirius_interface.f" and set the arguments of the subroutine sirius_initialize to "TRUE".\\
SUBROUTINE cp_sirius_init()
! brhr editted
! CALL sirius_initialize(.FALSE.)
CALL sirius_initialize(.TRUE.)
! end brhr editted
END SUBROUTINE cp_sirius_init
In the arch file of CP2K: Add -D__SIRIUS
to DFLAGS.\\
====3j Libvori (optional)====
Download and extract [[https://brehm-research.de/files/libvori-220621.tar.gz|"libvori-220621.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd libvori-220621
$ mkdir build
$ cd build
$ cmake -DCMAKE_CXX_COMPILER=g++ ..
$ make
$ make install
The "make install" will install libvori into usr/local by default.
In the arch file of CP2K: Add -D__LIBVORI
to DFLAGS.
====3k libvdwxc (optional)====
Download and extract [[https://www.cp2k.org/static/downloads/libvdwxc-0.4.0.tar.gz|"libvdwxc-0.4.0.tar.gz"]].
Execute the following commands on the Cygwin terminal:\\
$ cd libvdwxc-0.4.0
$ ./configure
$ make
$ make install
The "make install" will install libvdwxc into usr/local by default.\\
In the arch file of CP2K: Add -D__LIBVDWXC
to DFLAGS.\\
=====4 Compile CP2K with Cygwin=====
Prepare a arch file. The following is an example with all options. \\
# Put this file on cp2k-2022.1/arch and execute the following command on the cp2k-2022.1 root directory
# make ARCH=Cygwin-x86_64-gfortran VERSION=ssmp
# if you wish to clean, do either make ARCH=Cygwin-x86_64-gfortran VERSION=ssmp clean
# or make ARCH=Cygwin-x86_64-gfortran VERSION=ssmp distclean
CC = gcc
FC = mpif90
LD = mpif90
AR = ar -r
CFLAGS = -g -O2 -fopenmp -fopenmp-simd -funroll-loops -ftree-vectorize -march=native -mtune=native
CPPFLAGS =
DFLAGS = -D__GFORTRAN -D__FFTW3 -D__LIBINT -D__LIBXC -D__SPGLIB -D__SIRIUS -D__LIBVDWXC
DFLAGS += -D__LIBXSMM -D__LIBPEXSI -D__QUIP -D__LIBVORI
FCFLAGS = -ffree-form -ffree-line-length-none -fno-omit-frame-pointer
FCFLAGS += -fbacktrace -std=f2008 -Wl,--stack,4194304
FCFLAGS += -I/usr/include -I/usr/local/include -I/home/(usename)/libint-v2.6.0-cp2k-lmax-7/include -I/usr/local/sirius/include
FCFLAGS += -I/home/(usename)/pexsi_v1.2.0/fortran $(CFLAGS) $(DFLAGS)
LDFLAGS = $(FCFLAGS) -static
LIBS = -lpexsi -llapack -lblas -lint2 -lxc -lxcf03 -lvori -lquip -ldl -ldbghelp -lvdwxc -lstdc++
LIBS += -lgsl -lz -ldl -lm -lsuperlu_dist -lparmetis -lmetis -fopenmp -fopenmp-simd
LIBS += -L/usr/local/lib -L/usr/local/pexsi/lib
LIBS += /usr/lib/gcc/x86_64-pc-cygwin/11/libstdc++.a /usr/local/lib/DbgHelp.Lib
LIBS += /usr/lib/libgsl.dll.a /usr/lib/libmpi.dll.a /usr/local/lib/libxc.a /usr/local/lib/libxcf03.a /usr/local/lib/libxcf90.a
LIBS += /usr/local/lib/libsymspg.dll.a /usr/lib/libhdf5.dll.a /usr/lib/libhdf5_hl.dll.a /usr/lib/libhdf5.dll.a /usr/lib/liblapack.dll.a
LIBS += /usr/lib/libblas.dll.a /usr/lib/libfftw3.dll.a /usr/lib/libfftw3_omp.dll.a /usr/local/lib/libopenblas.a
LIBS += /usr/local/lib/libint2.a /usr/local/lib/libsymspg.a /usr/local/lib/libsymspg.dll.a /usr/local/sirius/lib/libsirius.dll.a
LIBS += /usr/lib/libfftw3_threads.dll.a /usr/local/lib/libxsmmf.lib /usr/local/lib/libxsmm.lib -llapack -lblas -ldbghelp
LIBS += /usr/lib/gcc/x86_64-pc-cygwin/11/libgomp.dll.a
OBJECTS_ARCHITECTURE = machine_gfortran.o
Save the arch file in the ARCH directory with the name e.g. "Cygwin-x86_64-gfortran.ssmp"\\
Prepare three nested empty destination directories ("obj/Cygwin-x86_64-gfortran/ssmp/" for the example) in the cp2k root before starting build.\\
Put some required FORTRAN modules in the inner-most ssmp directory in advance.\\
These are:\\
*libint-v2.6.0-cp2k-lmax-7/fortran/libint_f.mod
*libxc-5.1.0/src/xc_f03_lib_m.mod
*libxc-5.1.0/src/xc_f90_lib_m.mod
*sirius-7.3.0/build/src/mod_files/sirius.mod
*pexsi_v1.2.0/build/include/f_ppexsi_interface.mod
*QUIP-b4336484fb65b0e73211a8f920ae4361c7c353fd/build/linux_x86_64_gfortran/quip_unified_wrapper_module.mod\\
Execute the "make" commands on the root directory of cp2k on the Cygwin terminal:\\
$ make ARCH=Cygwin-x86_64-gfortran VERSION=ssmp
When the "make" successfully completed, cp2k.ssmp and other binaries have been generated in "(cp2k-root)/exe/Cygwin-x86_64-gfortran/ssmp/".
=====5 Install CP2K on a Windows PC which are not installed Cygwin=====
====5a The file placement====
Prepare a empty directory named "cp2k-(version string or a unique string to descriminate your build)" on which you wish to install the cp2k executable binaries. \\
Prepare five empty directories, "bin", "dev", "home", "lib" and "share" in the cp2k directory.\\
Copy cp2k binaries which were generated in "(cp2k-root)/exe/Cygwin-x86_64-gfortran/ssmp/" into the "bin" directory.\\
Copy other DLLs in "(cygwin-root)/bin","(cygwin-root)/usr/local/bin", "(cygwin-root)/usr/local/lib" or your build directory, on which cp2k binaries depend, into the "bin" directory.\\
The dependent DLLs will vary depending on which libraries you use.
You can parse the dependencies by using either cygcheck command or an executable parser such as [[http://www.dependencywalker.com|Dependency Walker (depends.exe)]].\\
The following is an example of dependent DLLs with all options:\\
(cygwin-root)/bin/cygaec-0.dll
(cygwin-root)/lib/lapack/cygblas-0.dll
(cygwin-root)/bin/cygevent-2-1-7.dll
(cygwin-root)/bin/cygevent_core-2-1-7.dll
(cygwin-root)/bin/cygevent_extra-2-1-7.dll
(cygwin-root)/bin/cygevent_openssl-2-1-7.dll
(cygwin-root)/bin/cygevent_pthreads-2-1-7.dll
(cygwin-root)/bin/cygfftw3-3.dll
(cygwin-root)/bin/cygfftw3f-3.dll
(cygwin-root)/bin/cygfftw3f_omp-3.dll
(cygwin-root)/bin/cygfftw3f_threads-3.dll
(cygwin-root)/bin/cygfftw3l-3.dll
(cygwin-root)/bin/cygfftw3l_omp-3.dll
(cygwin-root)/bin/cygfftw3l_threads-3.dll
(cygwin-root)/bin/cygfftw3_omp-3.dll
(cygwin-root)/bin/cygfftw3_threads-3.dll
(cygwin-root)/bin/cyggcc_s-seh-1.dll
(cygwin-root)/bin/cyggfortran-4.dll
(cygwin-root)/bin/cyggfortran-5.dll
(cygwin-root)/bin/cyggomp-1.dll
(cygwin-root)/usr/local/bin/cyggsl-25.dll
(cygwin-root)/usr/local/bin/cyggslcblas-0.dll
(cygwin-root)/bin/cyghdf5-200.dll
(cygwin-root)/bin/cyghwloc-15.dll
(cygwin-root)/bin/cygiconv-2.dll
(cygwin-root)/lib/lapack/cyglapack-0.dll
(cygwin-root)/bin/cyglzma-5.dll
(cygwin-root)/bin/cygmpi-40.dll
(cygwin-root)/bin/cygmpi_mpifh-40.dll
(cygwin-root)/bin/cygopen-pal-40.dll
(cygwin-root)/bin/cygopen-rte-40.dll
(cygwin-root)/bin/cygOpenCL-1.dll
(cygwin-root)/bin/cygquadmath-0.dll
(cygwin-root)/home/(username)/SIRIUS-7.3.0/build/src/cygsirius.dll
(cygwin-root)/usr/local/lib/cygspfft-1.dll
(cygwin-root)/usr/local/lib/cygspla-1.dll
(cygwin-root)/bin/cygstdc++-6.dll
(cygwin-root)/usr/local/bin/cygsymspg-1.dll
(cygwin-root)/bin/cygsz-2.dll
(cygwin-root)/bin/cygwin1.dll
(cygwin-root)/bin/cygxml2-2.dll
(cygwin-root)/bin/cygz.dll
Copy also the opemmpi executables into the "bin".\\
(cygwin-root)/bin/ompi_info.exe
(cygwin-root)/bin/opal_wrapper.exe
(cygwin-root)/bin/orte-clean.exe
(cygwin-root)/bin/orte-info.exe
(cygwin-root)/bin/orte-server.exe
(cygwin-root)/bin/orted.exe
(cygwin-root)/bin/orterun.exe
Prepare an empty directory named "shm" in "dev" to avoid an warnning on running sirius calculation.\\
Copy the cp2k data directory into the inside of "home" as similar manner as Cygwin directory structure when you built cp2k.\\
For example, if you built cp2k in "(cygwin-root)/home/(user-name)/cp2k-2022.1", prepare two nested directories "(user-name)/cp2k-2022.1" in the "home" directory, put the data directory in the inner-most "cp2k-2022.1" directory.\\
Prepare a empty directory named "openmpi" in the "lib" directory and
copy "(cygwin-root)/lib/openmpi/cygompi_dbg_msgq.dll" into the "lib/openmpi/" directory.\\
Copy openmpi help files (the folder and the all contents of (cygwin-root)/share/openmpi) in "share" directory.\\
====5b A batch script file====
Prepare a batch script to launch the cp2k calculations in the upper directory of the "bin", "dev", "home", "lib" and "share" directories.\\
@echo off
set ORGPATH=%PATH%
set PATH=%PATH%;%CD%\bin
set OPAL_PREFIX=%CD%
set PMIX_MCA_gds=hash
cp2k.ssmp %*
set PATH=%ORGPATH%
set OPAL_PREFIX=
set PMIX_MCA_gds=
The statement "set ORGPATH=%PATH%" stores the current "path to executables" (the "PATH" environmental variable).\\
The statement "set PATH=%PATH%;%CD%\bin" adds the path to cp2k executables to the "PATH" environment.\\
The statement "OPAL_PREFIX=%CD%" sets temporarily the openmpi directory to the current cp2k directory.\\
The statement "set PMIX_MCA_gds=hash" avoids errors for some versions of opemmpi.\\
The statement "cp2k.ssmp %*" recieve the arguments and pass them to the cp2k.ssmp.\\
The set statements after "cp2k.ssmp %*" line restore the original settings.\\
For details on openmpi environmental variables, please refer to:
[[https://www.open-mpi.org/faq/?category=building#installdirs|39. Can I re-locate my Open MPI installation without re-configuring/re-compiling/re-installing from source?]]\\
Save the script as the name "startcp2k.bat".\\
====5c A quick test====
Open the folder which contains startcp2k.bat and "bin", "dev", "home", "lib" and "share" directories on Windows explorer.
Enter "cmd" in the address bar and press a return key to open the command prompt.\\
On the command prompt, execute the following command:\\
$ startcp2k --version
Then you might see:\\
CP2K version 2022.1
Source code revision git:2caeb6f
cp2kflags: omp libint fftw3 libxc pexsi quip xsmm spglib sirius libvori libbqb
compiler: GCC version 11.3.0
compiler options:
-cpp -I /usr/include -I /usr/local/include -I /home/username/libint-v2.
6.0-cp2k-lmax-7/include -I /usr/local/sirius/include -I /home/username/
pexsi_v1.2.0-openmpi-4.1.2/fortran -I /home/user/cp2k-2022.1/src/sta
rt/ -I /home/user/cp2k-2022.1/obj/Cygwin-x86_64-gfortran-pexsi/ssmp/
exts/dbcsr -I /usr/include -I /usr/lib -idirafter /usr/lib/gcc/x86_6
4-pc-cygwin/11/../../../../lib/../include/w32api -idirafter /usr/lib
/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/lib/../lib/../
../include/w32api -D __GFORTRAN -D __FFTW3 -D __LIBINT -D __LIBXC -D
__SPGLIB -D __SIRIUS -D __LIBVDWXC -D __LIBXSMM -D __LIBPEXSI -D __
QUIP -D __LIBVORI -D __COMPILE_ARCH="Cygwin-x86_64-gfortran-pexsi" -
D __COMPILE_DATE="Sun Aug 14 21:16:53 JST 2022" -D __COMPILE_HOST="D
ESKTOP-2FK7NUA" -D __COMPILE_REVISION="git:2caeb6f" -D __DATA_DIR="/
home/user/cp2k-2022.1/data" -D __SHORT_FILE__="start/cp2k.F" -march=
skylake -mmmx -mpopcnt -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2
-mavx -mavx2 -mno-sse4a -mno-fma4 -mno-xop -mfma -mno-avx512f -mbmi
-mbmi2 -mno-aes -mpclmul -mno-avx512vl -mno-avx512bw -mno-avx512dq
-mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512vbmi -mno-avx51
2ifma -mno-avx5124vnniw -mno-avx5124fmaps -mno-avx512vpopcntdq -mno-
avx512vbmi2 -mno-gfni -mno-vpclmulqdq -mno-avx512vnni -mno-avx512bit
alg -mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx -mabm -
mno-cldemote -mclflushopt -mno-clwb -mno-clzero -mcx16 -mno-enqcmd -
mf16c -mfsgsbase -mfxsr -mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mn
o-movdir64b -mno-movdiri -mno-mwaitx -mno-pconfig -mno-pku -mno-pref
etchwt1 -mprfchw -mno-ptwrite -mno-rdpid -mrdrnd -mrdseed -mno-rtm -
mno-serialize -msgx -mno-sha -mno-shstk -mno-tbm -mno-tsxldtrk -mno-
vaes -mno-waitpkg -mno-wbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves
-mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr -mno-hreset -m
no-kl -mno-widekl -mno-avxvnni --param=l1-cache-size=32 --param=l1-c
ache-line-size=64 --param=l2-cache-size=9216 -mtune=skylake -g -O2 -
std=f2008 -ffree-form -ffree-line-length-none -fno-omit-frame-pointe
r -fbacktrace -fopenmp -fopenmp-simd -funroll-loops -ftree-vectorize
Congratulations! You got a hold of CP2K run on Windows.\\