DESModelRegions.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) 2013-2015 OpenFOAM Foundation
9  Copyright (C) 2015-2025 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 \*---------------------------------------------------------------------------*/
28 
29 #include "DESModelRegions.H"
30 #include "volFields.H"
31 #include "DESModelBase.H"
32 #include "turbulenceModel.H"
34 
35 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
36 
37 namespace Foam
38 {
39 namespace functionObjects
40 {
41  defineTypeNameAndDebug(DESModelRegions, 0);
43 }
44 }
45 
46 
47 // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
48 
50 {
51  writeHeader(os, "DES model region coverage (% volume)");
52 
53  writeCommented(os, "Time");
54  writeTabbed(os, "LES");
55  writeTabbed(os, "RAS");
56  os << endl;
57 }
58 
59 
60 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
61 
63 (
64  const word& name,
65  const Time& runTime,
66  const dictionary& dict
67 )
68 :
70  writeFile(obr_, name, typeName, dict),
71  resultName_(scopedName("regions"))
72 {
73  read(dict);
74 
75  auto tmodelRegions = tmp<volScalarField>::New
76  (
77  IOobject
78  (
80  time_.timeName(),
81  mesh_,
85  ),
86  mesh_,
88  );
89 
90  store(resultName_, tmodelRegions);
91 
93 }
94 
95 
96 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
97 
99 {
103  dict.readIfPresent("result", resultName_);
104 
105  return true;
106 }
107 
108 
110 {
111  Log << type() << " " << name() << " execute:" << nl;
112 
113  auto& regions = lookupObjectRef<volScalarField>(resultName_);
114 
115  if
116  (
117  const auto* modelp
118  = cfindObject<DESModelBase>(turbulenceModel::propertiesName)
119  )
120  {
121  regions == (*modelp).LESRegion();
122 
123  const scalar prc =
124  gWeightedAverage(mesh_.V(), regions.primitiveField())*100.0;
125 
126  file() << time_.value()
127  << token::TAB << prc
128  << token::TAB << 100.0 - prc
129  << endl;
130 
131  Log << " LES = " << prc << " % (volume)" << nl
132  << " RAS = " << 100.0 - prc << " % (volume)" << nl
133  << endl;
134  }
135  else
136  {
137  Log << " No DES turbulence model found in database" << nl
138  << endl;
139  }
140 
141  return true;
142 }
143 
144 
146 {
147  const auto& regions = lookupObject<volScalarField>(resultName_);
148 
149  Log << type() << " " << name() << " output:" << nl
150  << " writing field " << regions.name() << nl
151  << endl;
152 
153  regions.write();
154 
155  return true;
156 }
157 
158 
159 // ************************************************************************* //
virtual OFstream & file()
Return access to the file (if only 1)
Definition: writeFile.C:270
dictionary dict
Type gWeightedAverage(const UList< scalar > &weights, const UList< Type > &fld, const label comm)
The global weighted average of a field, using the mag() of the weights.
defineTypeNameAndDebug(ObukhovLength, 0)
virtual void writeHeader(Ostream &os, const string &str) const
Write a commented header to stream.
Definition: writeFile.C:344
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
virtual bool read(const dictionary &)
Read the DESModelRegions data.
Tab [isspace].
Definition: token.H:129
constexpr char nl
The newline &#39;\n&#39; character (0x0a)
Definition: Ostream.H:50
virtual bool write()
Calculate the DESModelRegions and write.
engineTime & runTime
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:529
Ignore writing from objectRegistry::writeObject()
const dimensionSet dimless
Dimensionless.
Abstract base-class for Time/database function objects.
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:69
Macros for easy insertion into run-time selection tables.
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
Definition: POSIX.C:801
virtual void writeCommented(Ostream &os, const string &str) const
Write a commented string to stream.
Definition: writeFile.C:318
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
Definition: exprTraits.C:127
static const word propertiesName
Default name of the turbulence properties dictionary.
A class for handling words, derived from Foam::string.
Definition: word.H:63
Computes an indicator field for detached eddy simulation (DES) turbulence calculations, where the values of the indicator mean:
bool store(word &fieldName, const tmp< ObjectType > &tfield, bool cacheable=false)
Store the field in the (sub) objectRegistry under the given name.
static tmp< T > New(Args &&... args)
Construct tmp with forwarding arguments.
Definition: tmp.H:206
virtual bool write(const token &tok)=0
Write token to stream or otherwise handle it.
word resultName_
Name of DES indicator field.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:56
static word timeName(const scalar t, const int precision=precision_)
Return a time name for the given scalar time value formatted with the given precision.
Definition: Time.C:714
OBJstream os(runTime.globalPath()/outputName)
addToRunTimeSelectionTable(functionObject, ObukhovLength, dictionary)
virtual bool read(const dictionary &dict)
Read.
Definition: writeFile.C:240
virtual void writeFileHeader(Ostream &os) const
File header information.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
Nothing to be read.
#define Log
Definition: PDRblock.C:28
virtual bool read(const dictionary &dict)
Read optional controls.
Specialization of Foam::functionObject for an Foam::fvMesh, providing a reference to the Foam::fvMesh...
DESModelRegions(const word &name, const Time &runTime, const dictionary &dict)
Construct from Time and dictionary.
Base class for writing single files from the function objects.
Definition: writeFile.H:112
Defines the attributes of an object for which implicit objectRegistry management is supported...
Definition: IOobject.H:180
Request registration (bool: true)
const fvMesh & mesh_
Reference to the fvMesh.
Namespace for OpenFOAM.
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:127
virtual void writeTabbed(Ostream &os, const string &str) const
Write a tabbed string to stream.
Definition: writeFile.C:334
const Time & time_
Reference to the time database.