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