MappedFile.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) 2018-2021 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 "polyMesh.H"
29 #include "rawIOField.H"
30 
31 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
32 
33 template<class Type>
35 (
36  const polyPatch& pp,
37  const word& redirectType,
38  const word& entryName,
39  const dictionary& dict,
40  const bool faceValues
41 )
42 :
43  PatchFunction1<Type>(pp, entryName, dict, faceValues),
44  dictConstructed_(true),
45  setAverage_(dict.getOrDefault("setAverage", false)),
46  fieldTableName_(entryName),
47  perturb_(dict.getOrDefault<scalar>("perturb", 1e-5)),
48  pointsName_(dict.getOrDefault<word>("points", "points")),
49  mapMethod_
50  (
51  dict.getOrDefault<word>
52  (
53  "mapMethod",
54  "planarInterpolation"
55  )
56  ),
57  mapperPtr_(nullptr),
58  sampleTimes_(0),
59  startSampleTime_(-1),
60  startSampledValues_(0),
61  startAverage_(Zero),
62  endSampleTime_(-1),
63  endSampledValues_(0),
64  endAverage_(Zero),
65  offset_(Function1<Type>::NewIfPresent("offset", dict))
66 {
67  if
68  (
69  mapMethod_ != "planarInterpolation"
70  && mapMethod_ != "nearest"
71  )
72  {
74  << "mapMethod should be one of 'planarInterpolation'"
75  << ", 'nearest'" << exit(FatalIOError);
76  }
77 
78  dict.readIfPresent("fieldTable", fieldTableName_);
79 }
80 
81 
82 template<class Type>
84 (
85  const polyPatch& pp,
86  const word& entryName,
87  const dictionary& dict,
88  const word& fieldTableName,
89  const bool faceValues
90 )
91 :
92  PatchFunction1<Type>(pp, entryName, dict, faceValues),
93  dictConstructed_(false),
94  setAverage_(dict.getOrDefault("setAverage", false)),
95  fieldTableName_(fieldTableName),
96  perturb_(dict.getOrDefault<scalar>("perturb", 1e-5)),
97  pointsName_(dict.getOrDefault<word>("points", "points")),
98  mapMethod_
99  (
100  dict.getOrDefault<word>
101  (
102  "mapMethod",
103  "planarInterpolation"
104  )
105  ),
106  mapperPtr_(nullptr),
107  sampleTimes_(0),
108  startSampleTime_(-1),
109  startSampledValues_(0),
110  startAverage_(Zero),
111  endSampleTime_(-1),
112  endSampledValues_(0),
113  endAverage_(Zero),
114  offset_(Function1<Type>::NewIfPresent("offset", dict))
115 {
116  if
117  (
118  mapMethod_ != "planarInterpolation"
119  && mapMethod_ != "nearest"
120  )
121  {
123  << "mapMethod should be one of 'planarInterpolation'"
124  << ", 'nearest'" << exit(FatalIOError);
125  }
126 }
127 
128 
129 template<class Type>
131 (
132  const MappedFile<Type>& rhs
133 )
134 :
135  MappedFile<Type>(rhs, rhs.patch())
136 {}
137 
138 
139 template<class Type>
141 (
142  const MappedFile<Type>& rhs,
143  const polyPatch& pp
144 )
145 :
146  PatchFunction1<Type>(rhs, pp),
147  dictConstructed_(rhs.dictConstructed_),
148  setAverage_(rhs.setAverage_),
149  fieldTableName_(rhs.fieldTableName_),
150  perturb_(rhs.perturb_),
151  pointsName_(rhs.pointsName_),
152  mapMethod_(rhs.mapMethod_),
153  mapperPtr_(rhs.mapperPtr_.clone()),
154  sampleTimes_(rhs.sampleTimes_),
155  startSampleTime_(rhs.startSampleTime_),
156  startSampledValues_(rhs.startSampledValues_),
157  startAverage_(rhs.startAverage_),
158  endSampleTime_(rhs.endSampleTime_),
159  endSampledValues_(rhs.endSampledValues_),
160  endAverage_(rhs.endAverage_),
161  offset_(rhs.offset_.clone())
162 {}
163 
164 
165 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
166 
167 template<class Type>
169 (
170  const FieldMapper& mapper
171 )
172 {
174 
175  if (startSampledValues_.size())
176  {
177  startSampledValues_.autoMap(mapper);
178  }
179 
180  if (endSampledValues_.size())
181  {
182  endSampledValues_.autoMap(mapper);
183  }
184 
185  // Clear interpolator
186  mapperPtr_.clear();
187  startSampleTime_ = -1;
188  endSampleTime_ = -1;
189 }
190 
191 
192 template<class Type>
194 (
195  const PatchFunction1<Type>& pf1,
196  const labelList& addr
197 )
198 {
199  PatchFunction1<Type>::rmap(pf1, addr);
200 
202  refCast<const PatchFunction1Types::MappedFile<Type>>(pf1);
203 
204  if (tiptf.startSampledValues_.size())
205  {
206  startSampledValues_.setSize(this->size());
207  startSampledValues_.rmap(tiptf.startSampledValues_, addr);
208  }
209 
210  if (tiptf.endSampledValues_.size())
211  {
212  endSampledValues_.setSize(this->size());
213  endSampledValues_.rmap(tiptf.endSampledValues_, addr);
214  }
215 
216  // Clear interpolator
217  mapperPtr_.clear();
218  startSampleTime_ = -1;
219  endSampleTime_ = -1;
220 }
221 
222 
223 template<class Type>
225 (
226  const scalar t
227 ) const
228 {
229  const polyMesh& mesh = this->patch_.boundaryMesh().mesh();
230  const Time& time = mesh.time();
231 
232  // Initialise
233  if (!mapperPtr_)
234  {
235  // Reread values and interpolate
236  const fileName samplePointsFile
237  (
238  time.globalPath()
239  /time.constant()
240  /"boundaryData"
241  /this->patch_.name()
242  /pointsName_
243  );
244 
245  IOobject io
246  (
247  samplePointsFile, // absolute path
248  time,
249  IOobject::MUST_READ,
250  IOobject::NO_WRITE,
251  false, // no need to register
252  true // is global object (currently not used)
253  );
254 
255  // Read data
256  const rawIOField<point> samplePoints(io, false);
257 
258  DebugInfo
259  << "Read " << samplePoints.size() << " sample points from "
260  << samplePointsFile << endl;
261 
262 
263  // tbd: run-time selection
264  bool nearestOnly =
265  (
266  !mapMethod_.empty()
267  && mapMethod_ != "planarInterpolation"
268  );
269 
270  // Allocate the interpolator
271  if (this->faceValues())
272  {
273  mapperPtr_.reset
274  (
276  (
277  samplePoints,
278  this->localPosition(this->patch_.faceCentres()),
279  perturb_,
280  nearestOnly
281  )
282  );
283  }
284  else
285  {
286  mapperPtr_.reset
287  (
289  (
290  samplePoints,
291  this->localPosition(this->patch_.localPoints()),
292  perturb_,
293  nearestOnly
294  )
295  );
296  }
297 
298 
299  // Read the times for which data is available
300  const fileName samplePointsDir = samplePointsFile.path();
301  sampleTimes_ = Time::findTimes(samplePointsDir);
302 
303  DebugInfo
304  << "In directory "
305  << samplePointsDir << " found times "
306  << pointToPointPlanarInterpolation::timeNames(sampleTimes_)
307  << endl;
308  }
309 
310 
311  // Find current time in sampleTimes
312  label lo = -1;
313  label hi = -1;
314 
315  bool foundTime = mapperPtr_().findTime
316  (
317  sampleTimes_,
318  startSampleTime_,
319  t, //mesh.time().value(),
320  lo,
321  hi
322  );
323 
324  if (!foundTime)
325  {
327  << "Cannot find starting sampling values for index "
328  << t << nl
329  << "Have sampling values for "
330  << pointToPointPlanarInterpolation::timeNames(sampleTimes_) << nl
331  << "In directory "
332  << time.constant()/"boundaryData"/this->patch_.name()
333  << "\n on patch " << this->patch_.name()
334  << " of field " << fieldTableName_
335  << exit(FatalError);
336  }
337 
338 
339  // Update sampled data fields.
340 
341  if (lo != startSampleTime_)
342  {
343  startSampleTime_ = lo;
344 
345  if (startSampleTime_ == endSampleTime_)
346  {
347  // No need to reread since are end values
348  if (debug)
349  {
350  Pout<< "checkTable : Setting startValues to (already read) "
351  << "boundaryData"
352  /this->patch_.name()
353  /sampleTimes_[startSampleTime_].name()
354  << endl;
355  }
356  startSampledValues_ = endSampledValues_;
357  startAverage_ = endAverage_;
358  }
359  else
360  {
361  if (debug)
362  {
363  Pout<< "checkTable : Reading startValues from "
364  << "boundaryData"
365  /this->patch_.name()
366  /sampleTimes_[lo].name()
367  << endl;
368  }
369 
370 
371  // Reread values and interpolate
372  const fileName valsFile
373  (
374  time.globalPath()
375  /time.constant()
376  /"boundaryData"
377  /this->patch_.name()
378  /sampleTimes_[startSampleTime_].name()
379  /fieldTableName_
380  );
381 
382  IOobject io
383  (
384  valsFile, // absolute path
385  time,
386  IOobject::MUST_READ,
387  IOobject::NO_WRITE,
388  false, // no need to register
389  true // is global object (currently not used)
390  );
391 
392  const rawIOField<Type> vals(io, setAverage_);
393  if (setAverage_)
394  {
395  startAverage_ = vals.average();
396  }
397 
398  if (vals.size() != mapperPtr_().sourceSize())
399  {
401  << "Number of values (" << vals.size()
402  << ") differs from the number of points ("
403  << mapperPtr_().sourceSize()
404  << ") in file " << valsFile << exit(FatalError);
405  }
406 
407  startSampledValues_ = mapperPtr_().interpolate(vals);
408  }
409  }
410 
411  if (hi != endSampleTime_)
412  {
413  endSampleTime_ = hi;
414 
415  if (endSampleTime_ == -1)
416  {
417  // endTime no longer valid. Might as well clear endValues.
418  if (debug)
419  {
420  Pout<< "checkTable : Clearing endValues" << endl;
421  }
422  endSampledValues_.clear();
423  }
424  else
425  {
426  if (debug)
427  {
428  Pout<< "checkTable : Reading endValues from "
429  << "boundaryData"
430  /this->patch_.name()
431  /sampleTimes_[endSampleTime_].name()
432  << endl;
433  }
434 
435  // Reread values and interpolate
436  fileName valsFile
437  (
438  time.globalPath()
439  /time.constant()
440  /"boundaryData"
441  /this->patch_.name()
442  /sampleTimes_[endSampleTime_].name()
443  /fieldTableName_
444  );
445 
446  IOobject io
447  (
448  valsFile, // absolute path
449  time,
450  IOobject::MUST_READ,
451  IOobject::NO_WRITE,
452  false, // no need to register
453  true // is global object (currently not used)
454  );
455 
456  const rawIOField<Type> vals(io, setAverage_);
457  if (setAverage_)
458  {
459  endAverage_ = vals.average();
460  }
461 
462  if (vals.size() != mapperPtr_().sourceSize())
463  {
465  << "Number of values (" << vals.size()
466  << ") differs from the number of points ("
467  << mapperPtr_().sourceSize()
468  << ") in file " << valsFile << exit(FatalError);
469  }
470 
471  endSampledValues_ = mapperPtr_().interpolate(vals);
472  }
473  }
474 }
475 
476 
477 template<class Type>
480 (
481  const scalar x
482 ) const
483 {
484  checkTable(x);
485 
486  auto tfld = tmp<Field<Type>>::New(startSampledValues_.size());
487  auto& fld = tfld.ref();
488  Type wantedAverage;
489 
490  if (endSampleTime_ == -1)
491  {
492  // Only start value
493  if (debug)
494  {
495  Pout<< "MappedFile<Type>::value : Sampled, non-interpolated values"
496  << " from start time:"
497  << sampleTimes_[startSampleTime_].name() << nl;
498  }
499 
500  fld = startSampledValues_;
501  wantedAverage = startAverage_;
502  }
503  else
504  {
505  scalar start = sampleTimes_[startSampleTime_].value();
506  scalar end = sampleTimes_[endSampleTime_].value();
507 
508  scalar s = (x - start)/(end - start);
509 
510  if (debug)
511  {
512  Pout<< "MappedFile<Type>::value : Sampled, interpolated values"
513  << " between start time:"
514  << sampleTimes_[startSampleTime_].name()
515  << " and end time:" << sampleTimes_[endSampleTime_].name()
516  << " with weight:" << s << endl;
517  }
518 
519  fld = ((1 - s)*startSampledValues_ + s*endSampledValues_);
520  wantedAverage = (1 - s)*startAverage_ + s*endAverage_;
521  }
522 
523  // Enforce average. Either by scaling (if scaling factor > 0.5) or by
524  // offsetting.
525  if (setAverage_)
526  {
527  Type averagePsi;
528  if (this->faceValues())
529  {
530  const scalarField magSf(mag(this->patch_.faceAreas()));
531  averagePsi = gSum(magSf*fld)/gSum(magSf);
532  }
533  else
534  {
535  averagePsi = gAverage(fld);
536  }
537 
538  if (debug)
539  {
540  Pout<< "MappedFile<Type>::value :"
541  << " actual average:" << averagePsi
542  << " wanted average:" << wantedAverage
543  << endl;
544  }
545 
546  if (mag(averagePsi) < VSMALL)
547  {
548  // Field too small to scale. Offset instead.
549  const Type offset = wantedAverage - averagePsi;
550  if (debug)
551  {
552  Pout<< "MappedFile<Type>::value :"
553  << " offsetting with:" << offset << endl;
554  }
555  fld += offset;
556  }
557  else
558  {
559  const scalar scale = mag(wantedAverage)/mag(averagePsi);
560 
561  if (debug)
562  {
563  Pout<< "MappedFile<Type>::value :"
564  << " scaling with:" << scale << endl;
565  }
566  fld *= scale;
567  }
568  }
569 
570  // Apply offset to mapped values
571  if (offset_)
572  {
573  fld += offset_->value(x);
574  }
575 
576  if (debug)
577  {
578  Pout<< "MappedFile<Type>::value : set fixedValue to min:" << gMin(fld)
579  << " max:" << gMax(fld)
580  << " avg:" << gAverage(fld) << endl;
581  }
582 
583  return this->transform(tfld);
584 }
585 
586 
587 template<class Type>
590 (
591  const scalar x1,
592  const scalar x2
593 ) const
594 {
596  return nullptr;
597 }
598 
599 
600 template<class Type>
602 (
603  Ostream& os
604 ) const
605 {
606  if (setAverage_)
607  {
608  os.writeEntry("setAverage", setAverage_);
609  }
610 
611  os.writeEntryIfDifferent<scalar>("perturb", 1e-5, perturb_);
612 
613  os.writeEntryIfDifferent<word>("points", "points", pointsName_);
614 
615  os.writeEntryIfDifferent<word>
616  (
617  "mapMethod",
618  "planarInterpolation",
619  mapMethod_
620  );
621 
622  if (offset_)
623  {
624  offset_->writeData(os);
625  }
626 }
627 
628 
629 template<class Type>
631 (
632  Ostream& os
633 ) const
634 {
636 
637  // Check if field name explicitly provided
638  // (e.g. through timeVaryingMapped bc)
639  if (dictConstructed_)
640  {
641  os.writeEntry(this->name(), type());
642 
644  (
645  "fieldTable",
646  this->name(),
647  fieldTableName_
648  );
649 
650  os.beginBlock(word(this->name() + "Coeffs"));
651  writeEntries(os);
652  os.endBlock();
653  }
654  else
655  {
656  writeEntries(os);
657  }
658 }
659 
660 
661 // ************************************************************************* //
Foam::expressions::patchExpr::debug
int debug
Static debugging option.
Foam::PatchFunction1Types::MappedFile::autoMap
virtual void autoMap(const FieldMapper &mapper)
Map (and resize as needed) from self given a mapping object.
Definition: MappedFile.C:169
Foam::Ostream::writeEntryIfDifferent
Ostream & writeEntryIfDifferent(const word &key, const T &value1, const T &value2)
Write a keyword/value entry only when the two values differ.
Definition: Ostream.H:248
Foam::IOobject
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition: IOobject.H:169
Foam::Time
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:73
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::fileName
A class for handling file names.
Definition: fileName.H:73
rawIOField.H
s
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Definition: gmvOutputSpray.H:25
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:61
Foam::Zero
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
Foam::gAverage
Type gAverage(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:604
Foam::PatchFunction1Types::MappedFile::writeData
virtual void writeData(Ostream &os) const
Write in dictionary format.
Definition: MappedFile.C:631
Foam::fileName::name
static std::string name(const std::string &str)
Return basename (part beyond last /), including its extension.
Definition: fileNameI.H:199
writeData
const bool writeData(pdfDictionary.get< bool >("writeData"))
Foam::FieldMapper
Abstract base class to hold the Field mapping addressing and weights.
Definition: FieldMapper.H:49
Foam::pointToPointPlanarInterpolation
Interpolates between two sets of unstructured points using 2D Delaunay triangulation....
Definition: pointToPointPlanarInterpolation.H:53
Foam::FatalIOError
IOerror FatalIOError
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:369
Foam::gSum
Type gSum(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:594
Foam::Pout
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
Foam::transform
dimensionSet transform(const dimensionSet &ds)
Return the argument; transformations do not change the dimensions.
Definition: dimensionSet.C:521
polyMesh.H
Foam::Function1
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
Definition: propellerInfo.H:291
Foam::polyMesh
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:77
NotImplemented
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:517
Foam::Field< scalar >
Foam::rawIOField
Like IOField but falls back to raw IFstream if no header found. Optionally reads average value....
Definition: rawIOField.H:52
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:68
Foam::OSstream::name
virtual const fileName & name() const
Get the name of the stream.
Definition: OSstream.H:107
fld
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< ' ';}gmvFile<< nl;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Definition: gmvOutputLagrangian.H:23
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::PatchFunction1Types::MappedFile::integrate
virtual tmp< Field< Type > > integrate(const scalar x1, const scalar x2) const
Integrate between two values.
Definition: MappedFile.C:590
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
os
OBJstream os(runTime.globalPath()/outputName)
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::PatchFunction1
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
Definition: PatchFunction1.H:60
stdFoam::end
constexpr auto end(C &c) -> decltype(c.end())
Return iterator to the end of the container c.
Definition: stdFoam.H:121
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
Foam::PatchFunction1Types::MappedFile
Patch value mapping from a set of values stored in a file and a set of unstructured points using the ...
Definition: MappedFile.H:129
Foam::New
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
Definition: DimensionedFieldReuseFunctions.H:105
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
DebugInfo
#define DebugInfo
Report an information message using Foam::Info.
Definition: messageStream.H:382
Foam::nl
constexpr char nl
Definition: Ostream.H:404
Foam::List< label >
Foam::PatchFunction1Types::MappedFile::rmap
virtual void rmap(const PatchFunction1< Type > &pf1, const labelList &addr)
Reverse map the given PatchFunction1 onto this PatchFunction1.
Definition: MappedFile.C:194
Foam::mag
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Foam::constant::electromagnetic::e
const dimensionedScalar e
Elementary charge.
Definition: createFields.H:11
x
x
Definition: LISASMDCalcMethod2.H:52
Foam::roots::type
type
Types of root.
Definition: Roots.H:54
Foam::TimePaths::globalPath
fileName globalPath() const
Return global path for the case.
Definition: TimePathsI.H:80
Foam::name
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
Definition: exprTraits.C:59
Foam::PatchFunction1Types::MappedFile::MappedFile
MappedFile(const polyPatch &pp, const word &redirectType, const word &entryName, const dictionary &dict, const bool faceValues=true)
Construct from entry name and dictionary.
Definition: MappedFile.C:35
Foam::PatchFunction1Types::MappedFile::writeEntries
void writeEntries(Ostream &os) const
Write coefficient entries in dictionary format.
Definition: MappedFile.C:602
FatalIOErrorInFunction
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
Definition: error.H:473
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::gMin
Type gMin(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:593
Foam::TimePaths::constant
const word & constant() const
Return constant name.
Definition: TimePathsI.H:96
Foam::gMax
Type gMax(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:592
Foam::PatchFunction1Types::MappedFile::value
virtual tmp< Field< Type > > value(const scalar) const
Return MappedFile value.
Definition: MappedFile.C:480