From 10c9cac49870c9576ee54d12e96bcc8d5380e223 Mon Sep 17 00:00:00 2001 From: takanori-ihara <62980219+takanori-ihara@users.noreply.github.com> Date: Mon, 22 Feb 2021 18:36:44 +0900 Subject: [PATCH] eigenexa: fix build error and add test method (#21692) --- .../packages/eigenexa/gcc_compiler.patch | 29 +++++++++++++++ .../builtin/packages/eigenexa/package.py | 22 +++++++++++- .../packages/eigenexa/test/result-check.sh | 36 +++++++++++++++++++ .../packages/eigenexa/test/run-test.sh | 4 +++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 var/spack/repos/builtin/packages/eigenexa/gcc_compiler.patch create mode 100644 var/spack/repos/builtin/packages/eigenexa/test/result-check.sh create mode 100644 var/spack/repos/builtin/packages/eigenexa/test/run-test.sh diff --git a/var/spack/repos/builtin/packages/eigenexa/gcc_compiler.patch b/var/spack/repos/builtin/packages/eigenexa/gcc_compiler.patch new file mode 100644 index 0000000000..3c0e0bf983 --- /dev/null +++ b/var/spack/repos/builtin/packages/eigenexa/gcc_compiler.patch @@ -0,0 +1,29 @@ +--- a/configure.ac ++++ c/configure.ac +@@ -440,7 +440,7 @@ else + FFLAGS=${I_BASE}" -Ofast "${I_ARCH} + + elif test x"${FC_ACT}" = x"gfortran"; then +- FFLAGS=${G_BASE}" -O3 "${G_ARCH} ++ FFLAGS=${G_BASE}" -O3 -fopenmp "${G_ARCH} + + elif test x"${FC_ACT}" = x"mpifrtpx"; then + FFLAGS=${F_BASE}" -Kfast,ocl,simd,swp "${F_ARCH} +@@ -465,7 +465,7 @@ else + FCFLAGS=${I_BASE}" -Ofast "${I_ARCH} + + elif test x"${FC_ACT}" = x"gfortran"; then +- FCFLAGS=${G_BASE}" -O3 "${G_ARCH} ++ FCFLAGS=${G_BASE}" -O3 -fopenmp "${G_ARCH} + + elif test x"${FC_ACT}" = x"mpifrtpx"; then + FCFLAGS=${F_BASE}" -Kfast,ocl,simd,swp "${F_ARCH} +@@ -486,7 +486,7 @@ if test x"${FC_ACT}" = x"ifort"; then + FFLAGS0=${I_BASE}" -O0 " + + elif test x"${FC_ACT}" = x"gfortran"; then +- FFLAGS0=${G_BASE}" -O0" ++ FFLAGS0=${G_BASE}" -O0 -fopenmp " + + elif test x"${FC_ACT}" = x"mpifrtpx"; then + FFLAGS0="-Kopenmp,openmp_ordered_reduction -Cpp" diff --git a/var/spack/repos/builtin/packages/eigenexa/package.py b/var/spack/repos/builtin/packages/eigenexa/package.py index e454ae7af8..265c48b35d 100644 --- a/var/spack/repos/builtin/packages/eigenexa/package.py +++ b/var/spack/repos/builtin/packages/eigenexa/package.py @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other +# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) @@ -25,8 +25,10 @@ class Eigenexa(AutotoolsPackage): depends_on("scalapack") patch("fj_compiler.patch", when="%fj") + patch("gcc_compiler.patch", when="%gcc") parallel = False + force_autoreconf = True def setup_build_environment(self, env): env.set("FC", self.spec["mpi"].mpifc, force=True) @@ -47,3 +49,21 @@ def setup_build_environment(self, env): ) ), ) + + @run_after('install') + def cache_test_sources(self): + self.cache_extra_test_sources("benchmark") + + def test(self): + test_dir = self.test_suite.current_test_data_dir + exe_name = join_path(test_dir, "run-test.sh") + mpi_name = self.spec["mpi"].prefix.bin.mpirun + test_file = join_path( + self.install_test_root, "benchmark", "eigenexa_benchmark" + ) + input_file = join_path(self.install_test_root, "benchmark", "IN") + opts = [exe_name, mpi_name, '-n', '1', test_file, '-f', input_file] + env["OMP_NUM_THREADS"] = "1" + self.run_test( + "sh", options=opts, expected="EigenExa Test Passed !", work_dir=test_dir + ) diff --git a/var/spack/repos/builtin/packages/eigenexa/test/result-check.sh b/var/spack/repos/builtin/packages/eigenexa/test/result-check.sh new file mode 100644 index 0000000000..a8a406ec23 --- /dev/null +++ b/var/spack/repos/builtin/packages/eigenexa/test/result-check.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +grep -q "Benchmark completed" $@ +if [ $? -eq 1 ]; then + echo "EigenExa Test Failed !" + exit 1 +fi + +while read line;do + case $line in + *'Eigenvalue Relative Error'* ) + tmp=$line + read line + if [[ "$line" != '|w| is too small, so it is not severe.' ]]; then + echo "${tmp}" >> output.txt + fi + ;; + *'Eigenvalue Absolute Error'* ) + tmp=$line + read line + if [ "$line" != 'Do not mind it. Condition number is too large.' ] && \ + [ "$line" != 'Do not mind it. Relative error is small enough' ]; then + echo "${tmp}" >> output.txt + fi + ;; + *'Residual Error Test'* | *'Orthogonality Test'* ) + echo "${line}" >> output.txt ;; + esac +done < $@ + +grep -q "FAILED" output.txt +if [ $? -eq 1 ]; then + echo "EigenExa Test Passed !" +elif [ $? -eq 0 ]; then + echo "EigenExa Test Failed !" +fi diff --git a/var/spack/repos/builtin/packages/eigenexa/test/run-test.sh b/var/spack/repos/builtin/packages/eigenexa/test/run-test.sh new file mode 100644 index 0000000000..3ec7a520a6 --- /dev/null +++ b/var/spack/repos/builtin/packages/eigenexa/test/run-test.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +$@ 2>&1 | tee run_test_results.txt +result-check.sh run_test_results.txt