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 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 
35 Foam::functionObjects::solverFieldSelection::solverFieldSelection
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
47  << abort(FatalError);
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.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  newSelection.append
73  (
74  fieldInfo(wordRe(solvedField), fi.component())
75  );
76  fi.found() = true;
77  }
78  }
79  }
80 
81  selection_.transfer(newSelection);
82 
84  {
86  << "Valid solver fields are: " << solvedFieldNames;
87  }
88 
89  return selection_ != oldSet;
90 }
91 
92 
93 // ************************************************************************* //
Foam::functionObjects::solverFieldSelection::updateSelection
virtual bool updateSelection()
Update the selection using current contents of obr_.
Definition: solverFieldSelection.C:54
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::DynamicList
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects.
Definition: DynamicList.H:55
Foam::functionObjects::fieldInfo::name
const wordRe & name() const
Definition: fieldInfo.H:107
Foam::functionObjects::fieldInfo
Helper class to store a wordRe and label used by Foam::functionObjects::fieldSelection.
Definition: fieldInfo.H:57
volMesh.H
Foam::functionObjects::fieldSelection::checkSelection
virtual bool checkSelection()
Check that all requested fielda have been found.
Definition: fieldSelection.C:159
solverFieldSelection.H
Foam::List::append
void append(const T &val)
Append an element at the end of the list.
Definition: ListI.H:175
Foam::wordRe
A wordRe is a Foam::word, but can contain a regular expression for matching words or strings.
Definition: wordRe.H:80
Foam::functionObjects::fieldSelection
Helper class to manage field selections.
Definition: fieldSelection.H:63
Foam::objectRegistry
Registry of regIOobjects.
Definition: objectRegistry.H:60
Foam::functionObjects::fieldSelection::obr_
const objectRegistry & obr_
Reference to the database.
Definition: fieldSelection.H:80
Foam::List::transfer
void transfer(List< T > &list)
Definition: List.C:456
Foam::FatalError
error FatalError
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:85
fvMesh.H
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:144
Foam::functionObjects::fieldInfo::found
Switch & found() const
Definition: fieldInfo.H:117
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
Foam::List< fieldInfo >
Foam::functionObjects::fieldSelection::selection_
List< fieldInfo > selection_
Current field selection.
Definition: fieldSelection.H:86
Foam::functionObjects::fieldInfo::component
label component() const
Definition: fieldInfo.H:112
Foam::dictionary::sortedToc
wordList sortedToc() const
Return the sorted table of contents.
Definition: dictionary.C:616
WarningInFunction
#define WarningInFunction
Report a warning using Foam::Warning.
Definition: messageStream.H:328
Foam::wordRe::match
bool match(const std::string &text, bool literal=false) const
Smart match as regular expression or as a string.
Definition: wordReI.H:174
fvPatchField.H