ENH: Updated mechanism to create empty sets and zones

This commit is contained in:
Andrew Heather
2018-05-22 10:10:48 +01:00
parent 34606f54b9
commit 27888bf7aa
4 changed files with 68 additions and 4 deletions

View File

@ -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;
}
}

View File

@ -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

View File

@ -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;
}

View File

@ -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