Transferred copyright to the OpenFOAM Foundation
[OpenFOAM-2.0.x.git] / src / meshTools / sets / cellZoneSources / setToCellZone / setToCellZone.C
blobf0c0e646edc3ff5e0727c02f0411f8d8104cd304
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "setToCellZone.H"
27 #include "polyMesh.H"
28 #include "cellZoneSet.H"
30 #include "addToRunTimeSelectionTable.H"
32 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
34 namespace Foam
37 defineTypeNameAndDebug(setToCellZone, 0);
39 addToRunTimeSelectionTable(topoSetSource, setToCellZone, word);
41 addToRunTimeSelectionTable(topoSetSource, setToCellZone, istream);
46 Foam::topoSetSource::addToUsageTable Foam::setToCellZone::usage_
48     setToCellZone::typeName,
49     "\n    Usage: setToCellZone <cellSet>\n\n"
50     "    Select all cells in the cellSet.\n\n"
54 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
56 // Construct from components
57 Foam::setToCellZone::setToCellZone
59     const polyMesh& mesh,
60     const word& setName
63     topoSetSource(mesh),
64     setName_(setName)
68 // Construct from dictionary
69 Foam::setToCellZone::setToCellZone
71     const polyMesh& mesh,
72     const dictionary& dict
75     topoSetSource(mesh),
76     setName_(dict.lookup("set"))
80 // Construct from Istream
81 Foam::setToCellZone::setToCellZone
83     const polyMesh& mesh,
84     Istream& is
87     topoSetSource(mesh),
88     setName_(checkIs(is))
92 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
94 Foam::setToCellZone::~setToCellZone()
98 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
100 void Foam::setToCellZone::applyToSet
102     const topoSetSource::setAction action,
103     topoSet& set
104 ) const
106     if (!isA<cellZoneSet>(set))
107     {
108         WarningIn
109         (
110             "setToCellZone::applyToSet(const topoSetSource::setAction"
111             ", topoSet"
112         )   << "Operation only allowed on a cellZoneSet." << endl;
113     }
114     else
115     {
116         cellZoneSet& fzSet = refCast<cellZoneSet>(set);
118         if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD))
119         {
120             Info<< "    Adding all cells from cellSet " << setName_
121                 << " ..." << endl;
123             // Load the sets
124             cellSet fSet(mesh_, setName_);
126             // Start off from copy
127             DynamicList<label> newAddressing(fzSet.addressing());
129             forAllConstIter(cellSet, fSet, iter)
130             {
131                 label cellI = iter.key();
133                 if (!fzSet.found(cellI))
134                 {
135                     newAddressing.append(cellI);
136                 }
137             }
139             fzSet.addressing().transfer(newAddressing);
140             fzSet.updateSet();
141         }
142         else if (action == topoSetSource::DELETE)
143         {
144             Info<< "    Removing all cells from cellSet " << setName_
145                 << " ..." << endl;
147             // Load the set
148             cellSet loadedSet(mesh_, setName_);
150             // Start off empty
151             DynamicList<label> newAddressing(fzSet.addressing().size());
153             forAll(fzSet.addressing(), i)
154             {
155                 if (!loadedSet.found(fzSet.addressing()[i]))
156                 {
157                     newAddressing.append(fzSet.addressing()[i]);
158                 }
159             }
160             fzSet.addressing().transfer(newAddressing);
161             fzSet.updateSet();
162         }
163     }
167 // ************************************************************************* //