39 #define checkField(fld1, fld2, op) \ 40 if (&(fld1).mesh() != &(fld2).mesh()) \ 42 FatalErrorInFunction \ 43 << "Different mesh for fields " \ 44 << (fld1).name() << " and " << (fld2).name() \ 45 << " during operation " << op \ 46 << abort(FatalError); \ 52 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
55 const dictionary&
dict 58 Internal::readField(
dict,
"internalField");
60 boundaryField_.readField(*
this,
dict.subDict(
"boundaryField"));
64 if (
dict.readIfPresent(
"referenceLevel", refLevel))
67 this->
field() += refLevel;
70 forAll(boundaryField_, patchi)
72 boundaryField_[patchi] == boundaryField_[patchi] + refLevel;
78 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
83 localIOdictionary::readContents
91 IOobjectOption::MUST_READ,
92 IOobjectOption::NO_WRITE,
93 IOobjectOption::NO_REGISTER
105 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
108 if (this->isReadRequired())
111 <<
"The readOption MUST_READ or READ_MODIFIED" 112 <<
" suggests that a read constructor for field " << this->
name()
113 <<
" would be more appropriate." <<
endl;
117 this->isReadOptional()
118 && this->
template typeHeaderOk<this_type>(
true)
122 readOldTimeIfPresent();
131 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
140 IOobjectOption::LAZY_READ,
141 IOobjectOption::AUTO_WRITE,
142 this->registerObject()
147 field0.template typeHeaderOk<this_type>(
true)
151 <<
"Reading old time level for field" <<
nl << this->info() <<
endl;
153 field0Ptr_ = std::make_unique<this_type>(field0, this->
mesh());
158 field0Ptr_->oriented() = this->oriented();
160 field0Ptr_->timeIndex_ = timeIndex_ - 1;
162 if (!field0Ptr_->readOldTimeIfPresent())
164 field0Ptr_->oldTime();
176 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
182 const word& patchFieldType
185 Internal(
io,
mesh, dims, false),
190 <<
"Creating" <<
nl << this->info() <<
endl;
196 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
206 Internal(
io,
mesh, dims, false),
208 boundaryField_(
mesh.
boundary(), *this, patchFieldTypes, actualPatchTypes)
211 <<
"Creating" <<
nl << this->info() <<
endl;
217 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
224 const word& patchFieldType
227 Internal(
io,
mesh, value, dims, false),
232 <<
"Creating" <<
nl << this->info() <<
endl;
234 boundaryField_ == value;
240 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
251 Internal(
io,
mesh, value, dims, false),
253 boundaryField_(
mesh.
boundary(), *this, patchFieldTypes, actualPatchTypes)
256 <<
"Creating" <<
nl << this->info() <<
endl;
258 boundaryField_ == value;
264 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
270 const word& patchFieldType
284 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
306 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
310 const Internal& diField,
311 const PtrList<PatchField<Type>>& ptfl
314 Internal(
io, diField),
319 <<
"Copy construct from components" <<
nl << this->info() <<
endl;
325 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
330 const PtrList<PatchField<Type>>& ptfl
333 Internal(
io,
std::move(diField)),
338 <<
"Move construct from components" <<
nl << this->info() <<
endl;
344 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
349 const PtrList<PatchField<Type>>& ptfl
352 Internal(
io, tfield),
357 <<
"Construct from tmp internalField" <<
nl << this->info() <<
endl;
363 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
366 const Internal& diField,
367 const PtrList<PatchField<Type>>& ptfl
375 <<
"Copy construct from components" <<
nl << this->info() <<
endl;
381 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
385 const PtrList<PatchField<Type>>& ptfl
388 Internal(
std::move(diField)),
393 <<
"Move construct from components" <<
nl << this->info() <<
endl;
399 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
406 const word& patchFieldType
409 Internal(
io,
mesh, dims, iField),
414 <<
"Copy construct from primitive field" <<
nl << this->info() <<
endl;
420 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
427 const word& patchFieldType
430 Internal(
io,
mesh, dims,
std::move(iField)),
435 <<
"Move construct from primitive field" <<
nl << this->info() <<
endl;
441 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
448 const word& patchFieldType
451 Internal(
io,
mesh, dims, tfield),
456 <<
"Construct from tmp primitive field" <<
nl << this->info() <<
endl;
462 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
469 const PtrList<PatchField<Type>>& ptfl
472 Internal(
io,
mesh, dims, iField),
477 <<
"Copy construct from components" <<
nl << this->info() <<
endl;
483 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
490 const PtrList<PatchField<Type>>& ptfl
493 Internal(
io,
mesh, dims,
std::move(iField)),
498 <<
"Move construct from components" <<
nl << this->info() <<
endl;
504 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
511 const PtrList<PatchField<Type>>& ptfl
514 Internal(
io,
mesh, dims, tfield),
519 <<
"Construct from tmp internalField" <<
nl << this->info() <<
endl;
525 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
530 const bool readOldTime
538 <<
"Read construct" <<
nl << this->info() <<
endl;
540 if (!this->isAnyRead())
545 <<
"Had readOption NO_READ for field " 546 << this->
name() <<
", but constructor always reads field!" 554 readOldTimeIfPresent();
558 <<
"Finishing read-construction" <<
nl << this->info() <<
endl;
562 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
577 <<
"Finishing dictionary-construct" <<
nl << this->info() <<
endl;
581 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
589 boundaryField_(*this, gf.boundaryField_)
592 <<
"Copy construct" <<
nl << this->info() <<
endl;
596 field0Ptr_ = std::make_unique<this_type>(*gf.field0Ptr_);
599 this->writeOpt(IOobjectOption::NO_WRITE);
603 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
609 Internal(tgf.constCast(), tgf.movable()),
611 boundaryField_(*this, tgf().boundaryField_)
614 <<
"Constructing from tmp" <<
nl << this->info() <<
endl;
616 this->writeOpt(IOobjectOption::NO_WRITE);
622 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
631 boundaryField_(*this, gf.boundaryField_)
634 <<
"Copy construct, resetting IO params" <<
nl 635 << this->info() <<
endl;
639 field0Ptr_ = std::make_unique<this_type>
648 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
652 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf
655 Internal(
io, tgf.constCast(), tgf.movable()),
657 boundaryField_(*this, tgf().boundaryField_)
660 <<
"Constructing from tmp resetting IO params" <<
nl 661 << this->info() <<
endl;
669 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
676 Internal(newName, gf),
678 boundaryField_(*this, gf.boundaryField_)
681 <<
"Copy construct, resetting name" <<
nl 682 << this->info() <<
endl;
686 field0Ptr_ = std::make_unique<this_type>
695 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
699 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf
702 Internal(newName, tgf.constCast(), tgf.movable()),
704 boundaryField_(*this, tgf().boundaryField_)
707 <<
"Constructing from tmp resetting name" <<
nl 708 << this->info() <<
endl;
714 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
719 const word& patchFieldType
724 boundaryField_(this->
mesh().
boundary(), *this, patchFieldType)
727 <<
"Copy construct, resetting IO params" <<
nl 728 << this->info() <<
endl;
730 boundaryField_ == gf.boundaryField_;
734 field0Ptr_ = std::make_unique<this_type>
743 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
747 const GeometricField<Type, PatchField, GeoMesh>& gf,
763 <<
"Copy construct, resetting IO params and patch types" <<
nl 764 << this->info() <<
endl;
766 boundaryField_ == gf.boundaryField_;
770 field0Ptr_ = std::make_unique<this_type>
779 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
783 const GeometricField<Type, PatchField, GeoMesh>& gf,
785 const word& patchFieldType
790 boundaryField_(*this, gf.boundaryField_,
patchIDs, patchFieldType)
793 <<
"Copy construct, resetting IO params and setting patchFieldType " 794 <<
"for patchIDs" <<
nl 795 << this->info() <<
endl;
799 field0Ptr_ = std::make_unique<this_type>
808 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
812 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf,
817 Internal(
io, tgf.constCast(), tgf.movable()),
828 <<
"Constructing from tmp resetting IO params and patch types" <<
nl 829 << this->info() <<
endl;
831 boundaryField_ == tgf().boundaryField_;
837 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
847 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
867 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
872 const bool updateAccessTime
875 if (updateAccessTime)
884 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
889 const bool updateAccessTime
892 if (updateAccessTime)
901 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
906 const bool updateAccessTime
909 if (updateAccessTime)
914 return boundaryField_;
918 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
922 return (field0Ptr_ ? (field0Ptr_->nOldTimes() + 1) : 0);
926 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
932 && timeIndex_ != this->time().
timeIndex()
933 && !this->
name().ends_with(
"_0")
937 timeIndex_ = this->time().timeIndex();
945 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
950 field0Ptr_->storeOldTime();
953 <<
"Storing old time field for field" <<
nl << this->info() <<
endl;
955 *field0Ptr_ == *
this;
956 field0Ptr_->timeIndex_ = timeIndex_;
958 if (field0Ptr_->field0Ptr_)
960 field0Ptr_->writeOpt(this->writeOpt());
966 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
972 field0Ptr_ = std::make_unique<this_type>
979 IOobjectOption::NO_READ,
980 IOobjectOption::NO_WRITE,
981 this->registerObject()
989 <<
"created old time field " << field0Ptr_->info() <<
endl;
993 error::printStack(
Info);
1006 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1017 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1020 if (!fieldPrevIterPtr_)
1023 <<
"Allocating previous iteration field" <<
nl 1024 << this->info() <<
endl;
1026 fieldPrevIterPtr_ = std::make_unique<this_type>
1028 this->
name() +
"PrevIter",
1034 *fieldPrevIterPtr_ == *
this;
1039 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1043 if (!fieldPrevIterPtr_)
1046 <<
"previous iteration field" <<
endl << this->info() <<
endl 1048 <<
" Use field.storePrevIter() at start of iteration." 1052 return *fieldPrevIterPtr_;
1056 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1059 field0Ptr_.reset(
nullptr);
1060 fieldPrevIterPtr_.reset(
nullptr);
1064 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1070 this->setUpToDate();
1073 boundaryField_.evaluate();
1077 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1083 this->setUpToDate();
1086 boundaryField_.evaluateLocal();
1090 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1096 bool needRef =
true;
1098 for (
const auto& pf : boundaryField_)
1100 if (pf.fixesValue())
1111 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1121 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1126 if (this->
mesh().data().isFinalIteration())
1131 scalar relaxCoeff = 1;
1133 if (this->
mesh().relaxField(
name, relaxCoeff))
1140 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1148 return this->
name() +
"Final";
1151 return this->
name();
1155 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1169 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1173 this->internalField().writeData(
os,
"internalField");
1175 this->boundaryField().writeEntry(
"boundaryField",
os);
1184 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1190 this->
name() +
".T()",
1195 Foam::T(tresult.ref().primitiveFieldRef(), primitiveField());
1196 Foam::T(tresult.ref().boundaryFieldRef(), boundaryField());
1202 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1224 Foam::component(tresult.ref().primitiveFieldRef(), primitiveField(), d);
1225 Foam::component(tresult.ref().boundaryFieldRef(), boundaryField(), d);
1231 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1235 const GeometricField
1237 typename GeometricField<Type, PatchField, GeoMesh>::cmptType,
1248 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1260 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1271 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1282 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1292 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1298 this->clamp_max(
upper.value());
1302 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1310 correctLocalBoundaryConditions();
1313 boundaryField().check();
1318 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1321 const GeometricField<Type, PatchField, GeoMesh>&
upper 1326 correctLocalBoundaryConditions();
1329 boundaryField().check();
1334 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1346 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1357 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1368 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1378 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1386 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1396 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1417 [](
const auto& pfld) {
return pfld.constraintOverride(); }
1422 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1425 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf
1428 const auto& gf = tgf();
1459 [](
const auto& pfld) {
return pfld.constraintOverride(); }
1464 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1467 const dimensioned<Type>& dt
1470 internalFieldRef() = dt;
1476 [](
const auto& pfld) {
return pfld.constraintOverride(); }
1481 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1484 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf
1487 const auto& gf = tgf();
1501 [](
const auto& pfld) {
return pfld.constraintOverride(); }
1506 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1509 const dimensioned<Type>& dt
1512 internalFieldRef() = dt;
1518 [](
const auto& pfld) {
return pfld.constraintOverride(); }
1523 #define COMPUTED_ASSIGNMENT(TYPE, op) \ 1525 template<class Type, template<class> class PatchField, class GeoMesh> \ 1526 void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \ 1528 const GeometricField<TYPE, PatchField, GeoMesh>& gf \ 1531 checkField(*this, gf, #op); \ 1533 internalFieldRef() op gf.internalField(); \ 1534 boundaryFieldRef() op gf.boundaryField(); \ 1536 boundaryFieldRef().evaluate_if \ 1538 [](const auto& pfld) { return pfld.constraintOverride(); } \ 1542 template<class Type, template<class> class PatchField, class GeoMesh> \ 1543 void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \ 1545 const tmp<GeometricField<TYPE, PatchField, GeoMesh>>& tgf \ 1548 operator op(tgf()); \ 1551 boundaryFieldRef().evaluate_if \ 1553 [](const auto& pfld) { return pfld.constraintOverride(); } \ 1557 template<class Type, template<class> class PatchField, class GeoMesh> \ 1558 void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \ 1560 const dimensioned<TYPE>& dt \ 1563 internalFieldRef() op dt; \ 1564 boundaryFieldRef() op dt.value(); \ 1566 boundaryFieldRef().evaluate_if \ 1568 [](const auto& pfld) { return pfld.constraintOverride(); } \ 1577 #undef COMPUTED_ASSIGNMENT 1582 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1594 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1601 tfld().writeData(
os);
void clamp_min(const Type &lower)
Impose lower (floor) clamp on the field values (in-place)
rho clamp_range(rhoMin[i], rhoMax[i])
const labelList patchIDs(pbm.indices(polyPatchNames, true))
void clamp_range(const dimensioned< MinMax< Type >> &range)
Clamp field values (in-place) to the specified range.
#define COMPUTED_ASSIGNMENT(TYPE, op)
const Type & value() const noexcept
Return const reference to value.
const GeometricField< Type, PatchField, GeoMesh > & oldTime() const
Return old time field.
const Internal::FieldType & primitiveField() const noexcept
Return a const-reference to the internal field values.
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Y [inertIndex] clamp_min(0)
void clearOldTimes()
Remove old-time and prev-iter fields.
Field< Type >::cmptType cmptType
Component type of the field elements.
const Internal & internalField() const noexcept
Return a const-reference to the dimensioned internal field.
constexpr char nl
The newline '\n' character (0x0a)
A min/max value pair with additional methods. In addition to conveniently storing values...
GeometricField(const IOobject &io, const Mesh &mesh, const dimensionSet &dims, const word &patchFieldType=PatchField< Type >::calculatedType())
Construct given IOobject, mesh, dimensions and patch type.
Ostream & endl(Ostream &os)
Add newline and flush stream.
tmp< GeometricField< cmptType, PatchField, GeoMesh > > component(const direction) const
Return a component of the field.
label nOldTimes() const noexcept
The number of old time fields stored.
void writeMinMax(Ostream &os, label comm=UPstream::worldComm) const
Helper function to write the min and max to an Ostream.
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
const T & min() const noexcept
The min value.
Generic GeometricField class.
Generic dimensioned Type class.
const dimensionSet dimless
Dimensionless.
bool writeData(Ostream &os) const
The writeData function (required by regIOobject)
word select(bool final) const
Select the final iteration parameters if final is true by returning the field name + "Final" otherwis...
conserve primitiveFieldRef()+
orientedType oriented() const noexcept
Return oriented type.
MinMax< label > minMax(const labelHashSet &set)
Find the min/max values of labelHashSet.
#define forAll(list, i)
Loop across all elements in list.
bool needReference() const
Does the field need a reference level for solution.
Dimension set for the base types, which can be used to implement rigorous dimension checking for alge...
void storeOldTimes() const
Store the old-time fields.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
Generic templated field type.
void readFields(const typename GeoFieldType::Mesh &mesh, const IOobjectList &objects, const NameMatchPredicate &selectedFields, DynamicList< regIOobject *> &storedObjects)
Read the selected GeometricFields of the templated type and store on the objectRegistry.
A class for handling words, derived from Foam::string.
#define DebugInFunction
Report an information message using Foam::Info.
bool returnReduceAnd(const bool value, const int communicator=UPstream::worldComm)
Perform logical (and) MPI Allreduce on a copy. Uses UPstream::reduceAnd.
void storeOldTime() const
Store the old-time field.
errorManip< error > abort(error &err)
Us boundaryFieldRef().evaluateCoupled< coupledFaPatch >()
void negate()
Negate the field inplace. See notes in Field.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Internal & internalFieldRef(const bool updateAccessTime=true)
Return a reference to the dimensioned internal field.
tmp< GeometricField< Type, PatchField, GeoMesh > > T() const
Return transpose (only if it is a tensor field)
int debug
Static debugging option.
void normalise()
Normalise the field inplace. See notes in Field.
const GeometricField< Type, PatchField, GeoMesh > & prevIter() const
Return previous iteration field.
OBJstream os(runTime.globalPath()/outputName)
string upper(const std::string &s)
Return string copy transformed with std::toupper on each character.
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
const dimensionSet & dimensions() const noexcept
Return dimensions.
virtual ~GeometricField()
Destructor.
Generic GeometricBoundaryField class.
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))
void clamp_max(const Type &upper)
Impose upper (ceiling) clamp on the field values (in-place)
List< word > wordList
List of word.
Internal::FieldType & primitiveFieldRef(const bool updateAccessTime=true)
Return a reference to the internal field values.
tmp< GeometricField< Type, PatchField, GeoMesh > > clone() const
Clone.
#define WarningInFunction
Report a warning using Foam::Warning.
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers...
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
meshDefDict readIfPresent("polyMeshPatches", polyPatchNames)
string lower(const std::string &s)
Return string copy transformed with std::tolower on each character.
Boundary & boundaryFieldRef(const bool updateAccessTime=true)
Return a reference to the boundary field.
void correctBoundaryConditions()
Correct boundary field.
messageStream Info
Information stream (stdout output on master, null elsewhere)
void storePrevIter() const
Store the field as the previous iteration value.
Generic mesh wrapper used by volMesh, surfaceMesh, pointMesh etc.
List< label > labelList
A List of labels.
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, IOobject::NO_REGISTER)
A class for managing temporary objects.
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
Defines the attributes of an object for which implicit objectRegistry management is supported...
void component(FieldField< Field, typename FieldField< Field, Type >::cmptType > &sf, const FieldField< Field, Type > &f, const direction d)
const Boundary & boundaryField() const noexcept
Return const-reference to the boundary field.
void relax()
Relax field (for steady-state solution).
void correctLocalBoundaryConditions()
Correct boundary conditions after a purely local operation.
#define checkField(fld1, fld2, op)
#define InfoInFunction
Report an information message using Foam::Info.
void replace(const direction d, const GeometricField< cmptType, PatchField, GeoMesh > &gcf)
Replace specified field component with content from another field.