From 61855177bd60ab92a39d015498e7bcd321922ece Mon Sep 17 00:00:00 2001 From: Lukas Werner <lks.werner@fau.de> Date: Tue, 31 Mar 2020 10:40:08 +0200 Subject: [PATCH] Adapted shape pack unpack test to support Inf --- tests/mesa_pd/mpi/ShapePackUnpack.cpp | 28 ++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/tests/mesa_pd/mpi/ShapePackUnpack.cpp b/tests/mesa_pd/mpi/ShapePackUnpack.cpp index a26177f48..3efe46404 100644 --- a/tests/mesa_pd/mpi/ShapePackUnpack.cpp +++ b/tests/mesa_pd/mpi/ShapePackUnpack.cpp @@ -37,6 +37,16 @@ namespace walberla { using namespace walberla::mesa_pd; +void checkIdenticalOrInf(const Mat3& mat0, const Mat3& mat1) { + for (uint_t i = 0; i <= 8; i++) { + WALBERLA_CHECK((math::isinf(mat0[i]) && math::isinf(mat1[i])) || realIsIdentical(mat0[i], mat1[i]), "Matrices don't match: " << mat0 << " vs. " << mat1); + } +} + +void checkIdenticalOrInf(real_t a, real_t b) { + WALBERLA_CHECK((math::isinf(a) && math::isinf(b)) || realIsIdentical(a, b), "Values don't match: " << a << " vs. " << b); +} + void checkBox() { using namespace walberla::mpi; @@ -57,8 +67,8 @@ void checkBox() WALBERLA_CHECK_EQUAL(bs1->getShapeType(), data::Box::SHAPE_TYPE); WALBERLA_CHECK_IDENTICAL(bs0->getMass(), bs1->getMass()); WALBERLA_CHECK_IDENTICAL(bs0->getInvMass(), bs1->getInvMass()); - WALBERLA_CHECK_IDENTICAL(bs0->getInertiaBF(), bs1->getInertiaBF()); - WALBERLA_CHECK_IDENTICAL(bs0->getInvInertiaBF(), bs1->getInvInertiaBF()); + checkIdenticalOrInf(bs0->getInertiaBF(), bs1->getInertiaBF()); + checkIdenticalOrInf(bs0->getInvInertiaBF(), bs1->getInvInertiaBF()); auto bx0 = static_cast<data::Box*> (bs0.get()); auto bx1 = static_cast<data::Box*> (bs1.get()); @@ -87,8 +97,8 @@ void checkCylindricalBoundary() WALBERLA_CHECK_EQUAL(bs1->getShapeType(), data::CylindricalBoundary::SHAPE_TYPE); WALBERLA_CHECK_IDENTICAL(bs0->getMass(), bs1->getMass()); WALBERLA_CHECK_IDENTICAL(bs0->getInvMass(), bs1->getInvMass()); - WALBERLA_CHECK_IDENTICAL(bs0->getInertiaBF(), bs1->getInertiaBF()); - WALBERLA_CHECK_IDENTICAL(bs0->getInvInertiaBF(), bs1->getInvInertiaBF()); + checkIdenticalOrInf(bs0->getInertiaBF(), bs1->getInertiaBF()); + checkIdenticalOrInf(bs0->getInvInertiaBF(), bs1->getInvInertiaBF()); auto cb0 = static_cast<data::CylindricalBoundary*> (bs0.get()); auto cb1 = static_cast<data::CylindricalBoundary*> (bs1.get()); @@ -117,8 +127,8 @@ void checkEllipsoid() WALBERLA_CHECK_EQUAL(bs1->getShapeType(), data::Ellipsoid::SHAPE_TYPE); WALBERLA_CHECK_IDENTICAL(bs0->getMass(), bs1->getMass()); WALBERLA_CHECK_IDENTICAL(bs0->getInvMass(), bs1->getInvMass()); - WALBERLA_CHECK_IDENTICAL(bs0->getInertiaBF(), bs1->getInertiaBF()); - WALBERLA_CHECK_IDENTICAL(bs0->getInvInertiaBF(), bs1->getInvInertiaBF()); + checkIdenticalOrInf(bs0->getInertiaBF(), bs1->getInertiaBF()); + checkIdenticalOrInf(bs0->getInvInertiaBF(), bs1->getInvInertiaBF()); auto el0 = static_cast<data::Ellipsoid*> (bs0.get()); auto el1 = static_cast<data::Ellipsoid*> (bs1.get()); @@ -144,9 +154,9 @@ void checkHalfSpace() WALBERLA_LOG_INFO("checking half space"); WALBERLA_CHECK_EQUAL(bs0->getShapeType(), data::HalfSpace::SHAPE_TYPE); WALBERLA_CHECK_EQUAL(bs1->getShapeType(), data::HalfSpace::SHAPE_TYPE); -// WALBERLA_CHECK_IDENTICAL(bs0->getMass(), bs1->getMass()); //INF + checkIdenticalOrInf(bs0->getMass(), bs1->getMass()); //INF WALBERLA_CHECK_IDENTICAL(bs0->getInvMass(), bs1->getInvMass()); -// WALBERLA_CHECK_IDENTICAL(bs0->getInertiaBF(), bs1->getInertiaBF()); //INF + checkIdenticalOrInf(bs0->getInertiaBF(), bs1->getInertiaBF()); //INF WALBERLA_CHECK_IDENTICAL(bs0->getInvInertiaBF(), bs1->getInvInertiaBF()); auto hs0 = static_cast<data::HalfSpace*> (bs0.get()); @@ -204,4 +214,4 @@ int main( int argc, char ** argv ) int main( int argc, char ** argv ) { return walberla::main(argc, argv); -} +} \ No newline at end of file -- GitLab