Loading...
Searching...
No Matches
faBoundaryMeshEntries.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2022-2023 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
29#include "processorFaPatch.H"
30
31// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32
33namespace Foam
36}
37
38
39// * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
40
42:
44 (
45 IOobject(io, IOobjectOption::NO_REGISTER)
46 )
47{
48 // readIOcontents()
49 if (isReadRequired() || (isReadOptional() && headerOk()))
50 {
51 // Read as entries
52 Istream& is = readStream(typeName);
53
54 is >> *this;
55 close();
56 }
57}
58
59
60// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
61
64{
65 faBoundaryMeshEntries reader(io);
66
67 return PtrList<entry>(std::move(static_cast<PtrList<entry>&>(reader)));
68}
69
70
71// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
72
73namespace Foam
74{
75
76// Extract optional entry from dictionaries and return as a list
77template<class T>
78static inline List<T> extract
79(
80 const word& key,
81 const UPtrList<entry>& entries,
82 const T& initValue
83)
84{
85 List<T> result(entries.size(), initValue);
86
87 forAll(entries, i)
88 {
89 const dictionary& dict = entries[i].dict();
90 dict.readIfPresent(key, result[i]);
91 }
92
93 return result;
95
96} // End namespace
97
98
99// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
100
101void Foam::faBoundaryMeshEntries::removeProcPatches(PtrList<entry>& entries)
102{
103 // Truncate at the first processor patch entry
104
105 label nNonProcessor = entries.size();
106
107 forAll(entries, patchi)
108 {
109 const dictionary& dict = entries[patchi].dict();
110
111 const word pType = dict.get<word>("type");
112 if (pType == processorFaPatch::typeName)
113 {
114 nNonProcessor = patchi;
115 break;
117 }
118
119 entries.resize(nNonProcessor);
120}
121
122
124(
125 Ostream& os,
126 const UPtrList<entry>& entries
127)
128{
129 os << entries.size();
130
131 if (entries.empty())
132 {
133 // 0-sized : can write with less vertical space
135 }
136 else
137 {
138 os << nl << token::BEGIN_LIST << incrIndent << nl;
139
140 forAll(entries, patchi)
141 {
142 const auto& key = entries[patchi].keyword();
143 const auto& dict = entries[patchi].dict();
144
145 dict.writeEntry(key, os);
146 }
149
150 os.check(FUNCTION_NAME);
151 return os.good();
152}
153
154
156(
157 const UPtrList<entry>& entries
158)
160 return extract<word>("type", entries, "patch");
161}
162
163
164// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
169}
170
173{
174 return extract<word>("type", *this, "patch");
175}
176
179{
180 writeEntries(os, *this);
181}
182
183
185(
186 const word& keyword,
187 Ostream& os
188) const
189{
190 const PtrList<entry>& entries = *this;
191
192 if (!keyword.empty())
193 {
194 os.write(keyword);
195 os << (entries.empty() ? token::SPACE : token::NL);
196 }
198 writeEntries(os, entries);
199
200 if (!keyword.empty()) os.endEntry();
201}
202
205{
206 return writeEntries(os, *this);
207}
208
209
211(
212 IOstreamOption streamOpt,
213 const bool writeOnProc
214) const
215{
217 return regIOobject::writeObject(streamOpt, writeOnProc);
218}
219
220
221// ************************************************************************* //
A simple container of IOobject preferences. Can also be used for general handling of read/no-read/rea...
@ NO_REGISTER
Do not request registration (bool: false).
bool isReadOptional() const noexcept
True if (LAZY_READ) bits are set [same as READ_IF_PRESENT].
bool isReadRequired() const noexcept
True if (MUST_READ | READ_MODIFIED) bits are set.
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition IOobject.H:191
A simple container for options an IOstream can normally have.
compressionType compression() const noexcept
Get the stream compression.
@ UNCOMPRESSED
compression = false
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition Istream.H:60
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition List.H:72
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition Ostream.H:59
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers....
Definition PtrList.H:67
constexpr PtrList() noexcept
Definition PtrListI.H:29
void resize(const label newLen)
Adjust size of PtrList.
Definition PtrList.C:124
void size(const label n)
Older name for setAddressableSize.
Definition UList.H:118
A list of pointers to objects of type <T>, without allocation/deallocation management of the pointers...
Definition UPtrList.H:101
bool empty() const noexcept
True if the list is empty (ie, size() is zero).
Definition UPtrListI.H:99
label size() const noexcept
The number of entries in the list.
Definition UPtrListI.H:106
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
void writeEntry(Ostream &os) const
Write sub-dictionary with its dictName as its header.
Read and store dictionary entries for finite-area boundary patches. The object is *never* registered ...
virtual bool writeObject(IOstreamOption streamOpt, const bool writeOnProc=true) const
Write using stream options, forces UNCOMPRESSED.
wordList types() const
Return a list of patch types, uses the "patch" entry.
virtual bool writeData(Ostream &os) const
The writeData member function required by regIOobject.
static PtrList< entry > readContents(const IOobject &io)
Read and return contents. The IOobject is never registered.
static bool writeEntries(Ostream &os, const UPtrList< entry > &entries)
Write list of entries.
static void removeProcPatches(PtrList< entry > &entries)
Truncate entries at the first processor patch entry.
faBoundaryMeshEntries(const IOobject &io)
Read construct from IOobject. Never register!
void writeEntry(Ostream &os) const
Write as a plain list of entries.
void removeProcPatches()
Truncate at the first processor patch entry.
regIOobject is an abstract class derived from IOobject to handle automatic object registration with t...
Definition regIOobject.H:71
virtual bool writeObject(IOstreamOption streamOpt, const bool writeOnProc) const
Write using stream options.
void close()
Close Istream.
regIOobject(const IOobject &io, const bool isTimeObject=false)
Construct from IOobject. The optional flag adds special handling if the object is the top-level regIO...
Definition regIOobject.C:43
bool headerOk()
Read and check header info. Does not check the headerClassName.
@ BEGIN_LIST
Begin list [isseparator].
Definition token.H:174
@ END_LIST
End list [isseparator].
Definition token.H:175
@ SPACE
Space [isspace].
Definition token.H:144
@ NL
Newline [isspace].
Definition token.H:143
A class for handling words, derived from Foam::string.
Definition word.H:66
#define defineTypeName(Type)
Define the typeName.
Definition className.H:113
OBJstream os(runTime.globalPath()/outputName)
const auto & io
#define FUNCTION_NAME
constexpr auto key(const Type &t) noexcept
Helper function to return the enum value.
Namespace for OpenFOAM.
List< word > wordList
List of word.
Definition fileName.H:60
static List< T > extract(const word &key, const UPtrList< entry > &entries, const T &initValue)
Ostream & incrIndent(Ostream &os)
Increment the indent level.
Definition Ostream.H:490
const word GlobalIOList< Tuple2< scalar, vector > >::typeName("scalarVectorTable")
Ostream & decrIndent(Ostream &os)
Decrement the indent level.
Definition Ostream.H:499
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
constexpr char nl
The newline '\n' character (0x0a).
Definition Ostream.H:50
dictionary dict
#define forAll(list, i)
Loop across all elements in list.
Definition stdFoam.H:299