diff --git a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C index 9dc2bcc03fc687f507133c6558fbb9185b8d0466..1abac79a9ad06f1bdafaaa35dce3cd5cbbe67828 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C @@ -29,6 +29,18 @@ License #include "stringListOps.H" #include "Pstream.H" +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + template<class ZoneType, class MeshType> + int Foam::ZoneMesh<ZoneType, MeshType>::disallowGenericZones + ( + debug::debugSwitch("disallowGenericZones", 0) + ); +} + + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class ZoneType, class MeshType> @@ -429,8 +441,40 @@ Foam::label Foam::ZoneMesh<ZoneType, MeshType>::findZoneID << "List of available zone names: " << names() << endl; } - // Not found - return -1; + if (disallowGenericZones != 0) + { + // Create a new ... + Info<< "Creating dummy zone " << zoneName << endl; + dictionary dict; + dict.set("type", ZoneType::typeName); + dict.set(ZoneType::labelsName, labelList()); + + // flipMap only really applicable for face zones, but should not get + // in the way for cell- and point-zones... + dict.set("flipMap", boolList()); + label newZonei = zones.size(); + + ZoneMesh<ZoneType, MeshType>& zm = + const_cast<ZoneMesh<ZoneType, MeshType>&>(*this); + + zm.append + ( + new ZoneType + ( + zoneName, + dict, + newZonei, + zm + ) + ); + + return newZonei; + } + else + { + // Not found + return -1; + } } diff --git a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H index 94a8aa483c5a6f6010027c95f87f3c88b834ee68..59d1d220526ee53ac4fb838442d5d9a79d2da2ff 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H @@ -102,6 +102,10 @@ class ZoneMesh public: + //- Debug switch to disallow the use of generic zones + static int disallowGenericZones; + + // Constructors //- Read constructor given IOobject and a MeshType reference diff --git a/src/meshTools/sets/topoSets/topoSet.C b/src/meshTools/sets/topoSets/topoSet.C index 8caf02d3ba62f9c0f6821de11973f4ce326f04cb..754100d1dc2fdffd1b97a5dcc47a43bfe3b6626c 100644 --- a/src/meshTools/sets/topoSets/topoSet.C +++ b/src/meshTools/sets/topoSets/topoSet.C @@ -37,6 +37,11 @@ namespace Foam defineRunTimeSelectionTable(topoSet, word); defineRunTimeSelectionTable(topoSet, size); defineRunTimeSelectionTable(topoSet, set); + + int Foam::topoSet::disallowGenericSets + ( + debug::debugSwitch("disallowGenericSets", 0) + ); } @@ -297,14 +302,14 @@ Foam::IOobject Foam::topoSet::findIOobject writeOption w ) { - return IOobject + IOobject io ( name, mesh.time().findInstance ( mesh.dbDir()/polyMesh::meshSubDir/"sets", word::null, - r, + IOobject::READ_IF_PRESENT, mesh.facesInstance() ), polyMesh::meshSubDir/"sets", @@ -312,6 +317,14 @@ Foam::IOobject Foam::topoSet::findIOobject r, w ); + + if (!io.typeHeaderOk<topoSet>(false) && disallowGenericSets != 0) + { + DebugInfo<< "Setting no read for set " << name << endl; + io.readOpt() = IOobject::NO_READ; + } + + return io; } diff --git a/src/meshTools/sets/topoSets/topoSet.H b/src/meshTools/sets/topoSets/topoSet.H index 82ca3e42ee9f4520a6e3a1793f20be93b8d98bf3..55bd7941cf722dabd57fa15a01c1385fbd3ee693 100644 --- a/src/meshTools/sets/topoSets/topoSet.H +++ b/src/meshTools/sets/topoSets/topoSet.H @@ -142,6 +142,9 @@ public: //- Name of file set will use. static fileName localPath(const polyMesh& mesh, const word& name); + //- Debug switch to disallow the use of generic sets + static int disallowGenericSets; + // Declare run-time constructor selection table