@@ -74,14 +74,119 @@ RUN wget -q https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-
7474 unzip -q /tmp/libtorch.zip -d /opt && rm -f /tmp/libtorch.zip
7575ENV CMAKE_PREFIX_PATH=/opt/libtorch/share/cmake:${CMAKE_PREFIX_PATH}
7676
77+
78+ ###### PEXSI PART: pexsi and gklib and metis and parmetis and superlu_dist
79+ ENV GKLIB_VERSION="master"
80+ ENV METIS_VERSION="master"
81+ ENV PARMETIS_VERSION="main"
82+ ENV SUPERLU_DIST_VERSION=7.2.0
83+ ENV PEXSI_VERSION=2.0.0
84+ ENV GKLIB_ROOT=/usr/local/gklib-${GKLIB_VERSION}
85+ ENV METIS32_ROOT=/usr/local/metis32-${METIS_VERSION}
86+ ENV PARMETIS32_ROOT=/usr/local/parmetis32-${PARMETIS_VERSION}
87+ ENV PEXSI32_ROOT=/usr/local/pexsi32-${PEXSI_VERSION}
88+ ENV SUPERLU_DIST32_ROOT=/usr/local/superlu_dist32-${SUPERLU_DIST_VERSION}
89+
90+ # 2. install GKlib
91+ RUN wget https://codeload.github.com/KarypisLab/GKlib/zip/refs/heads/${GKLIB_VERSION} -O GKlib-${GKLIB_VERSION}.zip && \
92+ unzip GKlib-${GKLIB_VERSION}.zip && \
93+ cd GKlib-${GKLIB_VERSION} && \
94+ make config shared=1 prefix=${GKLIB_ROOT} openmp=set && \
95+ make -j$(nproc) && \
96+ make install && \
97+ ls ${GKLIB_ROOT}/lib && \
98+ cp ${GKLIB_ROOT}/lib/libGKlib.so.0 ${GKLIB_ROOT}/lib/libGKlib.so && \
99+ cd / && rm -rf GKlib-${GKLIB_VERSION} GKlib-${GKLIB_VERSION}.zip
100+ #.so file CANNOT be found otherwise.
101+ # 2. install METIS
102+ RUN export LD_LIBRARY_PATH=${GKLIB_ROOT}/lib:${LD_LIBRARY_PATH} && \
103+ wget https://codeload.github.com/KarypisLab/METIS/zip/refs/heads/${METIS_VERSION} -O METIS-${METIS_VERSION}.zip && \
104+ unzip METIS-${METIS_VERSION}.zip && \
105+ cd METIS-${METIS_VERSION} && \
106+ make config shared=1 prefix=${METIS32_ROOT} gklib_path=${GKLIB_ROOT} && \
107+ make -j$(nproc) && \
108+ make install && \
109+ cd / && rm -rf METIS-${METIS_VERSION} METIS-${METIS_VERSION}.zip
110+
111+ # 3. install ParMETIS
112+ RUN export LD_LIBRARY_PATH=${METIS32_ROOT}/lib:${GKLIB_ROOT}/lib:${LD_LIBRARY_PATH} && \
113+ wget https://codeload.github.com/KarypisLab/ParMETIS/zip/refs/heads/${PARMETIS_VERSION} -O ParMETIS-${PARMETIS_VERSION}.zip && \
114+ unzip ParMETIS-${PARMETIS_VERSION}.zip && \
115+ cd ParMETIS-${PARMETIS_VERSION} && \
116+ make config shared=1 prefix=${PARMETIS32_ROOT} gklib_path=${GKLIB_ROOT} metis_path=${METIS32_ROOT} && \
117+ make -j$(nproc) && \
118+ make install && \
119+ cd / && rm -rf ParMETIS-${PARMETIS_VERSION} ParMETIS-${PARMETIS_VERSION}.zip
120+
121+ # 4. install SuperLU_DIST
122+ RUN wget https://codeload.github.com/xiaoyeli/superlu_dist/tar.gz/refs/tags/v${SUPERLU_DIST_VERSION} -O v${SUPERLU_DIST_VERSION}.tar.gz && \
123+ tar -xzf v${SUPERLU_DIST_VERSION}.tar.gz && \
124+ cd superlu_dist-${SUPERLU_DIST_VERSION} && \
125+ mkdir build && cd build && \
126+ cmake .. \
127+ -DTPL_ENABLE_PARMETISLIB=ON \
128+ -DTPL_PARMETIS_LIBRARIES="${PARMETIS32_ROOT}/lib/libparmetis.so;${METIS32_ROOT}/lib/libmetis.so;${GKLIB_ROOT}/lib/libGKlib.so" \
129+ -DTPL_PARMETIS_INCLUDE_DIRS="${PARMETIS32_ROOT}/include;${METIS32_ROOT}/include;${GKLIB_ROOT}/include" \
130+ -DTPL_ENABLE_INTERNAL_BLASLIB=OFF \
131+ -DTPL_ENABLE_LAPACKLIB=ON \
132+ -DTPL_ENABLE_COMBBLASLIB=OFF \
133+ -DTPL_ENABLE_CUDALIB=OFF \
134+ -Denable_complex16=ON \
135+ -DXSDK_INDEX_SIZE=32 \
136+ -DBUILD_SHARED_LIBS=ON \
137+ -DCMAKE_INSTALL_PREFIX=${SUPERLU_DIST32_ROOT} \
138+ -DCMAKE_C_FLAGS="-O3 -fopenmp" \
139+ -DCMAKE_CXX_FLAGS="-O3 -fopenmp" \
140+ -DXSDK_ENABLE_Fortran=ON \
141+ -DCMAKE_Fortran_COMPILER=mpiifx && \
142+ make -j$(nproc) && \
143+ make install && \
144+ cd / && rm -rf superlu_dist-${SUPERLU_DIST_VERSION} v${SUPERLU_DIST_VERSION}.tar.gz
145+
146+ ### -DCMAKE_C_COMPILER=mpiicc \
147+ ### -DCMAKE_CXX_COMPILER=mpiicpc \
148+ ### -DCMAKE_CUDA_COMPILER=nvcc \
149+
150+ # 5. install PEXSI
151+ RUN export LD_LIBRARY_PATH=${SUPERLU_DIST32_ROOT}/lib:${METIS32_ROOT}/lib:${PARMETIS32_ROOT}/lib:${GKLIB_ROOT}/lib:${LD_LIBRARY_PATH} && \
152+ export LIBRARY_PATH=${SUPERLU_DIST32_ROOT}/lib:${METIS32_ROOT}/lib:${PARMETIS32_ROOT}/lib:${GKLIB_ROOT}/lib:${LIBRARY_PATH} && \
153+ export PKG_CONFIG_PATH=${SUPERLU_DIST32_ROOT}/lib/pkgconfig:${METIS32_ROOT}/lib/pkgconfig:${PARMETIS32_ROOT}/lib/pkgconfig:${GKLIB_ROOT}/lib/pkgconfig:${PKG_CONFIG_PATH} && \
154+ export CPATH=${SUPERLU_DIST32_ROOT}/include:${PARMETIS32_ROOT}/include:${METIS32_ROOT}/include:${GKLIB_ROOT}/include:${CMAKE_PREFIX_PATH} && \
155+ export CMAKE_PREFIX_PATH=${SUPERLU_DIST32_ROOT}:${PARMETIS32_ROOT}:${METIS32_ROOT}:${GKLIB_ROOT}:${CMAKE_PREFIX_PATH} && \
156+ wget https://bitbucket.org/berkeleylab/pexsi/downloads/pexsi_v${PEXSI_VERSION}.tar.gz && \
157+ tar -xzf pexsi_v${PEXSI_VERSION}.tar.gz && \
158+ cd pexsi_v${PEXSI_VERSION} && \
159+ sed -i 's/^add_pexsi_f_example_exe/# add_pexsi_f_example_exe/g' fortran/CMakeLists.txt && \
160+ sed -i 's/^add_pexsi_example_exe/# add_pexsi_example_exe/g' examples/CMakeLists.txt && \
161+ sed -i 's/add_executable/# add_executable/g' fortran/CMakeLists.txt && \
162+ sed -i 's/add_executable/# add_executable/g' examples/CMakeLists.txt && \
163+ mkdir build && cd build && \
164+ cmake .. \
165+ -DCMAKE_INSTALL_PREFIX=${PEXSI32_ROOT} \
166+ -DPEXSI_ENABLE_OPENMP=ON \
167+ -DPEXSI_ENABLE_FORTRAN=OFF && \
168+ make pexsi -j$(nproc) && \
169+ make install && \
170+ cd / && rm -rf pexsi_v${PEXSI_VERSION} pexsi_v${PEXSI_VERSION}.tar.gz
171+
172+ ### -DCMAKE_C_COMPILER=mpiicc \
173+ ### -DCMAKE_CXX_COMPILER=mpiicpc \
174+ ###### END of PEXSI PART
175+
77176# Clone and build abacus (optional during image build; keep for CI image)
78177ADD https://api.github.com/repos/deepmodeling/abacus-develop/git/refs/heads/develop /dev/null
79178RUN export LD_LIBRARY_PATH=${GKLIB_ROOT}/lib:${METIS32_ROOT}/lib:${PARMETIS32_ROOT}/lib:${SUPERLU32_DIST_ROOT}/lib:${PEXSI32_ROOT}/lib:${LD_LIBRARY_PATH} && \
80179 export CPATH=${GKLIB_ROOT}/include:${METIS32_ROOT}/include:${PARMETIS32_ROOT}/include:${SUPERLU32_DIST_ROOT}/include:${PEXSI32_ROOT}/include:${CPATH} && \
81- cd /tmp && git clone https://github.com/deepmodeling/abacus-develop.git --depth 1 && \
82- cd abacus-develop && \
180+ export CMAKE_PREFIX_PATH=${PEXSI32_ROOT}:${SUPERLU_DIST32_ROOT}:${PARMETIS32_ROOT}:${METIS32_ROOT}:${GKLIB_ROOT}:${CMAKE_PREFIX_PATH} && \
181+ cd /tmp && wget https://github.com/deepmodeling/abacus-develop/archive/refs/tags/v3.9.0.17.zip -O abacus-develop-3.9.0.17.zip && \
182+ unzip abacus-develop-3.9.0.17.zip && \
183+ cd abacus-develop-3.9.0.17 && \
184+ sed -i '3i\#include "source_estate/elecstate_lcao.h"' source/source_lcao/edm.cpp && \
83185 cmake -B build \
186+ -DMKL_SYCL=OFF \
187+ -DMKL_SYCL_LINK=OFF \
84188 -DENABLE_MLALGO=ON \
189+ -DENABLE_PEXSI=ON \
85190 -DENABLE_LIBXC=ON \
86191 -DENABLE_LIBRI=ON \
87192 -DENABLE_RAPIDJSON=ON \
0 commit comments