diff --git a/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H b/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H
index 7ca5cb49e..45518675b 100644
--- a/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H
+++ b/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H
@@ -115,7 +115,7 @@ public:
 
         virtual sourceType setType() const
         {
-            return CELLSETSOURCE;
+            return FACESETSOURCE;
         }
 
         virtual void applyToSet
diff --git a/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H b/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H
index 03f735477..a3a320c04 100644
--- a/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H
+++ b/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H
@@ -111,7 +111,7 @@ public:
 
         virtual sourceType setType() const
         {
-            return CELLSETSOURCE;
+            return FACESETSOURCE;
         }
 
         virtual void applyToSet
diff --git a/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.C b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.C
new file mode 100644
index 000000000..864078def
--- /dev/null
+++ b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.C
@@ -0,0 +1,137 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2011-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "sphereToFace.H"
+#include "polyMesh.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(sphereToFace, 0);
+    addToRunTimeSelectionTable(topoSetSource, sphereToFace, word);
+    addToRunTimeSelectionTable(topoSetSource, sphereToFace, istream);
+}
+
+
+Foam::topoSetSource::addToUsageTable Foam::sphereToFace::usage_
+(
+    sphereToFace::typeName,
+    "\n    Usage: sphereToFace (centreX centreY centreZ) radius\n\n"
+    "    Select all faces with face centre within bounding sphere\n\n"
+);
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::sphereToFace::combine(topoSet& set, const bool add) const
+{
+    const pointField& ctrs = mesh_.faceCentres();
+
+    const scalar radSquared = radius_*radius_;
+
+    forAll(ctrs, facei)
+    {
+        scalar offset = magSqr(centre_ - ctrs[facei]);
+        if (offset <= radSquared)
+        {
+            addOrDelete(set, facei, add);
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::sphereToFace::sphereToFace
+(
+    const polyMesh& mesh,
+    const vector& centre,
+    const scalar radius
+)
+:
+    topoSetSource(mesh),
+    centre_(centre),
+    radius_(radius)
+{}
+
+
+Foam::sphereToFace::sphereToFace
+(
+    const polyMesh& mesh,
+    const dictionary& dict
+)
+:
+    topoSetSource(mesh),
+    centre_(dict.lookup("centre")),
+    radius_(dict.lookup<scalar>("radius"))
+{}
+
+
+Foam::sphereToFace::sphereToFace
+(
+    const polyMesh& mesh,
+    Istream& is
+)
+:
+    topoSetSource(mesh),
+    centre_(checkIs(is)),
+    radius_(readScalar(checkIs(is)))
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::sphereToFace::~sphereToFace()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::sphereToFace::applyToSet
+(
+    const topoSetSource::setAction action,
+    topoSet& set
+) const
+{
+    if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
+    {
+        Info<< "    Adding faces with centre within sphere, with centre = "
+            << centre_ << " and radius = " << radius_ << endl;
+
+        combine(set, true);
+    }
+    else if (action == topoSetSource::DELETE)
+    {
+        Info<< "    Removing faces with centre within sphere, with centre = "
+            << centre_ << " and radius = " << radius_ << endl;
+
+        combine(set, false);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.H b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.H
new file mode 100644
index 000000000..a89ee0783
--- /dev/null
+++ b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.H
@@ -0,0 +1,130 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2011-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::sphereToFace
+
+Description
+    A topoSetSource to select cells based on cell centres inside sphere.
+
+SourceFiles
+    sphereToFace.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef sphereToFace_H
+#define sphereToFace_H
+
+#include "topoSetSource.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class sphereToFace Declaration
+\*---------------------------------------------------------------------------*/
+
+class sphereToFace
+:
+    public topoSetSource
+{
+
+    // Private Data
+
+        //- Add usage string
+        static addToUsageTable usage_;
+
+        //- Centre
+        vector centre_;
+
+        //- Radius
+        scalar radius_;
+
+
+    // Private Member Functions
+
+        void combine(topoSet& set, const bool add) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("sphereToFace");
+
+
+    // Constructors
+
+        //- Construct from components
+        sphereToFace
+        (
+            const polyMesh& mesh,
+            const vector& centre,
+            const scalar radius
+        );
+
+        //- Construct from dictionary
+        sphereToFace
+        (
+            const polyMesh& mesh,
+            const dictionary& dict
+        );
+
+        //- Construct from Istream
+        sphereToFace
+        (
+            const polyMesh& mesh,
+            Istream&
+        );
+
+
+    //- Destructor
+    virtual ~sphereToFace();
+
+
+    // Member Functions
+
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
+        virtual void applyToSet
+        (
+            const topoSetSource::setAction action,
+            topoSet&
+        ) const;
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.C b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.C
new file mode 100644
index 000000000..accdb2a58
--- /dev/null
+++ b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.C
@@ -0,0 +1,160 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2017-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cylinderAnnulusToPoint.H"
+#include "polyMesh.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(cylinderAnnulusToPoint, 0);
+    addToRunTimeSelectionTable(topoSetSource, cylinderAnnulusToPoint, word);
+    addToRunTimeSelectionTable(topoSetSource, cylinderAnnulusToPoint, istream);
+}
+
+
+Foam::topoSetSource::addToUsageTable Foam::cylinderAnnulusToPoint::usage_
+(
+    cylinderAnnulusToPoint::typeName,
+    "\n    Usage: cylinderAnnulusToPoint (p1X p1Y p1Z) (p2X p2Y p2Z)"
+    " outerRadius innerRadius\n\n"
+    "    Select all points within bounding cylinder annulus\n\n"
+);
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::cylinderAnnulusToPoint::combine(topoSet& set, const bool add) const
+{
+    const vector axis = p2_ - p1_;
+    const scalar orad2 = sqr(outerRadius_);
+    const scalar irad2 = sqr(innerRadius_);
+    const scalar magAxis2 = magSqr(axis);
+
+    const pointField& ctrs = mesh_.points();
+
+    forAll(ctrs, pointi)
+    {
+        vector d = ctrs[pointi] - p1_;
+        scalar magD = d & axis;
+
+        if ((magD > 0) && (magD < magAxis2))
+        {
+            scalar d2 = (d & d) - sqr(magD)/magAxis2;
+            if ((d2 < orad2) && (d2 > irad2))
+            {
+                addOrDelete(set, pointi, add);
+            }
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cylinderAnnulusToPoint::cylinderAnnulusToPoint
+(
+    const polyMesh& mesh,
+    const vector& p1,
+    const vector& p2,
+    const scalar outerRadius,
+    const scalar innerRadius
+)
+:
+    topoSetSource(mesh),
+    p1_(p1),
+    p2_(p2),
+    outerRadius_(outerRadius),
+    innerRadius_(innerRadius)
+{}
+
+
+Foam::cylinderAnnulusToPoint::cylinderAnnulusToPoint
+(
+    const polyMesh& mesh,
+    const dictionary& dict
+)
+:
+    topoSetSource(mesh),
+    p1_(dict.lookup("p1")),
+    p2_(dict.lookup("p2")),
+    outerRadius_(dict.lookup<scalar>("outerRadius")),
+    innerRadius_(dict.lookup<scalar>("innerRadius"))
+{}
+
+
+Foam::cylinderAnnulusToPoint::cylinderAnnulusToPoint
+(
+    const polyMesh& mesh,
+    Istream& is
+)
+:
+    topoSetSource(mesh),
+    p1_(checkIs(is)),
+    p2_(checkIs(is)),
+    outerRadius_(readScalar(checkIs(is))),
+    innerRadius_(readScalar(checkIs(is)))
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cylinderAnnulusToPoint::~cylinderAnnulusToPoint()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::cylinderAnnulusToPoint::applyToSet
+(
+    const topoSetSource::setAction action,
+    topoSet& set
+) const
+{
+    if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
+    {
+        Info<< "    Adding points within cylinder annulus,"
+            << " with p1 = "
+            << p1_ << ", p2 = " << p2_ << " and outer radius = " << outerRadius_
+        << " and inner radius = " << innerRadius_
+        << endl;
+
+        combine(set, true);
+    }
+    else if (action == topoSetSource::DELETE)
+    {
+        Info<< "    Removing points within cylinder, with p1 = "
+            << p1_ << ", p2 = " << p2_ << " and outer radius = " << outerRadius_
+        << " and inner radius " << innerRadius_
+        << endl;
+
+        combine(set, false);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.H b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.H
new file mode 100644
index 000000000..233cb1b66
--- /dev/null
+++ b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.H
@@ -0,0 +1,137 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2017-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cylinderAnnulusToPoint
+
+Description
+    A topoSetSource to select faces based on face centres inside a
+    cylinder annulus.
+
+SourceFiles
+    cylinderAnnulusToPoint.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cylinderAnnulusToPoint_H
+#define cylinderAnnulusToPoint_H
+
+#include "topoSetSource.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class cylinderAnnulusToPoint Declaration
+\*---------------------------------------------------------------------------*/
+
+class cylinderAnnulusToPoint
+:
+    public topoSetSource
+{
+
+    // Private Data
+
+        //- Add usage string
+        static addToUsageTable usage_;
+
+        //- First point on cylinder axis
+        vector p1_;
+
+        //- Second point on cylinder axis
+        vector p2_;
+
+        //- Outer Radius
+        scalar outerRadius_;
+
+        //- Inner Radius
+        scalar innerRadius_;
+
+
+    // Private Member Functions
+
+        void combine(topoSet& set, const bool add) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("cylinderAnnulusToPoint");
+
+
+    // Constructors
+
+        //- Construct from components
+        cylinderAnnulusToPoint
+        (
+            const polyMesh& mesh,
+            const vector& p1,
+            const vector& p2,
+            const scalar outerRadius,
+            const scalar innerRadius
+        );
+
+        //- Construct from dictionary
+        cylinderAnnulusToPoint
+        (
+            const polyMesh& mesh,
+            const dictionary& dict
+        );
+
+        //- Construct from Istream
+        cylinderAnnulusToPoint
+        (
+            const polyMesh& mesh,
+            Istream&
+        );
+
+
+    // Destructor
+    virtual ~cylinderAnnulusToPoint();
+
+    // Member Functions
+
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
+        virtual void applyToSet
+        (
+            const topoSetSource::setAction action,
+            topoSet&
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.C b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.C
new file mode 100644
index 000000000..c02258ee0
--- /dev/null
+++ b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.C
@@ -0,0 +1,149 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2017-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cylinderToPoint.H"
+#include "polyMesh.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(cylinderToPoint, 0);
+    addToRunTimeSelectionTable(topoSetSource, cylinderToPoint, word);
+    addToRunTimeSelectionTable(topoSetSource, cylinderToPoint, istream);
+}
+
+
+Foam::topoSetSource::addToUsageTable Foam::cylinderToPoint::usage_
+(
+    cylinderToPoint::typeName,
+    "\n    Usage: cylinderToPoint (p1X p1Y p1Z) (p2X p2Y p2Z) radius\n\n"
+    "    Select all points within bounding cylinder\n\n"
+);
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::cylinderToPoint::combine(topoSet& set, const bool add) const
+{
+    const vector axis = p2_ - p1_;
+    const scalar rad2 = sqr(radius_);
+    const scalar magAxis2 = magSqr(axis);
+
+    const pointField& ctrs = mesh_.points();
+
+    forAll(ctrs, pointi)
+    {
+        vector d = ctrs[pointi] - p1_;
+        scalar magD = d & axis;
+
+        if ((magD > 0) && (magD < magAxis2))
+        {
+            scalar d2 = (d & d) - sqr(magD)/magAxis2;
+            if (d2 < rad2)
+            {
+                addOrDelete(set, pointi, add);
+            }
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cylinderToPoint::cylinderToPoint
+(
+    const polyMesh& mesh,
+    const vector& p1,
+    const vector& p2,
+    const scalar radius
+)
+:
+    topoSetSource(mesh),
+    p1_(p1),
+    p2_(p2),
+    radius_(radius)
+{}
+
+
+Foam::cylinderToPoint::cylinderToPoint
+(
+    const polyMesh& mesh,
+    const dictionary& dict
+)
+:
+    topoSetSource(mesh),
+    p1_(dict.lookup("p1")),
+    p2_(dict.lookup("p2")),
+    radius_(dict.lookup<scalar>("radius"))
+{}
+
+
+Foam::cylinderToPoint::cylinderToPoint
+(
+    const polyMesh& mesh,
+    Istream& is
+)
+:
+    topoSetSource(mesh),
+    p1_(checkIs(is)),
+    p2_(checkIs(is)),
+    radius_(readScalar(checkIs(is)))
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cylinderToPoint::~cylinderToPoint()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::cylinderToPoint::applyToSet
+(
+    const topoSetSource::setAction action,
+    topoSet& set
+) const
+{
+    if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
+    {
+        Info<< "    Adding points within cylinder, with p1 = "
+            << p1_ << ", p2 = " << p2_ << " and radius = " << radius_ << endl;
+
+        combine(set, true);
+    }
+    else if (action == topoSetSource::DELETE)
+    {
+        Info<< "    Removing points within cylinder, with p1 = "
+            << p1_ << ", p2 = " << p2_ << " and radius = " << radius_ << endl;
+
+        combine(set, false);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.H b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.H
new file mode 100644
index 000000000..9e171568b
--- /dev/null
+++ b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.H
@@ -0,0 +1,133 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2017-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cylinderToPoint
+
+Description
+    A topoSetSource to select faces based on face centres inside a cylinder.
+
+SourceFiles
+    cylinderToPoint.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cylinderToPoint_H
+#define cylinderToPoint_H
+
+#include "topoSetSource.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class cylinderToPoint Declaration
+\*---------------------------------------------------------------------------*/
+
+class cylinderToPoint
+:
+    public topoSetSource
+{
+
+    // Private Data
+
+        //- Add usage string
+        static addToUsageTable usage_;
+
+        //- First point on cylinder axis
+        vector p1_;
+
+        //- Second point on cylinder axis
+        vector p2_;
+
+        //- Radius
+        scalar radius_;
+
+
+    // Private Member Functions
+
+        void combine(topoSet& set, const bool add) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("cylinderToPoint");
+
+
+    // Constructors
+
+        //- Construct from components
+        cylinderToPoint
+        (
+            const polyMesh& mesh,
+            const vector& p1,
+            const vector& p2,
+            const scalar radius
+        );
+
+        //- Construct from dictionary
+        cylinderToPoint
+        (
+            const polyMesh& mesh,
+            const dictionary& dict
+        );
+
+        //- Construct from Istream
+        cylinderToPoint
+        (
+            const polyMesh& mesh,
+            Istream&
+        );
+
+
+    //- Destructor
+    virtual ~cylinderToPoint();
+
+
+    // Member Functions
+
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
+        virtual void applyToSet
+        (
+            const topoSetSource::setAction action,
+            topoSet&
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.C b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.C
new file mode 100644
index 000000000..2f465d5d4
--- /dev/null
+++ b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.C
@@ -0,0 +1,137 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2011-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "sphereToPoint.H"
+#include "polyMesh.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(sphereToPoint, 0);
+    addToRunTimeSelectionTable(topoSetSource, sphereToPoint, word);
+    addToRunTimeSelectionTable(topoSetSource, sphereToPoint, istream);
+}
+
+
+Foam::topoSetSource::addToUsageTable Foam::sphereToPoint::usage_
+(
+    sphereToPoint::typeName,
+    "\n    Usage: sphereToPoint (centreX centreY centreZ) radius\n\n"
+    "    Select all points within bounding sphere\n\n"
+);
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::sphereToPoint::combine(topoSet& set, const bool add) const
+{
+    const pointField& ctrs = mesh_.points();
+
+    const scalar radSquared = radius_*radius_;
+
+    forAll(ctrs, pointi)
+    {
+        scalar offset = magSqr(centre_ - ctrs[pointi]);
+        if (offset <= radSquared)
+        {
+            addOrDelete(set, pointi, add);
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::sphereToPoint::sphereToPoint
+(
+    const polyMesh& mesh,
+    const vector& centre,
+    const scalar radius
+)
+:
+    topoSetSource(mesh),
+    centre_(centre),
+    radius_(radius)
+{}
+
+
+Foam::sphereToPoint::sphereToPoint
+(
+    const polyMesh& mesh,
+    const dictionary& dict
+)
+:
+    topoSetSource(mesh),
+    centre_(dict.lookup("centre")),
+    radius_(dict.lookup<scalar>("radius"))
+{}
+
+
+Foam::sphereToPoint::sphereToPoint
+(
+    const polyMesh& mesh,
+    Istream& is
+)
+:
+    topoSetSource(mesh),
+    centre_(checkIs(is)),
+    radius_(readScalar(checkIs(is)))
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::sphereToPoint::~sphereToPoint()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::sphereToPoint::applyToSet
+(
+    const topoSetSource::setAction action,
+    topoSet& set
+) const
+{
+    if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
+    {
+        Info<< "    Adding points within sphere, with centre = "
+            << centre_ << " and radius = " << radius_ << endl;
+
+        combine(set, true);
+    }
+    else if (action == topoSetSource::DELETE)
+    {
+        Info<< "    Removing points within sphere, with centre = "
+            << centre_ << " and radius = " << radius_ << endl;
+
+        combine(set, false);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.H b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.H
new file mode 100644
index 000000000..4c9af7427
--- /dev/null
+++ b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.H
@@ -0,0 +1,130 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     | Website:  https://openfoam.org
+    \\  /    A nd           | Copyright (C) 2011-2019 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::sphereToPoint
+
+Description
+    A topoSetSource to select cells based on cell centres inside sphere.
+
+SourceFiles
+    sphereToPoint.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef sphereToPoint_H
+#define sphereToPoint_H
+
+#include "topoSetSource.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class sphereToPoint Declaration
+\*---------------------------------------------------------------------------*/
+
+class sphereToPoint
+:
+    public topoSetSource
+{
+
+    // Private Data
+
+        //- Add usage string
+        static addToUsageTable usage_;
+
+        //- Centre
+        vector centre_;
+
+        //- Radius
+        scalar radius_;
+
+
+    // Private Member Functions
+
+        void combine(topoSet& set, const bool add) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("sphereToPoint");
+
+
+    // Constructors
+
+        //- Construct from components
+        sphereToPoint
+        (
+            const polyMesh& mesh,
+            const vector& centre,
+            const scalar radius
+        );
+
+        //- Construct from dictionary
+        sphereToPoint
+        (
+            const polyMesh& mesh,
+            const dictionary& dict
+        );
+
+        //- Construct from Istream
+        sphereToPoint
+        (
+            const polyMesh& mesh,
+            Istream&
+        );
+
+
+    //- Destructor
+    virtual ~sphereToPoint();
+
+
+    // Member Functions
+
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
+        virtual void applyToSet
+        (
+            const topoSetSource::setAction action,
+            topoSet&
+        ) const;
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
