From 88b5df1c0e1f36b34a096b2d18d4d00256aaaaa1 Mon Sep 17 00:00:00 2001 From: Sebastian Eibl <sebastian.eibl@fau.de> Date: Thu, 4 Feb 2021 16:11:35 +0100 Subject: [PATCH] added check macros to vbondmodel benchmark --- apps/benchmarks/CNT/CMakeLists.txt | 2 ++ apps/benchmarks/CNT/VBondModel.cpp | 35 ++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/apps/benchmarks/CNT/CMakeLists.txt b/apps/benchmarks/CNT/CMakeLists.txt index 320d0ce94..5fc6f783f 100644 --- a/apps/benchmarks/CNT/CMakeLists.txt +++ b/apps/benchmarks/CNT/CMakeLists.txt @@ -1,3 +1,5 @@ waLBerla_add_executable ( NAME VBondModel FILES VBondModel.cpp DEPENDS core mesa_pd ) +#waLBerla_execute_test( NAME MESA_PD_CNT_VBondModel +# COMMAND $<TARGET_FILE:VBondModel> ) diff --git a/apps/benchmarks/CNT/VBondModel.cpp b/apps/benchmarks/CNT/VBondModel.cpp index 048ba24ef..de90df0ce 100644 --- a/apps/benchmarks/CNT/VBondModel.cpp +++ b/apps/benchmarks/CNT/VBondModel.cpp @@ -54,7 +54,7 @@ int main(int argc, char **argv) for (auto i = 0; i < 10; ++i) { data::Particle &&p = *ps->create(); - p.setPosition(Vec3(0_r, 0_r, real_c(i) * 13.56_r)); + p.setPosition(Vec3(500_r, 500_r, 500_r + real_c(i) * 13.56_r)); p.setSegmentID(i); p.setClusterID(1); if (i == 0) @@ -82,7 +82,13 @@ int main(int argc, char **argv) WALBERLA_LOG_INFO_ON_ROOT("running simulation"); auto appliedForce = Vec3(1_r, 0_r, 0_r); - auto appliedTorque = Vec3(0_r); + auto appliedTorque = Vec3(0_r, 0_r, 1_r); + + real_t tensileEnergy = 0_r; + real_t shearEnergy = 0_r; + real_t bendingEnergy = 0_r; + real_t twistingEnergy = 0_r; + std::ofstream fout("output.txt"); for (auto i = 0; i < numSimulationSteps; ++i) { @@ -98,16 +104,18 @@ int main(int argc, char **argv) last_segment.setTorque(appliedTorque); constexpr auto cutoff2 = kernel::cnt::outer_radius * kernel::cnt::outer_radius; - real_t tensileEnergy = 0_r; - real_t shearEnergy = 0_r; - real_t bendingEnergy = 0_r; - real_t twistingEnergy = 0_r; + tensileEnergy = 0_r; + shearEnergy = 0_r; + bendingEnergy = 0_r; + twistingEnergy = 0_r; ps->forEachParticlePairHalf(false, kernel::SelectAll(), ac, - [&](size_t p_idx1, size_t p_idx2, Accessor &ac) + [&](size_t p_idx1, size_t p_idx2) { + if (ac.getClusterID(p_idx1) != ac.getClusterID(p_idx2)) return; + if (std::abs(ac.getSegmentID(p_idx1) - ac.getSegmentID(p_idx2)) != 1) return; if ((ac.getPosition(p_idx1) - ac.getPosition(p_idx2)).sqrLength() < cutoff2) { vbond(p_idx1, p_idx2, ac); @@ -116,8 +124,7 @@ int main(int argc, char **argv) bendingEnergy += vbond.bendingEnergy; twistingEnergy += vbond.twistingEnergy; } - }, - ac); + }); ps->forEachParticle(false, kernel::SelectAll(), @@ -133,11 +140,21 @@ int main(int argc, char **argv) << std::endl; } + WALBERLA_CHECK_FLOAT_EQUAL(tensileEnergy, 1.88111638964774328e-02_r); + WALBERLA_CHECK_FLOAT_EQUAL(shearEnergy, 2.04795345750102054e-01_r); + WALBERLA_CHECK_FLOAT_EQUAL(bendingEnergy, 3.28859587360327978e+01_r); + WALBERLA_CHECK_FLOAT_EQUAL(twistingEnergy, 1.44177931971837983e-03_r); + return EXIT_SUCCESS; } } // namespace walberla int main(int argc, char *argv[]) { + if (std::is_same<walberla::real_t, float>::value) + { + WALBERLA_LOG_WARNING("waLBerla build in sp mode: skipping test due to low precision"); + return EXIT_SUCCESS; + } return walberla::main(argc, argv); } -- GitLab