From 0461599d0a4cffb76318ea30ed8d4ae538ae0bc6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2020 18:13:55 -0400 Subject: [PATCH] reduce base precision as required when running tests with pppm and FFT_SINGLE --- unittest/force-styles/CMakeLists.txt | 5 +++- unittest/force-styles/pair_style.cpp | 34 +++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/unittest/force-styles/CMakeLists.txt b/unittest/force-styles/CMakeLists.txt index 29487205b3..0629fd537b 100644 --- a/unittest/force-styles/CMakeLists.txt +++ b/unittest/force-styles/CMakeLists.txt @@ -7,7 +7,7 @@ endif() set(TEST_INPUT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_library(style_tests STATIC yaml_writer.cpp error_stats.cpp test_config_reader.cpp test_main.cpp) -target_compile_definitions(style_tests PRIVATE TEST_INPUT_FOLDER=${TEST_INPUT_FOLDER}) +target_compile_definitions(style_tests PRIVATE -DTEST_INPUT_FOLDER=${TEST_INPUT_FOLDER}) target_include_directories(style_tests PRIVATE ${LAMMPS_SOURCE_DIR}) target_link_libraries(style_tests PUBLIC GTest::GTest GTest::GMock Yaml::Yaml) if(BUILD_MPI) @@ -32,6 +32,9 @@ add_test(NAME ErrorStats COMMAND test_error_stats) # pair style tester add_executable(pair_style pair_style.cpp) target_link_libraries(pair_style PRIVATE lammps style_tests) +if(FFT_SINGLE) + target_compile_definitions(pair_style PRIVATE -DFFT_SINGLE) +endif() # tests for a molecular systems and related pair styles file(GLOB MOL_PAIR_TESTS LIST_DIRECTORIES false ${TEST_INPUT_FOLDER}/mol-pair-*.yaml) diff --git a/unittest/force-styles/pair_style.cpp b/unittest/force-styles/pair_style.cpp index f3a9325ae8..6558f56372 100644 --- a/unittest/force-styles/pair_style.cpp +++ b/unittest/force-styles/pair_style.cpp @@ -28,10 +28,12 @@ #include "force.h" #include "info.h" #include "input.h" +#include "kspace.h" #include "lammps.h" #include "modify.h" #include "pair.h" #include "universe.h" +#include "utils.h" #include #include @@ -375,8 +377,13 @@ TEST(PairStyle, plain) ASSERT_EQ(lmp->atom->natoms, nlocal); double epsilon = test_config.epsilon; - double **f = lmp->atom->f; - tagint *tag = lmp->atom->tag; + // relax test precision when using pppm and single precision FFTs +#if defined(FFT_SINGLE) + if (lmp->force->kspace && lmp->force->kspace->compute_flag) + if (utils::strmatch(lmp->force->kspace_style, "^pppm")) epsilon *= 2.0e8; +#endif + double **f = lmp->atom->f; + tagint *tag = lmp->atom->tag; ErrorStats stats; stats.reset(); const std::vector &f_ref = test_config.init_forces; @@ -646,7 +653,12 @@ TEST(PairStyle, omp) ASSERT_EQ(lmp->atom->natoms, nlocal); // relax error a bit for USER-OMP package - double epsilon = 5.0 * test_config.epsilon; + double epsilon = 5.0 * test_config.epsilon; + // relax test precision when using pppm and single precision FFTs +#if defined(FFT_SINGLE) + if (lmp->force->kspace && lmp->force->kspace->compute_flag) + if (utils::strmatch(lmp->force->kspace_style, "^pppm")) epsilon *= 2.0e8; +#endif double **f = lmp->atom->f; tagint *tag = lmp->atom->tag; const std::vector &f_ref = test_config.init_forces; @@ -814,6 +826,11 @@ TEST(PairStyle, intel) // relax error a bit for USER-INTEL package double epsilon = 7.5 * test_config.epsilon; + // relax test precision when using pppm and single precision FFTs +#if defined(FFT_SINGLE) + if (lmp->force->kspace && lmp->force->kspace->compute_flag) + if (utils::strmatch(lmp->force->kspace_style, "^pppm")) epsilon *= 2.0e8; +#endif // we need to relax the epsilon a LOT for tests using long-range // coulomb with tabulation. seems more like mixed precision or a bug @@ -932,7 +949,12 @@ TEST(PairStyle, opt) ASSERT_EQ(lmp->atom->natoms, nlocal); // relax error a bit for OPT package - double epsilon = 2.0 * test_config.epsilon; + double epsilon = 2.0 * test_config.epsilon; + // relax test precision when using pppm and single precision FFTs +#if defined(FFT_SINGLE) + if (lmp->force->kspace && lmp->force->kspace->compute_flag) + if (utils::strmatch(lmp->force->kspace_style, "^pppm")) epsilon *= 2.0e8; +#endif double **f = lmp->atom->f; tagint *tag = lmp->atom->tag; const std::vector &f_ref = test_config.init_forces; @@ -1283,8 +1305,8 @@ TEST(PairStyle, extract) GTEST_SKIP(); } - void *ptr = nullptr; - int dim = 0; + void *ptr = nullptr; + int dim = 0; for (auto &extract : test_config.extract) { ptr = pair->extract(extract.first.c_str(), dim); EXPECT_NE(ptr, nullptr);