diff --git a/src/pe_coupling/geometry/PeBodyOverlapFunctions.h b/src/pe_coupling/geometry/PeBodyOverlapFunctions.h index 5d51a0bf3ec0c9f07d73523c846728f317de4490..b0b0b3b289b7d7bc1fb3103e187a57b1bc487ab6 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 8096657194ec707d42b1a96ba461efe1d955529a..0697fc94306972ebed5b0c915dd36bcf67d5b516 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 82dff50271e72ac9fe2c4e8a4fc362f93d75ff4f..7193aae0a465b3915219602c145a45e567f34654 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 3e1bfbc7b417e2e397a5548efa90512333a346d4..d3750379167bc8506ec25c6e2d103a19c811b986 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();