solverFieldSelection.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) 2017-2023 OpenCFD Ltd.
9 -------------------------------------------------------------------------------
10 License
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 
28 #include "solverFieldSelection.H"
29 #include "fvMesh.H"
30 #include "volMesh.H"
31 #include "fvPatchField.H"
32 
33 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
34 
36 (
37  const objectRegistry& obr,
38  const bool includeComponents
39 )
40 :
41  fieldSelection(obr, includeComponents)
42 {
43  if (!isA<fvMesh>(obr))
44  {
46  << "Registry must be of type " << fvMesh::typeName
48  }
49 }
50 
51 
52 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
53 
55 {
56  List<fieldInfo> oldSet(std::move(selection_));
57 
58  DynamicList<fieldInfo> newSelection(oldSet.size());
59 
60  const fvMesh& mesh = static_cast<const fvMesh&>(obr_);
61 
62  const dictionary& solverDict = mesh.data().solverPerformanceDict();
63 
64  const wordList solvedFieldNames(solverDict.sortedToc());
65 
66  for (const fieldInfo& fi : *this)
67  {
68  for (const word& solvedField : solvedFieldNames)
69  {
70  if (fi.name().match(solvedField))
71  {
72  fi.found(true);
73  newSelection.emplace_back(wordRe(solvedField), fi.component());
74  }
75  }
76  }
77 
78  selection_.transfer(newSelection);
79 
81  {
83  << "Valid solver fields are: " << solvedFieldNames;
84  }
85 
86  return selection_ != oldSet;
87 }
88 
89 
90 // ************************************************************************* //
virtual bool checkSelection()
Check that all requested fielda have been found.
solverFieldSelection(const solverFieldSelection &)=delete
No copy construct.
error FatalError
Error stream (stdout output on all processes), with additional &#39;FOAM FATAL ERROR&#39; header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:598
bool found(const T &val, label pos=0) const
Same as contains()
Definition: UList.H:879
virtual bool updateSelection()
Update the selection using current contents of obr_.
dynamicFvMesh & mesh
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
Definition: DynamicList.H:51
A class for handling words, derived from Foam::string.
Definition: word.H:63
errorManip< error > abort(error &err)
Definition: errorManip.H:139
A wordRe is a Foam::word, but can contain a regular expression for matching words or strings...
Definition: wordRe.H:78
#define WarningInFunction
Report a warning using Foam::Warning.
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:78
Helper class to manage field selections.
Registry of regIOobjects.
wordList sortedToc() const
Return the sorted table of contents.
Definition: dictionary.C:601