From b31f8894aa95e4c1d9820eb142eaf0fba2008cf9 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Fri, 15 Oct 2010 15:41:32 +0100
Subject: [PATCH] ENH: setFields : all face sets to set patch values

---
 .../preProcessing/setFields/setFields.C       | 260 +++++++++++++++---
 .../preProcessing/setFields/setFieldsDict     |  13 +
 .../sets/cellSources/boxToCell/boxToCell.H    |   5 +
 .../sets/cellSources/cellToCell/cellToCell.H  |   5 +
 .../cylinderToCell/cylinderToCell.H           |   5 +
 .../sets/cellSources/faceToCell/faceToCell.H  |   5 +
 .../faceZoneToCell/faceZoneToCell.H           |   5 +
 .../cellSources/fieldToCell/fieldToCell.H     |   5 +
 .../cellSources/labelToCell/labelToCell.H     |   5 +
 .../sets/cellSources/nbrToCell/nbrToCell.H    |   5 +
 .../cellSources/nearestToCell/nearestToCell.H |   5 +
 .../cellSources/pointToCell/pointToCell.H     |   5 +
 .../cellSources/regionToCell/regionToCell.H   |   5 +
 .../rotatedBoxToCell/rotatedBoxToCell.H       |   5 +
 .../cellSources/shapeToCell/shapeToCell.H     |   5 +
 .../cellSources/sphereToCell/sphereToCell.H   |   5 +
 .../cellSources/surfaceToCell/surfaceToCell.H |   5 +
 .../sets/cellSources/zoneToCell/zoneToCell.H  |   5 +
 .../setToCellZone/setToCellZone.H             |   5 +
 .../boundaryToFace/boundaryToFace.H           |   5 +
 .../sets/faceSources/boxToFace/boxToFace.H    |   5 +
 .../sets/faceSources/cellToFace/cellToFace.H  |   5 +
 .../sets/faceSources/faceToFace/faceToFace.H  |   5 +
 .../faceSources/labelToFace/labelToFace.H     |   5 +
 .../faceSources/normalToFace/normalToFace.H   |   5 +
 .../faceSources/patchToFace/patchToFace.H     |   5 +
 .../faceSources/pointToFace/pointToFace.H     |   5 +
 .../sets/faceSources/zoneToFace/zoneToFace.H  |   5 +
 .../faceZoneToFaceZone/faceZoneToFaceZone.H   |   5 +
 .../setToFaceZone/setToFaceZone.H             |   5 +
 .../setsToFaceZone/setsToFaceZone.H           |   5 +
 .../sets/pointSources/boxToPoint/boxToPoint.H |   5 +
 .../pointSources/cellToPoint/cellToPoint.H    |   5 +
 .../pointSources/faceToPoint/faceToPoint.H    |   5 +
 .../pointSources/labelToPoint/labelToPoint.H  |   5 +
 .../nearestToPoint/nearestToPoint.H           |   5 +
 .../pointSources/pointToPoint/pointToPoint.H  |   5 +
 .../surfaceToPoint/surfaceToPoint.H           |   5 +
 .../pointSources/zoneToPoint/zoneToPoint.H    |   5 +
 .../setToPointZone/setToPointZone.H           |   5 +
 .../sets/topoSetSource/topoSetSource.H        |  14 +
 .../hotRoom/Allrun                            |   3 +-
 .../hotRoom/Allrun                            |   3 +-
 .../buoyantPimpleFoam/hotRoom/Allclean        |   1 -
 .../buoyantPimpleFoam/hotRoom/Allrun          |   3 +-
 .../buoyantSimpleFoam/hotRoom/Allrun          |   3 +-
 46 files changed, 446 insertions(+), 44 deletions(-)

diff --git a/applications/utilities/preProcessing/setFields/setFields.C b/applications/utilities/preProcessing/setFields/setFields.C
index 55b58e16b4d..797b44437ef 100644
--- a/applications/utilities/preProcessing/setFields/setFields.C
+++ b/applications/utilities/preProcessing/setFields/setFields.C
@@ -22,7 +22,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Description
-    Selects a cell set through a dictionary.
+    Set values on a selected set of cells/patchfaces through a dictionary.
 
 \*---------------------------------------------------------------------------*/
 
@@ -32,12 +32,13 @@ Description
 #include "fvMesh.H"
 #include "topoSetSource.H"
 #include "cellSet.H"
+#include "faceSet.H"
 #include "volFields.H"
 
 using namespace Foam;
 
 template<class Type>
-bool setFieldType
+bool setCellFieldType
 (
     const word& fieldTypeDesc,
     const fvMesh& mesh,
@@ -65,7 +66,8 @@ bool setFieldType
     // Check field exists
     if (fieldHeader.headerOk())
     {
-        Info<< "    Setting " << fieldHeader.headerClassName()
+        Info<< "    Setting internal values of "
+            << fieldHeader.headerClassName()
             << " " << fieldName << endl;
 
         fieldType field(fieldHeader, mesh);
@@ -96,7 +98,7 @@ bool setFieldType
     {
         WarningIn
         (
-            "void setFieldType"
+            "void setCellFieldType"
             "(const fvMesh& mesh, const labelList& selectedCells,"
             "Istream& fieldValueStream)"
         ) << "Field " << fieldName << " not found" << endl;
@@ -106,17 +108,17 @@ bool setFieldType
 }
 
 
-class setField
+class setCellField
 {
 
 public:
 
-    setField()
+    setCellField()
     {}
 
-    autoPtr<setField> clone() const
+    autoPtr<setCellField> clone() const
     {
-        return autoPtr<setField>(new setField());
+        return autoPtr<setCellField>(new setCellField());
     }
 
     class iNew
@@ -132,37 +134,200 @@ public:
             selectedCells_(selectedCells)
         {}
 
-        autoPtr<setField> operator()(Istream& fieldValues) const
+        autoPtr<setCellField> operator()(Istream& fieldValues) const
         {
             word fieldType(fieldValues);
 
             if
             (
                !(
-                    setFieldType<scalar>
+                    setCellFieldType<scalar>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<vector>
+                 || setCellFieldType<vector>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<sphericalTensor>
+                 || setCellFieldType<sphericalTensor>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<symmTensor>
+                 || setCellFieldType<symmTensor>
                         (fieldType, mesh_, selectedCells_, fieldValues)
-                 || setFieldType<tensor>
+                 || setCellFieldType<tensor>
                         (fieldType, mesh_, selectedCells_, fieldValues)
                 )
             )
             {
-                WarningIn("setField::iNew::operator()(Istream& is)")
+                WarningIn("setCellField::iNew::operator()(Istream& is)")
                     << "field type " << fieldType << " not currently supported"
                     << endl;
             }
 
-            return autoPtr<setField>(new setField());
+            return autoPtr<setCellField>(new setCellField());
         }
     };
 };
 
 
+template<class Type>
+bool setFaceFieldType
+(
+    const word& fieldTypeDesc,
+    const fvMesh& mesh,
+    const labelList& selectedFaces,
+    Istream& fieldValueStream
+)
+{
+    typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
+
+    if (fieldTypeDesc != fieldType::typeName + "Value")
+    {
+        return false;
+    }
+
+    word fieldName(fieldValueStream);
+
+    IOobject fieldHeader
+    (
+        fieldName,
+        mesh.time().timeName(),
+        mesh,
+        IOobject::MUST_READ
+    );
+
+    // Check field exists
+    if (fieldHeader.headerOk())
+    {
+        Info<< "    Setting patchField values of "
+            << fieldHeader.headerClassName()
+            << " " << fieldName << endl;
+
+        fieldType field(fieldHeader, mesh);
+
+        const Type& value = pTraits<Type>(fieldValueStream);
+
+        // Create flat list of selected faces and their value.
+        Field<Type> allBoundaryValues(mesh.nFaces()-mesh.nInternalFaces());
+        forAll(field.boundaryField(), patchi)
+        {
+            SubField<Type>
+            (
+                allBoundaryValues,
+                field.boundaryField()[patchi].size(),
+                field.boundaryField()[patchi].patch().start()
+              - mesh.nInternalFaces()
+            ).assign(field.boundaryField()[patchi]);
+        }
+
+        // Override
+        labelList nChanged(field.boundaryField().size(), 0);
+        forAll(selectedFaces, i)
+        {
+            label facei = selectedFaces[i];
+            if (mesh.isInternalFace(facei))
+            {
+                WarningIn("setFaceFieldType(..)")
+                    << "Ignoring internal face " << facei << endl;
+            }
+            else
+            {
+                label bFaceI = facei-mesh.nInternalFaces();
+                allBoundaryValues[bFaceI] = value;
+                nChanged[mesh.boundaryMesh().patchID()[bFaceI]]++;
+            }
+        }
+
+        Pstream::listCombineGather(nChanged, plusEqOp<label>());
+        Pstream::listCombineScatter(nChanged);
+
+        // Reassign.
+        forAll(field.boundaryField(), patchi)
+        {
+            if (nChanged[patchi] > 0)
+            {
+                Info<< "    On patch "
+                    << field.boundaryField()[patchi].patch().name()
+                    << " set " << nChanged[patchi] << " values" << endl;
+                field.boundaryField()[patchi] == SubField<Type>
+                (
+                    allBoundaryValues,
+                    field.boundaryField()[patchi].size(),
+                    field.boundaryField()[patchi].patch().start()
+                  - mesh.nInternalFaces()
+                );
+            }
+        }
+
+        field.write();
+    }
+    else
+    {
+        WarningIn
+        (
+            "void setFaceFieldType"
+            "(const fvMesh& mesh, const labelList& selectedFaces,"
+            "Istream& fieldValueStream)"
+        ) << "Field " << fieldName << " not found" << endl;
+    }
+
+    return true;
+}
+
+
+class setFaceField
+{
+
+public:
+
+    setFaceField()
+    {}
+
+    autoPtr<setFaceField> clone() const
+    {
+        return autoPtr<setFaceField>(new setFaceField());
+    }
+
+    class iNew
+    {
+        const fvMesh& mesh_;
+        const labelList& selectedFaces_;
+
+    public:
+
+        iNew(const fvMesh& mesh, const labelList& selectedFaces)
+        :
+            mesh_(mesh),
+            selectedFaces_(selectedFaces)
+        {}
+
+        autoPtr<setFaceField> operator()(Istream& fieldValues) const
+        {
+            word fieldType(fieldValues);
+
+            if
+            (
+               !(
+                    setFaceFieldType<scalar>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<vector>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<sphericalTensor>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<symmTensor>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                 || setFaceFieldType<tensor>
+                        (fieldType, mesh_, selectedFaces_, fieldValues)
+                )
+            )
+            {
+                WarningIn("setFaceField::iNew::operator()(Istream& is)")
+                    << "field type " << fieldType << " not currently supported"
+                    << endl;
+            }
+
+            return autoPtr<setFaceField>(new setFaceField());
+        }
+    };
+};
+
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 int main(int argc, char *argv[])
@@ -194,10 +359,10 @@ int main(int argc, char *argv[])
     if (setFieldsDict.found("defaultFieldValues"))
     {
         Info<< "Setting field default values" << endl;
-        PtrList<setField> defaultFieldValues
+        PtrList<setCellField> defaultFieldValues
         (
             setFieldsDict.lookup("defaultFieldValues"),
-            setField::iNew(mesh, labelList(mesh.nCells()))
+            setCellField::iNew(mesh, labelList(mesh.nCells()))
         );
         Info<< endl;
     }
@@ -211,29 +376,54 @@ int main(int argc, char *argv[])
     {
         const entry& region = regions[regionI];
 
-        autoPtr<topoSetSource> cellSelector =
+        autoPtr<topoSetSource> source =
             topoSetSource::New(region.keyword(), mesh, region.dict());
 
-        cellSet selectedCellSet
-        (
-            mesh,
-            "cellSet",
-            mesh.nCells()/10+1  // Reasonable size estimate.
-        );
+        if (source().setType() == topoSetSource::CELLSETSOURCE)
+        {
+            cellSet selectedCellSet
+            (
+                mesh,
+                "cellSet",
+                mesh.nCells()/10+1  // Reasonable size estimate.
+            );
 
-        cellSelector->applyToSet
-        (
-            topoSetSource::NEW,
-            selectedCellSet
-        );
+            source->applyToSet
+            (
+                topoSetSource::NEW,
+                selectedCellSet
+            );
 
-        PtrList<setField> fieldValues
-        (
-            region.dict().lookup("fieldValues"),
-            setField::iNew(mesh, selectedCellSet.toc())
-        );
+            PtrList<setCellField> fieldValues
+            (
+                region.dict().lookup("fieldValues"),
+                setCellField::iNew(mesh, selectedCellSet.toc())
+            );
+        }
+        else if (source().setType() == topoSetSource::FACESETSOURCE)
+        {
+            faceSet selectedFaceSet
+            (
+                mesh,
+                "faceSet",
+                (mesh.nFaces()-mesh.nInternalFaces())/10+1
+            );
+
+            source->applyToSet
+            (
+                topoSetSource::NEW,
+                selectedFaceSet
+            );
+
+            PtrList<setFaceField> fieldValues
+            (
+                region.dict().lookup("fieldValues"),
+                setFaceField::iNew(mesh, selectedFaceSet.toc())
+            );
+        }
     }
 
+
     Info<< "\nEnd\n" << endl;
 
     return 0;
diff --git a/applications/utilities/preProcessing/setFields/setFieldsDict b/applications/utilities/preProcessing/setFields/setFieldsDict
index 8d33be4c8f9..c58e622ff7e 100644
--- a/applications/utilities/preProcessing/setFields/setFieldsDict
+++ b/applications/utilities/preProcessing/setFields/setFieldsDict
@@ -23,6 +23,8 @@ defaultFieldValues
 
 regions
 (
+    // Set cell values
+    // (does zerogradient on boundaries)
     boxToCell
     {
         box (0 0 -1) (0.1461 0.292 1);
@@ -32,6 +34,17 @@ regions
             volScalarFieldValue gamma 1
         );
     }
+
+    // Set patch values (using ==)
+    boxToFace
+    {
+        box (0 0 -1) (0.1461 0.292 1);
+
+        fieldValues
+        (
+            volScalarFieldValue gamma 1
+        );
+    }
 );
 
 // ************************************************************************* //
diff --git a/src/meshTools/sets/cellSources/boxToCell/boxToCell.H b/src/meshTools/sets/cellSources/boxToCell/boxToCell.H
index e7061070f8d..be354677045 100644
--- a/src/meshTools/sets/cellSources/boxToCell/boxToCell.H
+++ b/src/meshTools/sets/cellSources/boxToCell/boxToCell.H
@@ -102,6 +102,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/cellToCell/cellToCell.H b/src/meshTools/sets/cellSources/cellToCell/cellToCell.H
index 7660c4bb83d..75fa47c3b16 100644
--- a/src/meshTools/sets/cellSources/cellToCell/cellToCell.H
+++ b/src/meshTools/sets/cellSources/cellToCell/cellToCell.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H b/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H
index 1581e8dcdfc..bd67e09c67f 100644
--- a/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H
+++ b/src/meshTools/sets/cellSources/cylinderToCell/cylinderToCell.H
@@ -109,6 +109,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/faceToCell/faceToCell.H b/src/meshTools/sets/cellSources/faceToCell/faceToCell.H
index 4b1673d35ce..768ec475e11 100644
--- a/src/meshTools/sets/cellSources/faceToCell/faceToCell.H
+++ b/src/meshTools/sets/cellSources/faceToCell/faceToCell.H
@@ -119,6 +119,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H
index 7ee8b3d6da1..132c46d60bb 100644
--- a/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H
+++ b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H
@@ -116,6 +116,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H b/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H
index a0a89221159..6a34e222082 100644
--- a/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H
+++ b/src/meshTools/sets/cellSources/fieldToCell/fieldToCell.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/labelToCell/labelToCell.H b/src/meshTools/sets/cellSources/labelToCell/labelToCell.H
index 8704f543672..16a8f72e00b 100644
--- a/src/meshTools/sets/cellSources/labelToCell/labelToCell.H
+++ b/src/meshTools/sets/cellSources/labelToCell/labelToCell.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H b/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H
index 8a604f45bfe..35d8a5525d9 100644
--- a/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H
+++ b/src/meshTools/sets/cellSources/nbrToCell/nbrToCell.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H b/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H
index 8c3555b0468..b61c8edd3ad 100644
--- a/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H
+++ b/src/meshTools/sets/cellSources/nearestToCell/nearestToCell.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/pointToCell/pointToCell.H b/src/meshTools/sets/cellSources/pointToCell/pointToCell.H
index 6e1a596a45e..3c903a0b5c9 100644
--- a/src/meshTools/sets/cellSources/pointToCell/pointToCell.H
+++ b/src/meshTools/sets/cellSources/pointToCell/pointToCell.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/regionToCell/regionToCell.H b/src/meshTools/sets/cellSources/regionToCell/regionToCell.H
index 07ebb502555..bf4d9a33925 100644
--- a/src/meshTools/sets/cellSources/regionToCell/regionToCell.H
+++ b/src/meshTools/sets/cellSources/regionToCell/regionToCell.H
@@ -105,6 +105,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet(const topoSetSource::setAction action, topoSet&)
          const;
 
diff --git a/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H b/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H
index 7fef8788640..9119938a488 100644
--- a/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H
+++ b/src/meshTools/sets/cellSources/rotatedBoxToCell/rotatedBoxToCell.H
@@ -111,6 +111,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H b/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H
index 3a7294cebd9..8dffc55b1d6 100644
--- a/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H
+++ b/src/meshTools/sets/cellSources/shapeToCell/shapeToCell.H
@@ -109,6 +109,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H b/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H
index 553e6a29d3e..9f7de5539f4 100644
--- a/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H
+++ b/src/meshTools/sets/cellSources/sphereToCell/sphereToCell.H
@@ -105,6 +105,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H b/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H
index e91e04f1ae3..48de11e0c5c 100644
--- a/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H
+++ b/src/meshTools/sets/cellSources/surfaceToCell/surfaceToCell.H
@@ -195,6 +195,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H
index bb5504a1771..edcb0fc391e 100644
--- a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H
+++ b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H b/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H
index bbe2b656a12..22c37deafa2 100644
--- a/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H
+++ b/src/meshTools/sets/cellZoneSources/setToCellZone/setToCellZone.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return CELLZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H b/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H
index 95afaa8ab00..fd36cd12a39 100644
--- a/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H
+++ b/src/meshTools/sets/faceSources/boundaryToFace/boundaryToFace.H
@@ -92,6 +92,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/boxToFace/boxToFace.H b/src/meshTools/sets/faceSources/boxToFace/boxToFace.H
index 63a5c93ad4b..76db6b5fa58 100644
--- a/src/meshTools/sets/faceSources/boxToFace/boxToFace.H
+++ b/src/meshTools/sets/faceSources/boxToFace/boxToFace.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/cellToFace/cellToFace.H b/src/meshTools/sets/faceSources/cellToFace/cellToFace.H
index 91302c3d7ba..4a32c9f4be8 100644
--- a/src/meshTools/sets/faceSources/cellToFace/cellToFace.H
+++ b/src/meshTools/sets/faceSources/cellToFace/cellToFace.H
@@ -120,6 +120,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/faceToFace/faceToFace.H b/src/meshTools/sets/faceSources/faceToFace/faceToFace.H
index 90bbc1d33af..cd12b07624c 100644
--- a/src/meshTools/sets/faceSources/faceToFace/faceToFace.H
+++ b/src/meshTools/sets/faceSources/faceToFace/faceToFace.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/labelToFace/labelToFace.H b/src/meshTools/sets/faceSources/labelToFace/labelToFace.H
index 2434e39c9a9..dd42f98a5a9 100644
--- a/src/meshTools/sets/faceSources/labelToFace/labelToFace.H
+++ b/src/meshTools/sets/faceSources/labelToFace/labelToFace.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/normalToFace/normalToFace.H b/src/meshTools/sets/faceSources/normalToFace/normalToFace.H
index 3c287a1b69e..508c7c9a362 100644
--- a/src/meshTools/sets/faceSources/normalToFace/normalToFace.H
+++ b/src/meshTools/sets/faceSources/normalToFace/normalToFace.H
@@ -98,6 +98,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/patchToFace/patchToFace.H b/src/meshTools/sets/faceSources/patchToFace/patchToFace.H
index 12a1ff170b8..dd407edb030 100644
--- a/src/meshTools/sets/faceSources/patchToFace/patchToFace.H
+++ b/src/meshTools/sets/faceSources/patchToFace/patchToFace.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/pointToFace/pointToFace.H b/src/meshTools/sets/faceSources/pointToFace/pointToFace.H
index c8a2439e6a2..6a6a090fa0d 100644
--- a/src/meshTools/sets/faceSources/pointToFace/pointToFace.H
+++ b/src/meshTools/sets/faceSources/pointToFace/pointToFace.H
@@ -118,6 +118,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H
index 9e04ef45a88..1496af2d5ae 100644
--- a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H
+++ b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACESETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H b/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H
index 8cfcb5066f3..1818e508276 100644
--- a/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H
+++ b/src/meshTools/sets/faceZoneSources/faceZoneToFaceZone/faceZoneToFaceZone.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACEZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H b/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H
index b062f440e56..ae120debb03 100644
--- a/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H
+++ b/src/meshTools/sets/faceZoneSources/setToFaceZone/setToFaceZone.H
@@ -94,6 +94,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACEZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H b/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H
index f326ec06018..d1edb5417ae 100644
--- a/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H
+++ b/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.H
@@ -97,6 +97,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return FACEZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H b/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H
index b403d851e11..9d9c0eed37c 100644
--- a/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H
+++ b/src/meshTools/sets/pointSources/boxToPoint/boxToPoint.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H b/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H
index 6306ee5a0bc..849bb70b8e8 100644
--- a/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H
+++ b/src/meshTools/sets/pointSources/cellToPoint/cellToPoint.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H b/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H
index b8a966b07fa..17488ba33fe 100644
--- a/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H
+++ b/src/meshTools/sets/pointSources/faceToPoint/faceToPoint.H
@@ -115,6 +115,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H b/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H
index 0b809b69edd..13b85be591d 100644
--- a/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H
+++ b/src/meshTools/sets/pointSources/labelToPoint/labelToPoint.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H
index 5c746890b80..19d72cfeacc 100644
--- a/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H
+++ b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H
@@ -100,6 +100,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H b/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H
index b76332d7845..3f890b3400f 100644
--- a/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H
+++ b/src/meshTools/sets/pointSources/pointToPoint/pointToPoint.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H b/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H
index 56e786fe61c..0c4372c0ddf 100644
--- a/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H
+++ b/src/meshTools/sets/pointSources/surfaceToPoint/surfaceToPoint.H
@@ -123,6 +123,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H
index 58ca2b2cf40..9fd4444552c 100644
--- a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H
+++ b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.H
@@ -101,6 +101,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTSETSOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H b/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H
index 5226f708ac7..21d4f640b8d 100644
--- a/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H
+++ b/src/meshTools/sets/pointZoneSources/setToPointZone/setToPointZone.H
@@ -93,6 +93,11 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const
+        {
+            return POINTZONESOURCE;
+        }
+
         virtual void applyToSet
         (
             const topoSetSource::setAction action,
diff --git a/src/meshTools/sets/topoSetSource/topoSetSource.H b/src/meshTools/sets/topoSetSource/topoSetSource.H
index 5bbe71eb745..81ca1cf38c3 100644
--- a/src/meshTools/sets/topoSetSource/topoSetSource.H
+++ b/src/meshTools/sets/topoSetSource/topoSetSource.H
@@ -67,6 +67,18 @@ public:
 
     // Public data types
 
+        //- Enumeration defining the types of sources
+        enum sourceType
+        {
+            CELLSETSOURCE,
+            FACESETSOURCE,
+            POINTSETSOURCE,
+
+            CELLZONESOURCE,
+            FACEZONESOURCE,
+            POINTZONESOURCE
+        };
+
         //- Enumeration defining the valid actions
         enum setAction
         {
@@ -268,6 +280,8 @@ public:
 
     // Member Functions
 
+        virtual sourceType setType() const = 0;
+
         virtual void applyToSet(const setAction action, topoSet&) const = 0;
 
 };
diff --git a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun
index 800bb573199..9f8c5b0cb5b 100755
--- a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/Allrun
@@ -6,10 +6,9 @@ cd ${0%/*} || exit 1    # run from this directory
 
 application=`getApplication`
 
-compileApplication ../../buoyantPimpleFoam/hotRoom/setHotRoom
 runApplication blockMesh
 cp 0/T.org 0/T
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun
index 800bb573199..9f8c5b0cb5b 100755
--- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun
@@ -6,10 +6,9 @@ cd ${0%/*} || exit 1    # run from this directory
 
 application=`getApplication`
 
-compileApplication ../../buoyantPimpleFoam/hotRoom/setHotRoom
 runApplication blockMesh
 cp 0/T.org 0/T
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean
index 536b51a14e5..25243dd42f8 100755
--- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean
+++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allclean
@@ -6,6 +6,5 @@ cd ${0%/*} || exit 1    # run from this directory
 
 cleanCase
 cp 0/T.org 0/T
-wclean setHotRoom
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun
index 3aafa6fd942..31c6c104c4d 100755
--- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/Allrun
@@ -7,9 +7,8 @@ cd ${0%/*} || exit 1    # run from this directory
 # Get application name
 application=`getApplication`
 
-compileApplication setHotRoom
 runApplication blockMesh
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun
index cb0be1e6e06..7b90a31601b 100755
--- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun
+++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/Allrun
@@ -6,9 +6,8 @@ cd ${0%/*} || exit 1    # run from this directory
 
 application=`getApplication`
 
-compileApplication ../../buoyantPimpleFoam/hotRoom/setHotRoom
 runApplication blockMesh
-runApplication setHotRoom
+runApplication setFields
 runApplication $application
 
 # ----------------------------------------------------------------- end-of-file
-- 
GitLab