added zoneSets

This commit is contained in:
mattijs
2009-09-24 18:39:04 +01:00
parent 909b590652
commit 72cacc9588
29 changed files with 3252 additions and 55 deletions

View File

@ -23,7 +23,7 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Description Description
Manipulate a cell/face/point set interactively. Manipulate a cell/face/point/ set or zone interactively.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -82,6 +82,7 @@ Istream& selectStream(Istream* is0Ptr, Istream* is1Ptr)
// Copy set // Copy set
void backup void backup
( (
const word& setType,
const polyMesh& mesh, const polyMesh& mesh,
const word& fromName, const word& fromName,
const topoSet& fromSet, const topoSet& fromSet,
@ -92,9 +93,7 @@ void backup
{ {
Pout<< " Backing up " << fromName << " into " << toName << endl; Pout<< " Backing up " << fromName << " into " << toName << endl;
topoSet backupSet(mesh, toName, fromSet); topoSet::New(setType, mesh, toName, fromSet)().write();
backupSet.write();
} }
} }
@ -102,14 +101,21 @@ void backup
// Read and copy set // Read and copy set
void backup void backup
( (
const word& setType,
const polyMesh& mesh, const polyMesh& mesh,
const word& fromName, const word& fromName,
const word& toName const word& toName
) )
{ {
topoSet fromSet(mesh, fromName, IOobject::READ_IF_PRESENT); autoPtr<topoSet> fromSet = topoSet::New
(
setType,
mesh,
fromName,
IOobject::READ_IF_PRESENT
);
backup(mesh, fromName, fromSet, toName); backup(setType, mesh, fromName, fromSet(), toName);
} }
@ -241,7 +247,8 @@ void printHelp(Ostream& os)
<< "A set command should be of the following form" << endl << "A set command should be of the following form" << endl
<< endl << endl
<< " cellSet|faceSet|pointSet <setName> <action> <source>" << " cellSet|faceSet|pointSet <setName> <action> <source>"
<< endl << endl << endl
<< endl
<< "The <action> is one of" << endl << "The <action> is one of" << endl
<< " list - prints the contents of the set" << endl << " list - prints the contents of the set" << endl
<< " clear - clears the set" << endl << " clear - clears the set" << endl
@ -270,6 +277,10 @@ void printHelp(Ostream& os)
<< " cellSet c0 add pointToCell p0 any" << endl << " cellSet c0 add pointToCell p0 any" << endl
<< "List set:" << endl << "List set:" << endl
<< " cellSet c0 list" << endl << " cellSet c0 list" << endl
<< endl
<< "Zones can be set from corresponding sets:" << endl
<< " faceZone f0Zone new setToZone f0" << endl
<< " cellZone c0Zone new setToZone c0" << endl
<< endl; << endl;
} }
@ -366,7 +377,7 @@ bool doCommand
{ {
r = IOobject::NO_READ; r = IOobject::NO_READ;
//backup(mesh, setName, setName + "_old"); //backup(setType, mesh, setName, setName + "_old");
currentSetPtr = topoSet::New(setType, mesh, setName, typSize); currentSetPtr = topoSet::New(setType, mesh, setName, typSize);
} }
@ -401,7 +412,7 @@ bool doCommand
//if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST)) //if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST))
//{ //{
// // currentSet has been read so can make copy. // // currentSet has been read so can make copy.
// backup(mesh, setName, currentSet, setName + "_old"); // backup(setType, mesh, setName, currentSet, setName + "_old");
//} //}
switch (action) switch (action)
@ -437,15 +448,18 @@ bool doCommand
); );
// Backup current set. // Backup current set.
topoSet oldSet autoPtr<topoSet> oldSet
( (
topoSet::New
(
setType,
mesh, mesh,
currentSet.name() + "_old2", currentSet.name() + "_old2",
currentSet currentSet
)
); );
currentSet.clear(); currentSet.clear();
currentSet.resize(oldSet.size());
setSource().applyToSet(topoSetSource::NEW, currentSet); setSource().applyToSet(topoSetSource::NEW, currentSet);
// Combine new value of currentSet with old one. // Combine new value of currentSet with old one.
@ -547,7 +561,8 @@ enum commandStatus
{ {
QUIT, // quit program QUIT, // quit program
INVALID, // token is not a valid set manipulation command INVALID, // token is not a valid set manipulation command
VALID // ,, is a valid ,, VALIDSETCMD, // ,, is a valid ,,
VALIDZONECMD // ,, is a valid zone ,,
}; };
@ -654,7 +669,16 @@ commandStatus parseType
|| setType == "pointSet" || setType == "pointSet"
) )
{ {
return VALID; return VALIDSETCMD;
}
else if
(
setType == "cellZoneSet"
|| setType == "faceZoneSet"
|| setType == "pointZoneSet"
)
{
return VALIDZONECMD;
} }
else else
{ {
@ -664,7 +688,7 @@ commandStatus parseType
", IStringStream&)" ", IStringStream&)"
) << "Illegal command " << setType << endl ) << "Illegal command " << setType << endl
<< "Should be one of 'help', 'list', 'time' or a set type :" << "Should be one of 'help', 'list', 'time' or a set type :"
<< " 'cellSet', 'faceSet', 'pointSet'" << " 'cellSet', 'faceSet', 'pointSet', 'faceZoneSet'"
<< endl; << endl;
return INVALID; return INVALID;
@ -682,7 +706,7 @@ commandStatus parseAction(const word& actionName)
{ {
(void)topoSetSource::toAction(actionName); (void)topoSetSource::toAction(actionName);
stat = VALID; stat = VALIDSETCMD;
} }
catch (Foam::IOerror& fIOErr) catch (Foam::IOerror& fIOErr)
{ {
@ -816,12 +840,12 @@ int main(int argc, char *argv[])
IStringStream is(rawLine + ' '); IStringStream is(rawLine + ' ');
// Type: cellSet, faceSet, pointSet // Type: cellSet, faceSet, pointSet, faceZoneSet
is >> setType; is >> setType;
stat = parseType(runTime, mesh, setType, is); stat = parseType(runTime, mesh, setType, is);
if (stat == VALID) if (stat == VALIDSETCMD || stat == VALIDZONECMD)
{ {
if (is >> setName) if (is >> setName)
{ {
@ -831,14 +855,13 @@ int main(int argc, char *argv[])
} }
} }
} }
ok = true; ok = true;
if (stat == QUIT) if (stat == QUIT)
{ {
break; break;
} }
else if (stat == VALID) else if (stat == VALIDSETCMD || stat == VALIDZONECMD)
{ {
ok = doCommand(mesh, setType, setName, actionName, writeVTK, is); ok = doCommand(mesh, setType, setName, actionName, writeVTK, is);
} }

View File

@ -71,6 +71,9 @@ $(topoSets)/cellSet.C
$(topoSets)/topoSet.C $(topoSets)/topoSet.C
$(topoSets)/faceSet.C $(topoSets)/faceSet.C
$(topoSets)/pointSet.C $(topoSets)/pointSet.C
$(topoSets)/cellZoneSet.C
$(topoSets)/faceZoneSet.C
$(topoSets)/pointZoneSet.C
sets/topoSetSource/topoSetSource.C sets/topoSetSource/topoSetSource.C
@ -113,6 +116,18 @@ $(pointSources)/surfaceToPoint/surfaceToPoint.C
$(pointSources)/zoneToPoint/zoneToPoint.C $(pointSources)/zoneToPoint/zoneToPoint.C
$(pointSources)/nearestToPoint/nearestToPoint.C $(pointSources)/nearestToPoint/nearestToPoint.C
faceZoneSources = sets/faceZoneSources
$(faceZoneSources)/faceZoneToFaceZone/faceZoneToFaceZone.C
$(faceZoneSources)/setsToFaceZone/setsToFaceZone.C
$(faceZoneSources)/setToFaceZone/setToFaceZone.C
cellZoneSources = sets/cellZoneSources
$(cellZoneSources)/setToCellZone/setToCellZone.C
pointZoneSources = sets/pointZoneSources
$(pointZoneSources)/setToPointZone/setToPointZone.C
surfaceSets/surfaceSets.C surfaceSets/surfaceSets.C
triSurface/orientedSurface/orientedSurface.C triSurface/orientedSurface/orientedSurface.C

View File

@ -106,7 +106,7 @@ void Foam::cellToCell::applyToSet
{ {
if ((action == topoSetSource::ADD) || (action == topoSetSource::NEW)) if ((action == topoSetSource::ADD) || (action == topoSetSource::NEW))
{ {
Pout<< " Adding all elements of cellSet " << setName_ << " ..." Info<< " Adding all elements of cellSet " << setName_ << " ..."
<< endl; << endl;
// Load the set // Load the set
@ -116,7 +116,7 @@ void Foam::cellToCell::applyToSet
} }
else if (action == topoSetSource::DELETE) else if (action == topoSetSource::DELETE)
{ {
Pout<< " Removing all elements of cellSet " << setName_ << " ..." Info<< " Removing all elements of cellSet " << setName_ << " ..."
<< endl; << endl;
// Load the set // Load the set

View File

@ -0,0 +1,168 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "setToCellZone.H"
#include "polyMesh.H"
#include "cellZoneSet.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(setToCellZone, 0);
addToRunTimeSelectionTable(topoSetSource, setToCellZone, word);
addToRunTimeSelectionTable(topoSetSource, setToCellZone, istream);
}
Foam::topoSetSource::addToUsageTable Foam::setToCellZone::usage_
(
setToCellZone::typeName,
"\n Usage: setToCellZone <cellSet>\n\n"
" Select all cells in the cellSet.\n\n"
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::setToCellZone::setToCellZone
(
const polyMesh& mesh,
const word& setName
)
:
topoSetSource(mesh),
setName_(setName)
{}
// Construct from dictionary
Foam::setToCellZone::setToCellZone
(
const polyMesh& mesh,
const dictionary& dict
)
:
topoSetSource(mesh),
setName_(dict.lookup("set"))
{}
// Construct from Istream
Foam::setToCellZone::setToCellZone
(
const polyMesh& mesh,
Istream& is
)
:
topoSetSource(mesh),
setName_(checkIs(is))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::setToCellZone::~setToCellZone()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::setToCellZone::applyToSet
(
const topoSetSource::setAction action,
topoSet& set
) const
{
if (!isA<cellZoneSet>(set))
{
WarningIn
(
"setToCellZone::applyToSet(const topoSetSource::setAction"
", topoSet"
) << "Operation only allowed on a cellZoneSet." << endl;
}
else
{
cellZoneSet& fzSet = refCast<cellZoneSet>(set);
if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
{
Info<< " Adding all cells from cellSet " << setName_
<< " ..." << endl;
// Load the sets
cellSet fSet(mesh_, setName_);
// Start off from copy
DynamicList<label> newAddressing(fzSet.addressing());
forAllConstIter(cellSet, fSet, iter)
{
label cellI = iter.key();
if (!fzSet.found(cellI))
{
newAddressing.append(cellI);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.updateSet();
}
else if (action == topoSetSource::DELETE)
{
Info<< " Removing all cells from cellSet " << setName_
<< " ..." << endl;
// Load the set
cellSet loadedSet(mesh_, setName_);
// Start off empty
DynamicList<label> newAddressing(fzSet.addressing().size());
forAll(fzSet.addressing(), i)
{
if (!loadedSet.found(fzSet.addressing()[i]))
{
newAddressing.append(fzSet.addressing()[i]);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.updateSet();
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,115 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::setToCellZone
Description
A topoSetSource to select cells based on usage in a cellSet.
SourceFiles
setToCellZone.C
\*---------------------------------------------------------------------------*/
#ifndef setToCellZone_H
#define setToCellZone_H
#include "topoSetSource.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class setToCellZone Declaration
\*---------------------------------------------------------------------------*/
class setToCellZone
:
public topoSetSource
{
// Private data
//- Add usage string
static addToUsageTable usage_;
//- Name of set to use
word setName_;
public:
//- Runtime type information
TypeName("setToCellZone");
// Constructors
//- Construct from components
setToCellZone
(
const polyMesh& mesh,
const word& setName
);
//- Construct from dictionary
setToCellZone
(
const polyMesh& mesh,
const dictionary& dict
);
//- Construct from Istream
setToCellZone
(
const polyMesh& mesh,
Istream&
);
// Destructor
virtual ~setToCellZone();
// Member Functions
virtual void applyToSet
(
const topoSetSource::setAction action,
topoSet&
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -217,14 +217,14 @@ void Foam::cellToFace::applyToSet
{ {
if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
{ {
Pout<< " Adding faces according to cellSet " << setName_ Info<< " Adding faces according to cellSet " << setName_
<< " ..." << endl; << " ..." << endl;
combine(set, true); combine(set, true);
} }
else if (action == topoSetSource::DELETE) else if (action == topoSetSource::DELETE)
{ {
Pout<< " Removing faces according to cellSet " << setName_ Info<< " Removing faces according to cellSet " << setName_
<< " ..." << endl; << " ..." << endl;
combine(set, false); combine(set, false);

View File

@ -0,0 +1,169 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "faceZoneToFaceZone.H"
#include "polyMesh.H"
#include "faceZoneSet.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(faceZoneToFaceZone, 0);
addToRunTimeSelectionTable(topoSetSource, faceZoneToFaceZone, word);
addToRunTimeSelectionTable(topoSetSource, faceZoneToFaceZone, istream);
}
Foam::topoSetSource::addToUsageTable Foam::faceZoneToFaceZone::usage_
(
faceZoneToFaceZone::typeName,
"\n Usage: faceZoneToFaceZone <faceZone>\n\n"
" Select all faces in the faceZone\n\n"
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::faceZoneToFaceZone::faceZoneToFaceZone
(
const polyMesh& mesh,
const word& setName
)
:
topoSetSource(mesh),
setName_(setName)
{}
// Construct from dictionary
Foam::faceZoneToFaceZone::faceZoneToFaceZone
(
const polyMesh& mesh,
const dictionary& dict
)
:
topoSetSource(mesh),
setName_(dict.lookup("zone"))
{}
// Construct from Istream
Foam::faceZoneToFaceZone::faceZoneToFaceZone
(
const polyMesh& mesh,
Istream& is
)
:
topoSetSource(mesh),
setName_(checkIs(is))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::faceZoneToFaceZone::~faceZoneToFaceZone()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::faceZoneToFaceZone::applyToSet
(
const topoSetSource::setAction action,
topoSet& set
) const
{
if (!isA<faceZoneSet>(set))
{
WarningIn
(
"faceZoneToFaceZone::applyToSet(const topoSetSource::setAction"
", topoSet"
) << "Operation only allowed on a faceZoneSet." << endl;
}
else
{
faceZoneSet& fSet = refCast<faceZoneSet>(set);
if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
{
Info<< " Adding all faces from faceZone " << setName_ << " ..."
<< endl;
// Load the set
faceZoneSet loadedSet(mesh_, setName_);
DynamicList<label> newAddressing(fSet.addressing());
DynamicList<bool> newFlipMap(fSet.flipMap());
forAll(loadedSet.addressing(), i)
{
if (!fSet.found(loadedSet.addressing()[i]))
{
newAddressing.append(loadedSet.addressing()[i]);
newFlipMap.append(loadedSet.flipMap()[i]);
}
}
fSet.addressing().transfer(newAddressing);
fSet.flipMap().transfer(newFlipMap);
fSet.updateSet();
}
else if (action == topoSetSource::DELETE)
{
Info<< " Removing all faces from faceZone " << setName_ << " ..."
<< endl;
// Load the set
faceZoneSet loadedSet(mesh_, setName_);
DynamicList<label> newAddressing(fSet.addressing().size());
DynamicList<bool> newFlipMap(fSet.flipMap().size());
forAll(fSet.addressing(), i)
{
if (!loadedSet.found(fSet.addressing()[i]))
{
newAddressing.append(fSet.addressing()[i]);
newFlipMap.append(fSet.flipMap()[i]);
}
}
fSet.addressing().transfer(newAddressing);
fSet.flipMap().transfer(newFlipMap);
fSet.updateSet();
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,115 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::faceZoneToFaceZone
Description
A topoSetSource to select faces based on usage in another faceSet.
SourceFiles
faceZoneToFaceZone.C
\*---------------------------------------------------------------------------*/
#ifndef faceZoneToFaceZone_H
#define faceZoneToFaceZone_H
#include "topoSetSource.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class faceZoneToFaceZone Declaration
\*---------------------------------------------------------------------------*/
class faceZoneToFaceZone
:
public topoSetSource
{
// Private data
//- Add usage string
static addToUsageTable usage_;
//- Name of set to use
word setName_;
public:
//- Runtime type information
TypeName("faceZoneToFaceZone");
// Constructors
//- Construct from components
faceZoneToFaceZone
(
const polyMesh& mesh,
const word& setName
);
//- Construct from dictionary
faceZoneToFaceZone
(
const polyMesh& mesh,
const dictionary& dict
);
//- Construct from Istream
faceZoneToFaceZone
(
const polyMesh& mesh,
Istream&
);
// Destructor
virtual ~faceZoneToFaceZone();
// Member Functions
virtual void applyToSet
(
const topoSetSource::setAction action,
topoSet&
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,175 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "setToFaceZone.H"
#include "polyMesh.H"
#include "faceZoneSet.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(setToFaceZone, 0);
addToRunTimeSelectionTable(topoSetSource, setToFaceZone, word);
addToRunTimeSelectionTable(topoSetSource, setToFaceZone, istream);
}
Foam::topoSetSource::addToUsageTable Foam::setToFaceZone::usage_
(
setToFaceZone::typeName,
"\n Usage: setToFaceZone <faceSet>\n\n"
" Select all faces in the faceSet."
" Sets flipMap.\n\n"
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::setToFaceZone::setToFaceZone
(
const polyMesh& mesh,
const word& setName
)
:
topoSetSource(mesh),
setName_(setName)
{}
// Construct from dictionary
Foam::setToFaceZone::setToFaceZone
(
const polyMesh& mesh,
const dictionary& dict
)
:
topoSetSource(mesh),
setName_(dict.lookup("faceSet"))
{}
// Construct from Istream
Foam::setToFaceZone::setToFaceZone
(
const polyMesh& mesh,
Istream& is
)
:
topoSetSource(mesh),
setName_(checkIs(is))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::setToFaceZone::~setToFaceZone()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::setToFaceZone::applyToSet
(
const topoSetSource::setAction action,
topoSet& set
) const
{
if (!isA<faceZoneSet>(set))
{
WarningIn
(
"setToFaceZone::applyToSet(const topoSetSource::setAction"
", topoSet"
) << "Operation only allowed on a faceZoneSet." << endl;
}
else
{
faceZoneSet& fzSet = refCast<faceZoneSet>(set);
if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
{
Info<< " Adding all faces from faceSet " << setName_
<< " ..." << endl;
// Load the sets
faceSet fSet(mesh_, setName_);
// Start off from copy
DynamicList<label> newAddressing(fzSet.addressing());
DynamicList<bool> newFlipMap(fzSet.flipMap());
forAllConstIter(faceSet, fSet, iter)
{
label faceI = iter.key();
if (!fzSet.found(faceI))
{
newAddressing.append(faceI);
newFlipMap.append(true);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.flipMap().transfer(newFlipMap);
fzSet.updateSet();
}
else if (action == topoSetSource::DELETE)
{
Info<< " Removing all faces from faceSet " << setName_
<< " ..." << endl;
// Load the set
faceSet loadedSet(mesh_, setName_);
// Start off empty
DynamicList<label> newAddressing(fzSet.addressing().size());
DynamicList<bool> newFlipMap(fzSet.flipMap().size());
forAll(fzSet.addressing(), i)
{
if (!loadedSet.found(fzSet.addressing()[i]))
{
newAddressing.append(fzSet.addressing()[i]);
newFlipMap.append(fzSet.flipMap()[i]);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.flipMap().transfer(newFlipMap);
fzSet.updateSet();
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,116 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::setToFaceZone
Description
A topoSetSource to select faces based on usage in a faceSet. Sets flipMap
to true.
SourceFiles
setToFaceZone.C
\*---------------------------------------------------------------------------*/
#ifndef setToFaceZone_H
#define setToFaceZone_H
#include "topoSetSource.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class setToFaceZone Declaration
\*---------------------------------------------------------------------------*/
class setToFaceZone
:
public topoSetSource
{
// Private data
//- Add usage string
static addToUsageTable usage_;
//- Name of set to use
word setName_;
public:
//- Runtime type information
TypeName("setToFaceZone");
// Constructors
//- Construct from components
setToFaceZone
(
const polyMesh& mesh,
const word& setName
);
//- Construct from dictionary
setToFaceZone
(
const polyMesh& mesh,
const dictionary& dict
);
//- Construct from Istream
setToFaceZone
(
const polyMesh& mesh,
Istream&
);
// Destructor
virtual ~setToFaceZone();
// Member Functions
virtual void applyToSet
(
const topoSetSource::setAction action,
topoSet&
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,222 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "setsToFaceZone.H"
#include "polyMesh.H"
#include "faceZoneSet.H"
#include "cellSet.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(setsToFaceZone, 0);
addToRunTimeSelectionTable(topoSetSource, setsToFaceZone, word);
addToRunTimeSelectionTable(topoSetSource, setsToFaceZone, istream);
}
Foam::topoSetSource::addToUsageTable Foam::setsToFaceZone::usage_
(
setsToFaceZone::typeName,
"\n Usage: setsToFaceZone <faceSet> <slaveCellSet>\n\n"
" Select all faces in the faceSet."
" Orientated so slave side is in cellSet.\n\n"
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::setsToFaceZone::setsToFaceZone
(
const polyMesh& mesh,
const word& faceSetName,
const word& cellSetName
)
:
topoSetSource(mesh),
faceSetName_(faceSetName),
cellSetName_(cellSetName)
{}
// Construct from dictionary
Foam::setsToFaceZone::setsToFaceZone
(
const polyMesh& mesh,
const dictionary& dict
)
:
topoSetSource(mesh),
faceSetName_(dict.lookup("faceSet")),
cellSetName_(dict.lookup("cellSet"))
{}
// Construct from Istream
Foam::setsToFaceZone::setsToFaceZone
(
const polyMesh& mesh,
Istream& is
)
:
topoSetSource(mesh),
faceSetName_(checkIs(is)),
cellSetName_(checkIs(is))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::setsToFaceZone::~setsToFaceZone()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::setsToFaceZone::applyToSet
(
const topoSetSource::setAction action,
topoSet& set
) const
{
if (!isA<faceZoneSet>(set))
{
WarningIn
(
"setsToFaceZone::applyToSet(const topoSetSource::setAction"
", topoSet"
) << "Operation only allowed on a faceZoneSet." << endl;
}
else
{
faceZoneSet& fzSet = refCast<faceZoneSet>(set);
if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
{
Info<< " Adding all faces from faceSet " << faceSetName_
<< " ..." << endl;
// Load the sets
faceSet fSet(mesh_, faceSetName_);
cellSet cSet(mesh_, cellSetName_);
// Start off from copy
DynamicList<label> newAddressing(fzSet.addressing());
DynamicList<bool> newFlipMap(fzSet.flipMap());
forAllConstIter(faceSet, fSet, iter)
{
label faceI = iter.key();
if (!fzSet.found(faceI))
{
bool flip = false;
label own = mesh_.faceOwner()[faceI];
bool ownFound = cSet.found(own);
if (mesh_.isInternalFace(faceI))
{
label nei = mesh_.faceNeighbour()[faceI];
bool neiFound = cSet.found(nei);
if (ownFound && !neiFound)
{
flip = false;
}
else if(!ownFound && neiFound)
{
flip = true;
}
else
{
WarningIn
(
"setsToFaceZone::applyToSet"
"(const topoSetSource::setAction, topoSet)"
) << "One of owner or neighbour of internal face "
<< faceI << " should be in cellSet "
<< cSet.name()
<< " to be able to determine orientation."
<< endl
<< "Face:" << faceI << " own:" << own
<< " OwnInCellSet:" << ownFound
<< " nei:" << nei
<< " NeiInCellSet:" << neiFound
<< endl;
}
}
else
{
flip = !ownFound;
}
newAddressing.append(faceI);
newFlipMap.append(flip);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.flipMap().transfer(newFlipMap);
fzSet.updateSet();
}
else if (action == topoSetSource::DELETE)
{
Info<< " Removing all faces from faceSet " << faceSetName_
<< " ..." << endl;
// Load the set
faceZoneSet loadedSet(mesh_, faceSetName_);
// Start off empty
DynamicList<label> newAddressing(fzSet.addressing().size());
DynamicList<bool> newFlipMap(fzSet.flipMap().size());
forAll(fzSet.addressing(), i)
{
if (!loadedSet.found(fzSet.addressing()[i]))
{
newAddressing.append(fzSet.addressing()[i]);
newFlipMap.append(fzSet.flipMap()[i]);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.flipMap().transfer(newFlipMap);
fzSet.updateSet();
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,119 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::setsToFaceZone
Description
A topoSetSource to select faces based on usage in a faceSet and cellSet
SourceFiles
setsToFaceZone.C
\*---------------------------------------------------------------------------*/
#ifndef setsToFaceZone_H
#define setsToFaceZone_H
#include "topoSetSource.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class setsToFaceZone Declaration
\*---------------------------------------------------------------------------*/
class setsToFaceZone
:
public topoSetSource
{
// Private data
//- Add usage string
static addToUsageTable usage_;
//- Name of set to use
word faceSetName_;
//- Name of set to use
word cellSetName_;
public:
//- Runtime type information
TypeName("setsToFaceZone");
// Constructors
//- Construct from components
setsToFaceZone
(
const polyMesh& mesh,
const word& faceSetName,
const word& cellSetName
);
//- Construct from dictionary
setsToFaceZone
(
const polyMesh& mesh,
const dictionary& dict
);
//- Construct from Istream
setsToFaceZone
(
const polyMesh& mesh,
Istream&
);
// Destructor
virtual ~setsToFaceZone();
// Member Functions
virtual void applyToSet
(
const topoSetSource::setAction action,
topoSet&
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -151,13 +151,13 @@ void Foam::cellToPoint::applyToSet
{ {
if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
{ {
Pout<< " Adding from " << setName_ << " ..." << endl; Info<< " Adding from " << setName_ << " ..." << endl;
combine(set, true); combine(set, true);
} }
else if (action == topoSetSource::DELETE) else if (action == topoSetSource::DELETE)
{ {
Pout<< " Removing from " << setName_ << " ..." << endl; Info<< " Removing from " << setName_ << " ..." << endl;
combine(set, false); combine(set, false);
} }

View File

@ -0,0 +1,168 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "setToPointZone.H"
#include "polyMesh.H"
#include "pointZoneSet.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(setToPointZone, 0);
addToRunTimeSelectionTable(topoSetSource, setToPointZone, word);
addToRunTimeSelectionTable(topoSetSource, setToPointZone, istream);
}
Foam::topoSetSource::addToUsageTable Foam::setToPointZone::usage_
(
setToPointZone::typeName,
"\n Usage: setToPointZone <pointSet>\n\n"
" Select all points in the pointSet.\n\n"
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::setToPointZone::setToPointZone
(
const polyMesh& mesh,
const word& setName
)
:
topoSetSource(mesh),
setName_(setName)
{}
// Construct from dictionary
Foam::setToPointZone::setToPointZone
(
const polyMesh& mesh,
const dictionary& dict
)
:
topoSetSource(mesh),
setName_(dict.lookup("set"))
{}
// Construct from Istream
Foam::setToPointZone::setToPointZone
(
const polyMesh& mesh,
Istream& is
)
:
topoSetSource(mesh),
setName_(checkIs(is))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::setToPointZone::~setToPointZone()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::setToPointZone::applyToSet
(
const topoSetSource::setAction action,
topoSet& set
) const
{
if (!isA<pointZoneSet>(set))
{
WarningIn
(
"setToPointZone::applyToSet(const topoSetSource::setAction"
", topoSet"
) << "Operation only allowed on a pointZoneSet." << endl;
}
else
{
pointZoneSet& fzSet = refCast<pointZoneSet>(set);
if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
{
Info<< " Adding all points from pointSet " << setName_
<< " ..." << endl;
// Load the sets
pointSet fSet(mesh_, setName_);
// Start off from copy
DynamicList<label> newAddressing(fzSet.addressing());
forAllConstIter(pointSet, fSet, iter)
{
label pointI = iter.key();
if (!fzSet.found(pointI))
{
newAddressing.append(pointI);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.updateSet();
}
else if (action == topoSetSource::DELETE)
{
Info<< " Removing all points from pointSet " << setName_
<< " ..." << endl;
// Load the set
pointSet loadedSet(mesh_, setName_);
// Start off empty
DynamicList<label> newAddressing(fzSet.addressing().size());
forAll(fzSet.addressing(), i)
{
if (!loadedSet.found(fzSet.addressing()[i]))
{
newAddressing.append(fzSet.addressing()[i]);
}
}
fzSet.addressing().transfer(newAddressing);
fzSet.updateSet();
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,115 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::setToPointZone
Description
A topoSetSource to select points based on usage in a pointSet.
SourceFiles
setToPointZone.C
\*---------------------------------------------------------------------------*/
#ifndef setToPointZone_H
#define setToPointZone_H
#include "topoSetSource.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class setToPointZone Declaration
\*---------------------------------------------------------------------------*/
class setToPointZone
:
public topoSetSource
{
// Private data
//- Add usage string
static addToUsageTable usage_;
//- Name of set to use
word setName_;
public:
//- Runtime type information
TypeName("setToPointZone");
// Constructors
//- Construct from components
setToPointZone
(
const polyMesh& mesh,
const word& setName
);
//- Construct from dictionary
setToPointZone
(
const polyMesh& mesh,
const dictionary& dict
);
//- Construct from Istream
setToPointZone
(
const polyMesh& mesh,
Istream&
);
// Destructor
virtual ~setToPointZone();
// Member Functions
virtual void applyToSet
(
const topoSetSource::setAction action,
topoSet&
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -41,6 +41,7 @@ defineTypeNameAndDebug(cellSet, 0);
addToRunTimeSelectionTable(topoSet, cellSet, word); addToRunTimeSelectionTable(topoSet, cellSet, word);
addToRunTimeSelectionTable(topoSet, cellSet, size); addToRunTimeSelectionTable(topoSet, cellSet, size);
addToRunTimeSelectionTable(topoSet, cellSet, set);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -78,6 +79,18 @@ cellSet::cellSet
{} {}
cellSet::cellSet
(
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
)
:
topoSet(mesh, name, set, w)
{}
cellSet::cellSet cellSet::cellSet
( (
const polyMesh& mesh, const polyMesh& mesh,

View File

@ -88,6 +88,15 @@ public:
writeOption w=NO_WRITE writeOption w=NO_WRITE
); );
//- Construct from existing set
cellSet
(
const polyMesh& mesh,
const word& name,
const topoSet&,
writeOption w=NO_WRITE
);
//- Construct from labelHashSet //- Construct from labelHashSet
cellSet cellSet
( (

View File

@ -0,0 +1,308 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "cellZoneSet.H"
#include "mapPolyMesh.H"
#include "polyMesh.H"
#include "processorPolyPatch.H"
#include "cyclicPolyPatch.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(cellZoneSet, 0);
addToRunTimeSelectionTable(topoSet, cellZoneSet, word);
addToRunTimeSelectionTable(topoSet, cellZoneSet, size);
addToRunTimeSelectionTable(topoSet, cellZoneSet, set);
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void cellZoneSet::updateSet()
{
cellSet::clearStorage();
cellSet::resize(2*addressing_.size());
forAll(addressing_, i)
{
cellSet::insert(addressing_[i]);
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
cellZoneSet::cellZoneSet
(
const polyMesh& mesh,
const word& name,
readOption r,
writeOption w
)
:
cellSet(mesh, name, 1000), // do not read cellSet
mesh_(mesh),
addressing_(0)
{
const cellZoneMesh& cellZones = mesh.cellZones();
label zoneID = cellZones.findZoneID(name);
if
(
(r == IOobject::MUST_READ)
|| (r == IOobject::READ_IF_PRESENT && zoneID != -1)
)
{
const cellZone& fz = cellZones[zoneID];
addressing_ = fz;
}
updateSet();
check(mesh.nCells());
}
cellZoneSet::cellZoneSet
(
const polyMesh& mesh,
const word& name,
const label size,
writeOption w
)
:
cellSet(mesh, name, size, w),
mesh_(mesh),
addressing_(0)
{
updateSet();
}
cellZoneSet::cellZoneSet
(
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
)
:
cellSet(mesh, name, set.size(), w),
mesh_(mesh),
addressing_(refCast<const cellZoneSet>(set).addressing())
{
updateSet();
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
cellZoneSet::~cellZoneSet()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void cellZoneSet::invert(const label maxLen)
{
label n = 0;
for (label cellI = 0; cellI < maxLen; cellI++)
{
if (!found(cellI))
{
addressing_[n] = cellI;
n++;
}
}
addressing_.setSize(n);
updateSet();
}
void cellZoneSet::subset(const topoSet& set)
{
DynamicList<label> newAddressing(addressing_.size());
const cellZoneSet& fSet = refCast<const cellZoneSet>(set);
forAll(fSet.addressing(), i)
{
label cellI = fSet.addressing()[i];
if (found(cellI))
{
newAddressing.append(cellI);
}
}
addressing_.transfer(newAddressing);
updateSet();
}
void cellZoneSet::addSet(const topoSet& set)
{
DynamicList<label> newAddressing(addressing_);
const cellZoneSet& fSet = refCast<const cellZoneSet>(set);
forAll(fSet.addressing(), i)
{
label cellI = fSet.addressing()[i];
if (!found(cellI))
{
newAddressing.append(cellI);
}
}
addressing_.transfer(newAddressing);
updateSet();
}
void cellZoneSet::deleteSet(const topoSet& set)
{
DynamicList<label> newAddressing(addressing_.size());
const cellZoneSet& fSet = refCast<const cellZoneSet>(set);
forAll(addressing_, i)
{
label cellI = addressing_[i];
if (!fSet.found(cellI))
{
// Not found in fSet so add
newAddressing.append(cellI);
}
}
addressing_.transfer(newAddressing);
updateSet();
}
void cellZoneSet::sync(const polyMesh& mesh)
{}
label cellZoneSet::maxSize(const polyMesh& mesh) const
{
return mesh.nCells();
}
//- Write using given format, version and compression
bool cellZoneSet::writeObject
(
IOstream::streamFormat s,
IOstream::versionNumber v,
IOstream::compressionType c
) const
{
// Write shadow cellSet
word oldTypeName = typeName;
const_cast<word&>(type()) = cellSet::typeName;
bool ok = cellSet::writeObject(s, v, c);
const_cast<word&>(type()) = oldTypeName;
// Modify cellZone
cellZoneMesh& cellZones = const_cast<polyMesh&>(mesh_).cellZones();
label zoneID = cellZones.findZoneID(name());
if (zoneID == -1)
{
zoneID = cellZones.size();
cellZones.setSize(zoneID+1);
cellZones.set
(
zoneID,
new cellZone
(
name(),
addressing_,
zoneID,
cellZones
)
);
}
else
{
cellZones[zoneID] = addressing_;
}
return ok && cellZones.write();
}
void cellZoneSet::updateMesh(const mapPolyMesh& morphMap)
{
// cellZone
labelList newAddressing(addressing_.size());
label n = 0;
forAll(addressing_, i)
{
label cellI = addressing_[i];
label newCellI = morphMap.reverseCellMap()[cellI];
if (newCellI >= 0)
{
newAddressing[n] = newCellI;
n++;
}
}
newAddressing.setSize(n);
addressing_.transfer(newAddressing);
updateSet();
}
void cellZoneSet::writeDebug
(
Ostream& os,
const primitiveMesh& mesh,
const label maxLen
) const
{
cellSet::writeDebug(os, mesh, maxLen);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,173 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::cellZoneSet
Description
Like cellSet but updates cellZone when writing.
SourceFiles
cellZone.C
\*---------------------------------------------------------------------------*/
#ifndef cellZoneSet_H
#define cellZoneSet_H
#include "cellSet.H"
#include "boolList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class cellZoneSet Declaration
\*---------------------------------------------------------------------------*/
class cellZoneSet
:
public cellSet
{
// Private data
const polyMesh& mesh_;
labelList addressing_;
// Private Member Functions
public:
//- Runtime type information
TypeName("cellZoneSet");
// Constructors
//- Construct from objectRegistry and name
cellZoneSet
(
const polyMesh& mesh,
const word& name,
readOption r=MUST_READ,
writeOption w=NO_WRITE
);
//- Construct from additional size of labelHashSet
cellZoneSet
(
const polyMesh& mesh,
const word& name,
const label,
writeOption w=NO_WRITE
);
//- Construct from existing set
cellZoneSet
(
const polyMesh& mesh,
const word& name,
const topoSet&,
writeOption w=NO_WRITE
);
// Destructor
virtual ~cellZoneSet();
// Member functions
const labelList& addressing() const
{
return addressing_;
}
labelList& addressing()
{
return addressing_;
}
//- Make cellSet part consistent with addressing
void updateSet();
//- Invert contents. (insert all members 0..maxLen-1 which were not in
// set)
virtual void invert(const label maxLen);
//- Subset contents. Only elements present in both sets remain.
virtual void subset(const topoSet& set);
//- Add elements present in set.
virtual void addSet(const topoSet& set);
//- Delete elements present in set.
virtual void deleteSet(const topoSet& set);
//- Sync cellZoneSet across coupled patches.
virtual void sync(const polyMesh& mesh);
//- Write maxLen items with label and coordinates.
virtual void writeDebug
(
Ostream& os,
const primitiveMesh&,
const label maxLen
) const;
//- Write cellZone
virtual bool writeObject
(
IOstream::streamFormat,
IOstream::versionNumber,
IOstream::compressionType
) const;
//- Update any stored data for new labels
virtual void updateMesh(const mapPolyMesh& morphMap);
//- Return max index+1.
virtual label maxSize(const polyMesh& mesh) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -43,6 +43,7 @@ defineTypeNameAndDebug(faceSet, 0);
addToRunTimeSelectionTable(topoSet, faceSet, word); addToRunTimeSelectionTable(topoSet, faceSet, word);
addToRunTimeSelectionTable(topoSet, faceSet, size); addToRunTimeSelectionTable(topoSet, faceSet, size);
addToRunTimeSelectionTable(topoSet, faceSet, set);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -79,6 +80,18 @@ faceSet::faceSet
{} {}
faceSet::faceSet
(
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
)
:
topoSet(mesh, name, set, w)
{}
faceSet::faceSet faceSet::faceSet
( (
const polyMesh& mesh, const polyMesh& mesh,

View File

@ -83,6 +83,15 @@ public:
writeOption w=NO_WRITE writeOption w=NO_WRITE
); );
//- Construct from existing set
faceSet
(
const polyMesh& mesh,
const word& name,
const topoSet&,
writeOption w=NO_WRITE
);
//- Construct from additional labelHashSet //- Construct from additional labelHashSet
faceSet faceSet
( (

View File

@ -0,0 +1,406 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "faceZoneSet.H"
#include "mapPolyMesh.H"
#include "polyMesh.H"
#include "processorPolyPatch.H"
#include "cyclicPolyPatch.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(faceZoneSet, 0);
addToRunTimeSelectionTable(topoSet, faceZoneSet, word);
addToRunTimeSelectionTable(topoSet, faceZoneSet, size);
addToRunTimeSelectionTable(topoSet, faceZoneSet, set);
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void faceZoneSet::updateSet()
{
faceSet::clearStorage();
faceSet::resize(2*addressing_.size());
forAll(addressing_, i)
{
faceSet::insert(addressing_[i]);
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
faceZoneSet::faceZoneSet
(
const polyMesh& mesh,
const word& name,
readOption r,
writeOption w
)
:
faceSet(mesh, name, 1000), // do not read faceSet
mesh_(mesh),
addressing_(0),
flipMap_(0)
{
const faceZoneMesh& faceZones = mesh.faceZones();
label zoneID = faceZones.findZoneID(name);
if
(
(r == IOobject::MUST_READ)
|| (r == IOobject::READ_IF_PRESENT && zoneID != -1)
)
{
const faceZone& fz = faceZones[zoneID];
addressing_ = fz;
flipMap_ = fz.flipMap();
}
updateSet();
check(mesh.nFaces());
}
faceZoneSet::faceZoneSet
(
const polyMesh& mesh,
const word& name,
const label size,
writeOption w
)
:
faceSet(mesh, name, size, w),
mesh_(mesh),
addressing_(0),
flipMap_(0)
{
updateSet();
}
faceZoneSet::faceZoneSet
(
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
)
:
faceSet(mesh, name, set.size(), w),
mesh_(mesh),
addressing_(refCast<const faceZoneSet>(set).addressing()),
flipMap_(refCast<const faceZoneSet>(set).flipMap())
{
updateSet();
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
faceZoneSet::~faceZoneSet()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void faceZoneSet::invert(const label maxLen)
{
label n = 0;
for (label faceI = 0; faceI < maxLen; faceI++)
{
if (!found(faceI))
{
addressing_[n] = faceI;
flipMap_[n] = true; //? or false?
n++;
}
}
addressing_.setSize(n);
flipMap_.setSize(n);
updateSet();
}
void faceZoneSet::subset(const topoSet& set)
{
label nConflict = 0;
DynamicList<label> newAddressing(addressing_.size());
DynamicList<bool> newFlipMap(flipMap_.size());
Map<label> faceToIndex(addressing_.size());
forAll(addressing_, i)
{
faceToIndex.insert(addressing_[i], i);
}
const faceZoneSet& fSet = refCast<const faceZoneSet>(set);
forAll(fSet.addressing(), i)
{
label faceI = fSet.addressing()[i];
Map<label>::const_iterator iter = faceToIndex.find(faceI);
if (iter != faceToIndex.end())
{
label index = iter();
if (fSet.flipMap()[i] != flipMap_[index])
{
nConflict++;
}
newAddressing.append(faceI);
newFlipMap.append(flipMap_[index]);
}
}
if (nConflict > 0)
{
WarningIn(" faceZoneSet::subset(const topoSet&)")
<< "subset : there are " << nConflict
<< " faces with different orientation in faceZonesSets "
<< name() << " and " << set.name() << endl;
}
addressing_.transfer(newAddressing);
flipMap_.transfer(newFlipMap);
updateSet();
}
void faceZoneSet::addSet(const topoSet& set)
{
label nConflict = 0;
DynamicList<label> newAddressing(addressing_);
DynamicList<bool> newFlipMap(flipMap_);
Map<label> faceToIndex(addressing_.size());
forAll(addressing_, i)
{
faceToIndex.insert(addressing_[i], i);
}
const faceZoneSet& fSet = refCast<const faceZoneSet>(set);
forAll(fSet.addressing(), i)
{
label faceI = fSet.addressing()[i];
Map<label>::const_iterator iter = faceToIndex.find(faceI);
if (iter != faceToIndex.end())
{
label index = iter();
if (fSet.flipMap()[i] != flipMap_[index])
{
nConflict++;
}
}
else
{
newAddressing.append(faceI);
newFlipMap.append(fSet.flipMap()[i]);
}
}
if (nConflict > 0)
{
WarningIn("faceZoneSet::addSet(const topoSet&)")
<< "addSet : there are " << nConflict
<< " faces with different orientation in faceZonesSets "
<< name() << " and " << set.name() << endl;
}
addressing_.transfer(newAddressing);
flipMap_.transfer(newFlipMap);
updateSet();
}
void faceZoneSet::deleteSet(const topoSet& set)
{
label nConflict = 0;
DynamicList<label> newAddressing(addressing_.size());
DynamicList<bool> newFlipMap(flipMap_.size());
const faceZoneSet& fSet = refCast<const faceZoneSet>(set);
Map<label> faceToIndex(fSet.addressing().size());
forAll(fSet.addressing(), i)
{
faceToIndex.insert(fSet.addressing()[i], i);
}
forAll(addressing_, i)
{
label faceI = addressing_[i];
Map<label>::const_iterator iter = faceToIndex.find(faceI);
if (iter != faceToIndex.end())
{
label index = iter();
if (fSet.flipMap()[index] != flipMap_[i])
{
nConflict++;
}
}
else
{
// Not found in fSet so add
newAddressing.append(faceI);
newFlipMap.append(fSet.flipMap()[i]);
}
}
if (nConflict > 0)
{
WarningIn("faceZoneSet::deleteSet(const topoSet&)")
<< "deleteSet : there are " << nConflict
<< " faces with different orientation in faceZonesSets "
<< name() << " and " << set.name() << endl;
}
addressing_.transfer(newAddressing);
flipMap_.transfer(newFlipMap);
updateSet();
}
void faceZoneSet::sync(const polyMesh& mesh)
{}
label faceZoneSet::maxSize(const polyMesh& mesh) const
{
return mesh.nFaces();
}
//- Write using given format, version and compression
bool faceZoneSet::writeObject
(
IOstream::streamFormat s,
IOstream::versionNumber v,
IOstream::compressionType c
) const
{
// Write shadow faceSet
word oldTypeName = typeName;
const_cast<word&>(type()) = faceSet::typeName;
bool ok = faceSet::writeObject(s, v, c);
const_cast<word&>(type()) = oldTypeName;
// Modify faceZone
faceZoneMesh& faceZones = const_cast<polyMesh&>(mesh_).faceZones();
label zoneID = faceZones.findZoneID(name());
if (zoneID == -1)
{
zoneID = faceZones.size();
faceZones.setSize(zoneID+1);
faceZones.set
(
zoneID,
new faceZone
(
name(),
addressing_,
flipMap_,
zoneID,
faceZones
)
);
}
else
{
faceZones[zoneID].resetAddressing(addressing_, flipMap_);
}
return ok && faceZones.write();
}
void faceZoneSet::updateMesh(const mapPolyMesh& morphMap)
{
// faceZone
labelList newAddressing(addressing_.size());
boolList newFlipMap(flipMap_.size());
label n = 0;
forAll(addressing_, i)
{
label faceI = addressing_[i];
label newFaceI = morphMap.reverseFaceMap()[faceI];
if (newFaceI >= 0)
{
newAddressing[n] = newFaceI;
newFlipMap[n] = flipMap_[i];
n++;
}
}
newAddressing.setSize(n);
newFlipMap.setSize(n);
addressing_.transfer(newAddressing);
flipMap_.transfer(newFlipMap);
updateSet();
}
void faceZoneSet::writeDebug
(
Ostream& os,
const primitiveMesh& mesh,
const label maxLen
) const
{
faceSet::writeDebug(os, mesh, maxLen);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,187 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::faceZoneSet
Description
Like faceSet but updates faceZone when writing.
SourceFiles
faceZone.C
\*---------------------------------------------------------------------------*/
#ifndef faceZoneSet_H
#define faceZoneSet_H
#include "faceSet.H"
#include "boolList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class faceZoneSet Declaration
\*---------------------------------------------------------------------------*/
class faceZoneSet
:
public faceSet
{
// Private data
const polyMesh& mesh_;
labelList addressing_;
boolList flipMap_;
// Private Member Functions
public:
//- Runtime type information
TypeName("faceZoneSet");
// Constructors
//- Construct from objectRegistry and name
faceZoneSet
(
const polyMesh& mesh,
const word& name,
readOption r=MUST_READ,
writeOption w=NO_WRITE
);
//- Construct from additional size of labelHashSet
faceZoneSet
(
const polyMesh& mesh,
const word& name,
const label,
writeOption w=NO_WRITE
);
//- Construct from existing set
faceZoneSet
(
const polyMesh& mesh,
const word& name,
const topoSet&,
writeOption w=NO_WRITE
);
// Destructor
virtual ~faceZoneSet();
// Member functions
const labelList& addressing() const
{
return addressing_;
}
labelList& addressing()
{
return addressing_;
}
const boolList& flipMap() const
{
return flipMap_;
}
boolList& flipMap()
{
return flipMap_;
}
//- Make faceSet part consistent with addressing
void updateSet();
//- Invert contents. (insert all members 0..maxLen-1 which were not in
// set)
virtual void invert(const label maxLen);
//- Subset contents. Only elements present in both sets remain.
virtual void subset(const topoSet& set);
//- Add elements present in set.
virtual void addSet(const topoSet& set);
//- Delete elements present in set.
virtual void deleteSet(const topoSet& set);
//- Sync faceZoneSet across coupled patches.
virtual void sync(const polyMesh& mesh);
//- Write maxLen items with label and coordinates.
virtual void writeDebug
(
Ostream& os,
const primitiveMesh&,
const label maxLen
) const;
//- Write faceZone
virtual bool writeObject
(
IOstream::streamFormat,
IOstream::versionNumber,
IOstream::compressionType
) const;
//- Update any stored data for new labels
virtual void updateMesh(const mapPolyMesh& morphMap);
//- Return max index+1.
virtual label maxSize(const polyMesh& mesh) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -42,6 +42,7 @@ defineTypeNameAndDebug(pointSet, 0);
addToRunTimeSelectionTable(topoSet, pointSet, word); addToRunTimeSelectionTable(topoSet, pointSet, word);
addToRunTimeSelectionTable(topoSet, pointSet, size); addToRunTimeSelectionTable(topoSet, pointSet, size);
addToRunTimeSelectionTable(topoSet, pointSet, set);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -78,6 +79,18 @@ pointSet::pointSet
{} {}
pointSet::pointSet
(
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
)
:
topoSet(mesh, name, set, w)
{}
pointSet::pointSet pointSet::pointSet
( (
const polyMesh& mesh, const polyMesh& mesh,

View File

@ -83,6 +83,15 @@ public:
writeOption w=NO_WRITE writeOption w=NO_WRITE
); );
//- Construct from additional labelHashSet
pointSet
(
const polyMesh& mesh,
const word& name,
const topoSet&,
writeOption w=NO_WRITE
);
//- Construct from additional labelHashSet //- Construct from additional labelHashSet
pointSet pointSet
( (

View File

@ -0,0 +1,308 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "pointZoneSet.H"
#include "mapPolyMesh.H"
#include "polyMesh.H"
#include "processorPolyPatch.H"
#include "cyclicPolyPatch.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(pointZoneSet, 0);
addToRunTimeSelectionTable(topoSet, pointZoneSet, word);
addToRunTimeSelectionTable(topoSet, pointZoneSet, size);
addToRunTimeSelectionTable(topoSet, pointZoneSet, set);
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void pointZoneSet::updateSet()
{
pointSet::clearStorage();
pointSet::resize(2*addressing_.size());
forAll(addressing_, i)
{
pointSet::insert(addressing_[i]);
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
pointZoneSet::pointZoneSet
(
const polyMesh& mesh,
const word& name,
readOption r,
writeOption w
)
:
pointSet(mesh, name, 1000), // do not read pointSet
mesh_(mesh),
addressing_(0)
{
const pointZoneMesh& pointZones = mesh.pointZones();
label zoneID = pointZones.findZoneID(name);
if
(
(r == IOobject::MUST_READ)
|| (r == IOobject::READ_IF_PRESENT && zoneID != -1)
)
{
const pointZone& fz = pointZones[zoneID];
addressing_ = fz;
}
updateSet();
check(mesh.nPoints());
}
pointZoneSet::pointZoneSet
(
const polyMesh& mesh,
const word& name,
const label size,
writeOption w
)
:
pointSet(mesh, name, size, w),
mesh_(mesh),
addressing_(0)
{
updateSet();
}
pointZoneSet::pointZoneSet
(
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
)
:
pointSet(mesh, name, set.size(), w),
mesh_(mesh),
addressing_(refCast<const pointZoneSet>(set).addressing())
{
updateSet();
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
pointZoneSet::~pointZoneSet()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void pointZoneSet::invert(const label maxLen)
{
label n = 0;
for (label pointI = 0; pointI < maxLen; pointI++)
{
if (!found(pointI))
{
addressing_[n] = pointI;
n++;
}
}
addressing_.setSize(n);
updateSet();
}
void pointZoneSet::subset(const topoSet& set)
{
DynamicList<label> newAddressing(addressing_.size());
const pointZoneSet& fSet = refCast<const pointZoneSet>(set);
forAll(fSet.addressing(), i)
{
label pointI = fSet.addressing()[i];
if (found(pointI))
{
newAddressing.append(pointI);
}
}
addressing_.transfer(newAddressing);
updateSet();
}
void pointZoneSet::addSet(const topoSet& set)
{
DynamicList<label> newAddressing(addressing_);
const pointZoneSet& fSet = refCast<const pointZoneSet>(set);
forAll(fSet.addressing(), i)
{
label pointI = fSet.addressing()[i];
if (!found(pointI))
{
newAddressing.append(pointI);
}
}
addressing_.transfer(newAddressing);
updateSet();
}
void pointZoneSet::deleteSet(const topoSet& set)
{
DynamicList<label> newAddressing(addressing_.size());
const pointZoneSet& fSet = refCast<const pointZoneSet>(set);
forAll(addressing_, i)
{
label pointI = addressing_[i];
if (!fSet.found(pointI))
{
// Not found in fSet so add
newAddressing.append(pointI);
}
}
addressing_.transfer(newAddressing);
updateSet();
}
void pointZoneSet::sync(const polyMesh& mesh)
{}
label pointZoneSet::maxSize(const polyMesh& mesh) const
{
return mesh.nPoints();
}
//- Write using given format, version and compression
bool pointZoneSet::writeObject
(
IOstream::streamFormat s,
IOstream::versionNumber v,
IOstream::compressionType c
) const
{
// Write shadow pointSet
word oldTypeName = typeName;
const_cast<word&>(type()) = pointSet::typeName;
bool ok = pointSet::writeObject(s, v, c);
const_cast<word&>(type()) = oldTypeName;
// Modify pointZone
pointZoneMesh& pointZones = const_cast<polyMesh&>(mesh_).pointZones();
label zoneID = pointZones.findZoneID(name());
if (zoneID == -1)
{
zoneID = pointZones.size();
pointZones.setSize(zoneID+1);
pointZones.set
(
zoneID,
new pointZone
(
name(),
addressing_,
zoneID,
pointZones
)
);
}
else
{
pointZones[zoneID] = addressing_;
}
return ok && pointZones.write();
}
void pointZoneSet::updateMesh(const mapPolyMesh& morphMap)
{
// pointZone
labelList newAddressing(addressing_.size());
label n = 0;
forAll(addressing_, i)
{
label pointI = addressing_[i];
label newPointI = morphMap.reversePointMap()[pointI];
if (newPointI >= 0)
{
newAddressing[n] = newPointI;
n++;
}
}
newAddressing.setSize(n);
addressing_.transfer(newAddressing);
updateSet();
}
void pointZoneSet::writeDebug
(
Ostream& os,
const primitiveMesh& mesh,
const label maxLen
) const
{
pointSet::writeDebug(os, mesh, maxLen);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,173 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::pointZoneSet
Description
Like pointSet but updates pointZone when writing.
SourceFiles
pointZone.C
\*---------------------------------------------------------------------------*/
#ifndef pointZoneSet_H
#define pointZoneSet_H
#include "pointSet.H"
#include "boolList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class pointZoneSet Declaration
\*---------------------------------------------------------------------------*/
class pointZoneSet
:
public pointSet
{
// Private data
const polyMesh& mesh_;
labelList addressing_;
// Private Member Functions
public:
//- Runtime type information
TypeName("pointZoneSet");
// Constructors
//- Construct from objectRegistry and name
pointZoneSet
(
const polyMesh& mesh,
const word& name,
readOption r=MUST_READ,
writeOption w=NO_WRITE
);
//- Construct from additional size of labelHashSet
pointZoneSet
(
const polyMesh& mesh,
const word& name,
const label,
writeOption w=NO_WRITE
);
//- Construct from existing set
pointZoneSet
(
const polyMesh& mesh,
const word& name,
const topoSet&,
writeOption w=NO_WRITE
);
// Destructor
virtual ~pointZoneSet();
// Member functions
const labelList& addressing() const
{
return addressing_;
}
labelList& addressing()
{
return addressing_;
}
//- Make pointSet part consistent with addressing
void updateSet();
//- Invert contents. (insert all members 0..maxLen-1 which were not in
// set)
virtual void invert(const label maxLen);
//- Subset contents. Only elements present in both sets remain.
virtual void subset(const topoSet& set);
//- Add elements present in set.
virtual void addSet(const topoSet& set);
//- Delete elements present in set.
virtual void deleteSet(const topoSet& set);
//- Sync pointZoneSet across coupled patches.
virtual void sync(const polyMesh& mesh);
//- Write maxLen items with label and coordinates.
virtual void writeDebug
(
Ostream& os,
const primitiveMesh&,
const label maxLen
) const;
//- Write pointZone
virtual bool writeObject
(
IOstream::streamFormat,
IOstream::versionNumber,
IOstream::compressionType
) const;
//- Update any stored data for new labels
virtual void updateMesh(const mapPolyMesh& morphMap);
//- Return max index+1.
virtual label maxSize(const polyMesh& mesh) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -39,6 +39,7 @@ namespace Foam
defineTypeNameAndDebug(topoSet, 0); defineTypeNameAndDebug(topoSet, 0);
defineRunTimeSelectionTable(topoSet, word); defineRunTimeSelectionTable(topoSet, word);
defineRunTimeSelectionTable(topoSet, size); defineRunTimeSelectionTable(topoSet, size);
defineRunTimeSelectionTable(topoSet, set);
// Construct named object from existing set. // Construct named object from existing set.
@ -103,6 +104,37 @@ autoPtr<topoSet> topoSet::New
} }
// Construct named object from existing set.
autoPtr<topoSet> topoSet::New
(
const word& setType,
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
)
{
setConstructorTable::iterator cstrIter =
setConstructorTablePtr_
->find(setType);
if (cstrIter == setConstructorTablePtr_->end())
{
FatalErrorIn
(
"topoSet::New(const word&, "
"const polyMesh&, const word&, const topoSet&, writeOption)"
) << "Unknown set type " << setType
<< endl << endl
<< "Valid set types : " << endl
<< setConstructorTablePtr_->sortedToc()
<< exit(FatalError);
}
return autoPtr<topoSet>(cstrIter()(mesh, name, set, w));
}
Foam::fileName topoSet::topoSet::localPath Foam::fileName topoSet::topoSet::localPath
( (
const polyMesh& mesh, const polyMesh& mesh,
@ -255,9 +287,9 @@ void topoSet::writeDebug
) const ) const
{ {
// Bounding box of contents. // Bounding box of contents.
boundBox bb(pointField(coords, toc())); boundBox bb(pointField(coords, toc()), true);
Pout<< "Set bounding box: min = " os << "Set bounding box: min = "
<< bb.min() << " max = " << bb.max() << " meters. " << endl << endl; << bb.min() << " max = " << bb.max() << " meters. " << endl << endl;
label n = 0; label n = 0;
@ -538,18 +570,18 @@ void topoSet::writeDebug(Ostream& os, const label maxLen) const
} }
void topoSet::writeDebug //void topoSet::writeDebug
( //(
Ostream&, // Ostream&,
const primitiveMesh&, // const primitiveMesh&,
const label // const label
) const //) const
{ //{
notImplemented // notImplemented
( // (
"topoSet::writeDebug(Ostream&, const primitiveMesh&, const label)" // "topoSet::writeDebug(Ostream&, const primitiveMesh&, const label)"
); // );
} //}
bool topoSet::writeData(Ostream& os) const bool topoSet::writeData(Ostream& os) const
@ -564,13 +596,13 @@ void topoSet::updateMesh(const mapPolyMesh&)
} }
//- Return max index+1. ////- Return max index+1.
label topoSet::maxSize(const polyMesh&) const //label topoSet::maxSize(const polyMesh&) const
{ //{
notImplemented("topoSet::maxSize(const polyMesh&)"); // notImplemented("topoSet::maxSize(const polyMesh&)");
//
return -1; // return -1;
} //}
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //

View File

@ -55,7 +55,6 @@ namespace Foam
class mapPolyMesh; class mapPolyMesh;
class polyMesh; class polyMesh;
class primitiveMesh; class primitiveMesh;
//class directPolyTopoChange;
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class topoSet Declaration Class topoSet Declaration
@ -154,6 +153,21 @@ public:
(mesh, name, size, w) (mesh, name, size, w)
); );
// For the constructor as copy
declareRunTimeSelectionTable
(
autoPtr,
topoSet,
set,
(
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w
),
(mesh, name, set, w)
);
// Constructors // Constructors
@ -208,7 +222,7 @@ public:
// Selectors // Selectors
//- Return a reference to the selected source //- Return a pointer to a toposet read from file
static autoPtr<topoSet> New static autoPtr<topoSet> New
( (
const word& setType, const word& setType,
@ -218,7 +232,7 @@ public:
writeOption w=NO_WRITE writeOption w=NO_WRITE
); );
//- Return a reference to the selected source //- Return a pointer to a new toposet of given size
static autoPtr<topoSet> New static autoPtr<topoSet> New
( (
const word& setType, const word& setType,
@ -228,6 +242,16 @@ public:
writeOption w=NO_WRITE writeOption w=NO_WRITE
); );
//- Return a pointer to a new toposet as copy of another toposet
static autoPtr<topoSet> New
(
const word& setType,
const polyMesh& mesh,
const word& name,
const topoSet& set,
writeOption w=NO_WRITE
);
// Destructor // Destructor
@ -256,13 +280,13 @@ public:
virtual void writeDebug(Ostream& os, const label maxLen) const; virtual void writeDebug(Ostream& os, const label maxLen) const;
//- Like above but also writes mesh related quantity //- Like above but also writes mesh related quantity
// (usually coordinate). Not implemented. // (usually coordinate).
virtual void writeDebug virtual void writeDebug
( (
Ostream& os, Ostream& os,
const primitiveMesh&, const primitiveMesh&,
const label maxLen const label maxLen
) const; ) const = 0;
//- Write contents. //- Write contents.
virtual bool writeData(Ostream&) const; virtual bool writeData(Ostream&) const;
@ -271,7 +295,7 @@ public:
virtual void updateMesh(const mapPolyMesh& morphMap); virtual void updateMesh(const mapPolyMesh& morphMap);
//- Return max allowable index (+1). Not implemented. //- Return max allowable index (+1). Not implemented.
virtual label maxSize(const polyMesh& mesh) const; virtual label maxSize(const polyMesh& mesh) const = 0;