From bd03d2d3efbcaa5dd56bc0dc04a83759c30a939e Mon Sep 17 00:00:00 2001 From: Michael Kuron <mkuron@icp.uni-stuttgart.de> Date: Fri, 27 Jul 2018 11:29:09 +0200 Subject: [PATCH] pe_coupling geometry: squirmers are spheres too --- .../geometry/PeBodyOverlapFunctions.h | 16 ++++++++++++++++ src/pe_coupling/geometry/PeIntersectionRatio.h | 3 ++- src/pe_coupling/geometry/PeOverlapFraction.h | 3 ++- .../geometry/SphereEquivalentDiameter.h | 3 ++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/pe_coupling/geometry/PeBodyOverlapFunctions.h b/src/pe_coupling/geometry/PeBodyOverlapFunctions.h index 5d51a0bf3..b0b0b3b28 100644 --- a/src/pe_coupling/geometry/PeBodyOverlapFunctions.h +++ b/src/pe_coupling/geometry/PeBodyOverlapFunctions.h @@ -27,6 +27,7 @@ #include "pe/rigidbody/RigidBody.h" #include "pe/rigidbody/Sphere.h" #include "pe/rigidbody/Plane.h" +#include "pe/rigidbody/Squirmer.h" namespace walberla { namespace geometry { @@ -83,6 +84,21 @@ template<> inline bool contains( const pe::Sphere & peSphere, const Vector3<real return peSphere.containsPoint( point[0], point[1], point[2] ); } +template<> inline FastOverlapResult fastOverlapCheck( const pe::Squirmer & peSquirmer, const AABB & box ) +{ + return fastOverlapCheck( static_cast<const pe::Sphere &>(peSquirmer), box ); +} + +template<> inline FastOverlapResult fastOverlapCheck( const pe::Squirmer & peSquirmer, const Vector3<real_t> & cellMidpoint, const Vector3<real_t> & dx ) +{ + return fastOverlapCheck( static_cast<const pe::Sphere &>(peSquirmer), cellMidpoint, dx ); +} + +template<> inline bool contains( const pe::Squirmer & peSquirmer, const Vector3<real_t> & point ) +{ + return contains( static_cast<const pe::Sphere &>(peSquirmer), point ); +} + ///////////////////////////////////////////////// // specialization for pe::Plane // ///////////////////////////////////////////////// diff --git a/src/pe_coupling/geometry/PeIntersectionRatio.h b/src/pe_coupling/geometry/PeIntersectionRatio.h index 809665719..0697fc943 100644 --- a/src/pe_coupling/geometry/PeIntersectionRatio.h +++ b/src/pe_coupling/geometry/PeIntersectionRatio.h @@ -29,6 +29,7 @@ #include "pe/rigidbody/Ellipsoid.h" #include "pe/rigidbody/Plane.h" #include "pe/rigidbody/Sphere.h" +#include "pe/rigidbody/Squirmer.h" #include "pe/Types.h" @@ -52,7 +53,7 @@ inline real_t intersectionRatio( const pe::RigidBody & peRigidBody, const Vector3<real_t> & direction, const real_t epsilon ) { - if( peRigidBody.getTypeID() == pe::Sphere::getStaticTypeID() ) + if( peRigidBody.getTypeID() == pe::Sphere::getStaticTypeID() || peRigidBody.getTypeID() == pe::Squirmer::getStaticTypeID() ) { const pe::Sphere & sphere = static_cast< const pe::Sphere & >( peRigidBody ); const real_t ratio = intersectionRatioSpherePe( sphere, fluidPoint, direction ); diff --git a/src/pe_coupling/geometry/PeOverlapFraction.h b/src/pe_coupling/geometry/PeOverlapFraction.h index 82dff5027..7193aae0a 100644 --- a/src/pe_coupling/geometry/PeOverlapFraction.h +++ b/src/pe_coupling/geometry/PeOverlapFraction.h @@ -25,6 +25,7 @@ #include "pe/rigidbody/RigidBody.h" #include "pe/rigidbody/Sphere.h" +#include "pe/rigidbody/Squirmer.h" #include "pe/rigidbody/Plane.h" #include "PeBodyOverlapFunctions.h" @@ -36,7 +37,7 @@ namespace pe_coupling{ real_t overlapFractionPe( const pe::RigidBody & peRigidBody, const Vector3<real_t> & cellMidpoint, const Vector3<real_t> & dx, uint_t maxDepth=4 ) { - if( peRigidBody.getTypeID() == pe::Sphere::getStaticTypeID() ) + if( peRigidBody.getTypeID() == pe::Sphere::getStaticTypeID() || peRigidBody.getTypeID() == pe::Squirmer::getStaticTypeID() ) { const pe::Sphere & sphere = static_cast< const pe::Sphere & >( peRigidBody ); return geometry::overlapFraction( sphere, cellMidpoint, dx, maxDepth ); diff --git a/src/pe_coupling/geometry/SphereEquivalentDiameter.h b/src/pe_coupling/geometry/SphereEquivalentDiameter.h index 3e1bfbc7b..d37503791 100644 --- a/src/pe_coupling/geometry/SphereEquivalentDiameter.h +++ b/src/pe_coupling/geometry/SphereEquivalentDiameter.h @@ -24,6 +24,7 @@ #include "pe/rigidbody/RigidBody.h" #include "pe/rigidbody/Sphere.h" +#include "pe/rigidbody/Squirmer.h" namespace walberla { namespace pe_coupling { @@ -32,7 +33,7 @@ namespace pe_coupling { // calculates sphere-equivalent diameter (diameter of a sphere with same volume as given body) real_t getSphereEquivalentDiameter( pe::RigidBody & body ) { - if( body.getTypeID() == pe::Sphere::getStaticTypeID() ) + if( body.getTypeID() == pe::Sphere::getStaticTypeID() || body.getTypeID() == pe::Squirmer::getStaticTypeID() ) { pe::Sphere & sphere = static_cast<pe::Sphere &>( body ); real_t radius = sphere.getRadius(); -- GitLab