Skip to content
Snippets Groups Projects
Commit f1aa8b5f authored by mattijs's avatar mattijs
Browse files

ENH: topoSet: add remove support

parent 26aa427d
Branches
Tags
No related merge requests found
......@@ -35,6 +35,10 @@ Description
#include "pointSet.H"
#include "globalMeshData.H"
#include "timeSelector.H"
#include "IOobjectList.H"
#include "cellZoneSet.H"
#include "faceZoneSet.H"
#include "pointZoneSet.H"
using namespace Foam;
......@@ -51,6 +55,96 @@ void printMesh(const Time& runTime, const polyMesh& mesh)
}
template<class ZoneType>
void removeZone
(
ZoneMesh<ZoneType, polyMesh>& zones,
const word& setName
)
{
label zoneID = zones.findZoneID(setName);
if (zoneID != -1)
{
Info<< "Removing zone " << setName << " at index " << zoneID << endl;
// Shuffle to last position
labelList oldToNew(zones.size());
label newI = 0;
forAll(oldToNew, i)
{
if (i != zoneID)
{
oldToNew[i] = newI++;
}
}
oldToNew[zoneID] = newI;
zones.reorder(oldToNew);
// Remove last element
zones.setSize(zones.size()-1);
zones.clearAddressing();
zones.write();
}
}
// Physically remove a set
void removeSet
(
const polyMesh& mesh,
const word& setType,
const word& setName
)
{
// Remove the file
IOobjectList objects
(
mesh,
mesh.time().findInstance
(
polyMesh::meshSubDir/"sets",
word::null,
IOobject::READ_IF_PRESENT,
mesh.facesInstance()
),
polyMesh::meshSubDir/"sets"
);
if (objects.found(setName))
{
// Remove file
fileName object = objects[setName]->objectPath();
Info<< "Removing file " << object << endl;
rm(object);
}
// See if zone
if (setType == cellZoneSet::typeName)
{
removeZone
(
const_cast<cellZoneMesh&>(mesh.cellZones()),
setName
);
}
else if (setType == faceZoneSet::typeName)
{
removeZone
(
const_cast<faceZoneMesh&>(mesh.faceZones()),
setName
);
}
else if (setType == pointZoneSet::typeName)
{
removeZone
(
const_cast<pointZoneMesh&>(mesh.pointZones()),
setName
);
}
}
polyMesh::readUpdateState meshReadUpdate(polyMesh& mesh)
{
polyMesh::readUpdateState stat = mesh.readUpdate();
......@@ -284,6 +378,12 @@ int main(int argc, char *argv[])
currentSet().write();
break;
case topoSetSource::REMOVE:
Info<< " Removing set" << endl;
removeSet(mesh, setType, setName);
break;
default:
WarningIn(args.executable())
<< "Unhandled action " << action << endl;
......
......@@ -22,8 +22,15 @@ FoamFile
// type cellSet;
//
// // action to perform on set. Two types:
// // - require no source : clear/invert
// // - require no source : clear/invert/remove
// // clear : clears set or zone
// // invert : select all currently non-selected elements
// // remove : removes set or zone
// // - require source : new/add/delete/subset
// // new : create new set or zone from source
// // add : add source to contents
// // delete : deletes source from contents
// // subset : keeps elements both in contents and source
// action new;
//
// The source entry varies according to the type of set:
......@@ -329,6 +336,7 @@ FoamFile
// faceSet f0; // name of faceSet
// cellSet c0; // name of cellSet of slave side
// }
//
actions
(
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment