From 3a1353c1594b511fe754e5849fb7643fb09b6d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Sch=C3=BCtt?= Date: Thu, 4 Dec 2025 21:46:43 +0100 Subject: [PATCH] Docker: Add psmp test running with 4 MPI ranks --- tests/QS/regtest-gpw-4/TEST_FILES.toml | 4 +- .../regtest-kp-hfx-ri-admm-2/TEST_FILES.toml | 4 +- tests/QS/regtest-mp2-lr-grad/TEST_FILES.toml | 2 +- tests/QS/regtest-ot-1/TEST_FILES.toml | 4 +- tests/xTB/regtest-2/TEST_FILES.toml | 2 +- tools/docker/Dockerfile.test_psmp_4ranks | 95 +++++++++++++++++++ tools/docker/cp2k-ci.conf | 8 ++ tools/docker/generate_dockerfiles.py | 5 + 8 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 tools/docker/Dockerfile.test_psmp_4ranks diff --git a/tests/QS/regtest-gpw-4/TEST_FILES.toml b/tests/QS/regtest-gpw-4/TEST_FILES.toml index 2c069fb0ae..f29eac6d5e 100644 --- a/tests/QS/regtest-gpw-4/TEST_FILES.toml +++ b/tests/QS/regtest-gpw-4/TEST_FILES.toml @@ -20,8 +20,8 @@ "H2O-debug-2.inp" = [{matcher="E_total", tol=1.0E-14, ref=-16.00183627257292}] "H2O-debug-3.inp" = [{matcher="E_total", tol=4e-14, ref=-15.74262975093193}] "H2O-debug-4.inp" = [{matcher="E_total", tol=4e-14, ref=-15.74262975093193}] -"H2O-debug-5.inp" = [{matcher="M086", tol=4e-10, ref=-0.535129866059}] -"H2O-debug-6.inp" = [{matcher="M086", tol=4e-10, ref=-0.535125994114}] +"H2O-debug-5.inp" = [{matcher="M086", tol=2e-7, ref=-0.535129866059}] +"H2O-debug-6.inp" = [{matcher="M086", tol=2e-7, ref=-0.535125994114}] "H2O-debug-7.inp" = [{matcher="E_total", tol=4e-12, ref=-34.01122049558151}] "H2O-debug-8.inp" = [{matcher="M086", tol=4e-10, ref=-0.482971230807}] # new colvar diff --git a/tests/QS/regtest-kp-hfx-ri-admm-2/TEST_FILES.toml b/tests/QS/regtest-kp-hfx-ri-admm-2/TEST_FILES.toml index 79328bf0d1..f457361dcd 100644 --- a/tests/QS/regtest-kp-hfx-ri-admm-2/TEST_FILES.toml +++ b/tests/QS/regtest-kp-hfx-ri-admm-2/TEST_FILES.toml @@ -1,8 +1,8 @@ "hBN_gpw_pbe0.inp" = [{matcher="M011", tol=1.0E-10, ref=-8.627502654876013}] -"LiH_gapw_pbex.inp" = [{matcher="M011", tol=1.0E-10, ref=-7.774042231360941}] +"LiH_gapw_pbex.inp" = [{matcher="M011", tol=2.0E-9, ref=-7.774042231360941}] "LiH_gpw_none.inp" = [{matcher="M011", tol=1.0E-10, ref=-5.383857047510018}] "hBN_gapw_lsd_stress.inp" = [{matcher="M031", tol=1.0E-8, ref=-1.24548924781E+04}] -"diamond_admmp.inp" = [{matcher="M011", tol=1.0E-10, ref=-8.244883910014904}] +"diamond_admmp.inp" = [{matcher="M011", tol=4.5E-9, ref=-8.244883910014904}] "diamond_admms.inp" = [{matcher="M011", tol=1.0E-10, ref=-79.738004880335254}] "diamond_admmq.inp" = [{matcher="M031", tol=1.0E-8, ref=-5.01813876744E+04}] "H_debug.inp" = [] diff --git a/tests/QS/regtest-mp2-lr-grad/TEST_FILES.toml b/tests/QS/regtest-mp2-lr-grad/TEST_FILES.toml index 074f70d0a3..33e09f8426 100644 --- a/tests/QS/regtest-mp2-lr-grad/TEST_FILES.toml +++ b/tests/QS/regtest-mp2-lr-grad/TEST_FILES.toml @@ -1,5 +1,5 @@ "H2O_mp2_lr.inp" = [{matcher="M011", tol=4e-08, ref=-16.928059503213138}] "H2O_mp2_lr_mme.inp" = [{matcher="M011", tol=4e-08, ref=-16.852687847905084}] -"CH_mp2_lr.inp" = [{matcher="M011", tol=8e-08, ref=-7.102752868233793}] +"CH_mp2_lr.inp" = [{matcher="M011", tol=2e-07, ref=-7.102752868233793}] "H2O_mp2_lr_Coulomb_metric.inp" = [] #EOF diff --git a/tests/QS/regtest-ot-1/TEST_FILES.toml b/tests/QS/regtest-ot-1/TEST_FILES.toml index a850a24d20..df523032d4 100644 --- a/tests/QS/regtest-ot-1/TEST_FILES.toml +++ b/tests/QS/regtest-ot-1/TEST_FILES.toml @@ -38,8 +38,8 @@ "H2O-OT-ASPC-2.inp" = [{matcher="E_total", tol=3e-14, ref=-17.13994191008365}] "H2O-OT-ASPC-3.inp" = [{matcher="E_total", tol=2e-14, ref=-17.13994199189048}] "H2O-OT-ASPC-4.inp" = [{matcher="E_total", tol=3e-14, ref=-17.13994198373829}] -"H2O-OT-ASPC-5.inp" = [{matcher="E_total", tol=3e-14, ref=-17.13993068768056}] -"H2O-OT-ASPC-6.inp" = [{matcher="E_total", tol=5e-14, ref=-17.13941008477894}] +"H2O-OT-ASPC-5.inp" = [{matcher="E_total", tol=9e-14, ref=-17.13993068768056}] +"H2O-OT-ASPC-6.inp" = [{matcher="E_total", tol=7e-14, ref=-17.13941008477894}] # Input driven basis set and potential "H2O-bs_input.inp" = [{matcher="E_total", tol=4e-14, ref=-17.13993294347306}] #broyden diff --git a/tests/xTB/regtest-2/TEST_FILES.toml b/tests/xTB/regtest-2/TEST_FILES.toml index 9876c150b6..06c8853879 100644 --- a/tests/xTB/regtest-2/TEST_FILES.toml +++ b/tests/xTB/regtest-2/TEST_FILES.toml @@ -4,7 +4,7 @@ # 1 compares the last total energy in the file # for details see cp2k/tools/do_regtest # test mulliken constraints -"H2O-field-gopt.inp" = [{matcher="E_total", tol=3e-11, ref=-5.76970818700878}] +"H2O-field-gopt.inp" = [{matcher="E_total", tol=4e-10, ref=-5.76970818700878}] "H2O-field-gopt-lsd.inp" = [{matcher="E_total", tol=4e-12, ref=-5.76970797174834}] "H2O-field.inp" = [] "H2O-field-lsd.inp" = [{matcher="E_total", tol=4e-14, ref=-5.76959233315201}] diff --git a/tools/docker/Dockerfile.test_psmp_4ranks b/tools/docker/Dockerfile.test_psmp_4ranks new file mode 100644 index 0000000000..d6d0b26c34 --- /dev/null +++ b/tools/docker/Dockerfile.test_psmp_4ranks @@ -0,0 +1,95 @@ +# +# This file was created by generate_dockerfiles.py. +# Usage: podman build --shm-size=1g -f ./Dockerfile.test_psmp_4ranks ../../ +# + +FROM ubuntu:24.04 + +# Install requirements for the toolchain. +WORKDIR /opt/cp2k-toolchain +COPY ./tools/toolchain/install_requirements*.sh ./ +RUN ./install_requirements.sh ubuntu:24.04 + +# Install the toolchain. +RUN mkdir scripts +COPY ./tools/toolchain/scripts/VERSION \ + ./tools/toolchain/scripts/parse_if.py \ + ./tools/toolchain/scripts/tool_kit.sh \ + ./tools/toolchain/scripts/common_vars.sh \ + ./tools/toolchain/scripts/signal_trap.sh \ + ./tools/toolchain/scripts/get_openblas_arch.sh \ + ./scripts/ +COPY ./tools/toolchain/install_cp2k_toolchain.sh . +# TODO: Re-enable tblite once the dftd4 installation is fixed. +# https://github.com/cp2k/cp2k/issues/4362 +RUN ./install_cp2k_toolchain.sh \ + --install-all \ + --mpi-mode=mpich \ + --with-dbcsr \ + --with-gcc=system \ + --with-tblite=no \ + --dry-run + +# Dry-run leaves behind config files for the followup install scripts. +# This breaks up the lengthy installation into smaller build steps. +COPY ./tools/toolchain/scripts/stage0/ ./scripts/stage0/ +RUN ./scripts/stage0/install_stage0.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage1/ ./scripts/stage1/ +RUN ./scripts/stage1/install_stage1.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage2/ ./scripts/stage2/ +RUN ./scripts/stage2/install_stage2.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage3/ ./scripts/stage3/ +RUN ./scripts/stage3/install_stage3.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage4/ ./scripts/stage4/ +RUN ./scripts/stage4/install_stage4.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage5/ ./scripts/stage5/ +RUN ./scripts/stage5/install_stage5.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage6/ ./scripts/stage6/ +RUN ./scripts/stage6/install_stage6.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage7/ ./scripts/stage7/ +RUN ./scripts/stage7/install_stage7.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage8/ ./scripts/stage8/ +RUN ./scripts/stage8/install_stage8.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/stage9/ ./scripts/stage9/ +RUN ./scripts/stage9/install_stage9.sh && rm -rf ./build + +COPY ./tools/toolchain/scripts/arch_base.tmpl \ + ./tools/toolchain/scripts/generate_arch_files.sh \ + ./scripts/ +RUN ./scripts/generate_arch_files.sh && rm -rf ./build + +# Install CP2K sources. +WORKDIR /opt/cp2k +COPY ./src ./src +COPY ./data ./data +COPY ./tests ./tests +COPY ./tools/build_utils ./tools/build_utils +COPY ./cmake ./cmake +COPY ./CMakeLists.txt . + +# Compile CP2K. +COPY ./tools/docker/scripts/build_cp2k_cmake.sh . +RUN ./build_cp2k_cmake.sh toolchain psmp + +# Run regression tests. +ARG TESTOPTS="--ompthreads=1 --mpiranks=4" +COPY ./tools/docker/scripts/test_regtest_cmake.sh ./ +RUN /bin/bash -o pipefail -c " \ + TESTOPTS='${TESTOPTS}' \ + ./test_regtest_cmake.sh toolchain psmp |& tee report.log && \ + rm -rf regtesting" + +# Output the report if the image is old and was therefore pulled from the build cache. +CMD cat $(find ./report.log -mmin +10) | sed '/^Summary:/ s/$/ (cached)/' +ENTRYPOINT [] + +#EOF diff --git a/tools/docker/cp2k-ci.conf b/tools/docker/cp2k-ci.conf index 3a913dabde..f1ec8565cb 100644 --- a/tools/docker/cp2k-ci.conf +++ b/tools/docker/cp2k-ci.conf @@ -341,4 +341,12 @@ cache_from: pdbg build_path: / dockerfile: /tools/docker/Dockerfile.test_asan-psmp +[psmp-4ranks] +display_name: Regtest psmp (4 MPI ranks) +cpu: 32 +nodepools: pool-main +cache_from: pdbg +build_path: / +dockerfile: /tools/docker/Dockerfile.test_psmp_4ranks + #EOF diff --git a/tools/docker/generate_dockerfiles.py b/tools/docker/generate_dockerfiles.py index a5bb7fd629..8a4ded8023 100755 --- a/tools/docker/generate_dockerfiles.py +++ b/tools/docker/generate_dockerfiles.py @@ -20,6 +20,11 @@ def main() -> None: f.write(install_deps_toolchain(mpi_mode=mpi_mode)) f.write(regtest_cmake("toolchain", version)) + with OutputFile(f"Dockerfile.test_psmp_4ranks", args.check) as f: + testopts = f"--ompthreads=1 --mpiranks=4" + f.write(install_deps_toolchain()) + f.write(regtest_cmake("toolchain", "psmp", testopts=testopts)) + with OutputFile(f"Dockerfile.test_generic_psmp", args.check) as f: f.write(install_deps_toolchain(target_cpu="generic")) f.write(regtest_cmake("toolchain_generic", "psmp"))