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))
66 Field<Type>::operator+=(refLevel);
68 forAll(boundaryField_, patchi)
70 boundaryField_[patchi] == boundaryField_[patchi] + refLevel;
76 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
81 localIOdictionary::readContents
89 IOobjectOption::MUST_READ,
90 IOobjectOption::NO_WRITE,
91 IOobjectOption::NO_REGISTER
103 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
106 if (this->isReadRequired())
109 <<
"The readOption MUST_READ or READ_MODIFIED" 110 <<
" suggests that a read constructor for field " << this->
name()
111 <<
" would be more appropriate." <<
endl;
115 this->isReadOptional()
116 && this->
template typeHeaderOk<this_type>(
true)
120 readOldTimeIfPresent();
129 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
138 IOobjectOption::LAZY_READ,
139 IOobjectOption::AUTO_WRITE,
140 this->registerObject()
145 field0.template typeHeaderOk<this_type>(
true)
149 <<
"Reading old time level for field" <<
nl << this->info() <<
endl;
151 field0Ptr_ = std::make_unique<this_type>(field0, this->
mesh());
156 field0Ptr_->oriented() = this->oriented();
158 field0Ptr_->timeIndex_ = timeIndex_ - 1;
160 if (!field0Ptr_->readOldTimeIfPresent())
162 field0Ptr_->oldTime();
174 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
180 const word& patchFieldType
183 Internal(
io,
mesh, dims, false),
188 <<
"Creating" <<
nl << this->info() <<
endl;
194 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
204 Internal(
io,
mesh, dims, false),
206 boundaryField_(
mesh.
boundary(), *this, patchFieldTypes, actualPatchTypes)
209 <<
"Creating" <<
nl << this->info() <<
endl;
215 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
222 const word& patchFieldType
225 Internal(
io,
mesh, value, dims, false),
230 <<
"Creating" <<
nl << this->info() <<
endl;
232 boundaryField_ == value;
238 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
249 Internal(
io,
mesh, value, dims, false),
251 boundaryField_(
mesh.
boundary(), *this, patchFieldTypes, actualPatchTypes)
254 <<
"Creating" <<
nl << this->info() <<
endl;
256 boundaryField_ == value;
262 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
268 const word& patchFieldType
282 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
304 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
308 const Internal& diField,
309 const PtrList<PatchField<Type>>& ptfl
312 Internal(
io, diField),
317 <<
"Copy construct from components" <<
nl << this->info() <<
endl;
323 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
328 const PtrList<PatchField<Type>>& ptfl
331 Internal(
io,
std::move(diField)),
336 <<
"Move construct from components" <<
nl << this->info() <<
endl;
342 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
347 const PtrList<PatchField<Type>>& ptfl
350 Internal(
io, tfield),
355 <<
"Construct from tmp internalField" <<
nl << this->info() <<
endl;
361 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
364 const Internal& diField,
365 const PtrList<PatchField<Type>>& ptfl
373 <<
"Copy construct from components" <<
nl << this->info() <<
endl;
379 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
383 const PtrList<PatchField<Type>>& ptfl
386 Internal(
std::move(diField)),
391 <<
"Move construct from components" <<
nl << this->info() <<
endl;
397 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
404 const word& patchFieldType
407 Internal(
io,
mesh, dims, iField),
412 <<
"Copy construct from internal field" <<
nl << this->info() <<
endl;
418 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
425 const word& patchFieldType
428 Internal(
io,
mesh, dims,
std::move(iField)),
433 <<
"Move construct from internal field" <<
nl << this->info() <<
endl;
439 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
446 const PtrList<PatchField<Type>>& ptfl
449 Internal(
io,
mesh, dims, iField),
454 <<
"Copy construct from components" <<
nl << this->info() <<
endl;
460 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
467 const PtrList<PatchField<Type>>& ptfl
470 Internal(
io,
mesh, dims,
std::move(iField)),
475 <<
"Move construct from components" <<
nl << this->info() <<
endl;
481 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
488 const PtrList<PatchField<Type>>& ptfl
491 Internal(
io,
mesh, dims, tfield),
496 <<
"Construct from tmp internalField" <<
nl << this->info() <<
endl;
502 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
507 const bool readOldTime
515 <<
"Read construct" <<
nl << this->info() <<
endl;
517 if (!this->isAnyRead())
522 <<
"Had readOption NO_READ for field " 523 << this->
name() <<
", but constructor always reads field!" 531 readOldTimeIfPresent();
535 <<
"Finishing read-construction" <<
nl << this->info() <<
endl;
539 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
554 <<
"Finishing dictionary-construct" <<
nl << this->info() <<
endl;
558 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
566 boundaryField_(*this, gf.boundaryField_)
569 <<
"Copy construct" <<
nl << this->info() <<
endl;
573 field0Ptr_ = std::make_unique<this_type>(*gf.field0Ptr_);
576 this->writeOpt(IOobjectOption::NO_WRITE);
580 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
586 Internal(tgf.constCast(), tgf.movable()),
588 boundaryField_(*this, tgf().boundaryField_)
591 <<
"Constructing from tmp" <<
nl << this->info() <<
endl;
593 this->writeOpt(IOobjectOption::NO_WRITE);
599 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
608 boundaryField_(*this, gf.boundaryField_)
611 <<
"Copy construct, resetting IO params" <<
nl 612 << this->info() <<
endl;
616 field0Ptr_ = std::make_unique<this_type>
625 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
629 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf
632 Internal(
io, tgf.constCast(), tgf.movable()),
634 boundaryField_(*this, tgf().boundaryField_)
637 <<
"Constructing from tmp resetting IO params" <<
nl 638 << this->info() <<
endl;
646 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
653 Internal(newName, gf),
655 boundaryField_(*this, gf.boundaryField_)
658 <<
"Copy construct, resetting name" <<
nl 659 << this->info() <<
endl;
663 field0Ptr_ = std::make_unique<this_type>
672 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
676 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf
679 Internal(newName, tgf.constCast(), tgf.movable()),
681 boundaryField_(*this, tgf().boundaryField_)
684 <<
"Constructing from tmp resetting name" <<
nl 685 << this->info() <<
endl;
691 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
696 const word& patchFieldType
701 boundaryField_(this->
mesh().
boundary(), *this, patchFieldType)
704 <<
"Copy construct, resetting IO params" <<
nl 705 << this->info() <<
endl;
707 boundaryField_ == gf.boundaryField_;
711 field0Ptr_ = std::make_unique<this_type>
720 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
724 const GeometricField<Type, PatchField, GeoMesh>& gf,
740 <<
"Copy construct, resetting IO params and patch types" <<
nl 741 << this->info() <<
endl;
743 boundaryField_ == gf.boundaryField_;
747 field0Ptr_ = std::make_unique<this_type>
756 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
760 const GeometricField<Type, PatchField, GeoMesh>& gf,
762 const word& patchFieldType
767 boundaryField_(*this, gf.boundaryField_,
patchIDs, patchFieldType)
770 <<
"Copy construct, resetting IO params and setting patchFieldType " 771 <<
"for patchIDs" <<
nl 772 << this->info() <<
endl;
776 field0Ptr_ = std::make_unique<this_type>
785 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
789 const tmp<GeometricField<Type, PatchField, GeoMesh>>& tgf,
794 Internal(
io, tgf.constCast(), tgf.movable()),
805 <<
"Constructing from tmp resetting IO params and patch types" <<
nl 806 << this->info() <<
endl;
808 boundaryField_ == tgf().boundaryField_;
814 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
824 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
844 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
849 const bool updateAccessTime
852 if (updateAccessTime)
861 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
866 const bool updateAccessTime
869 if (updateAccessTime)
878 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
883 const bool updateAccessTime
886 if (updateAccessTime)
891 return boundaryField_;
895 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
899 return (field0Ptr_ ? (field0Ptr_->nOldTimes() + 1) : 0);
903 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
909 && timeIndex_ != this->time().
timeIndex()
910 && !this->
name().ends_with(
"_0")
914 timeIndex_ = this->time().timeIndex();
922 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
927 field0Ptr_->storeOldTime();
930 <<
"Storing old time field for field" <<
nl << this->info() <<
endl;
932 *field0Ptr_ == *
this;
933 field0Ptr_->timeIndex_ = timeIndex_;
935 if (field0Ptr_->field0Ptr_)
937 field0Ptr_->writeOpt(this->writeOpt());
943 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
949 field0Ptr_ = std::make_unique<this_type>
956 IOobjectOption::NO_READ,
957 IOobjectOption::NO_WRITE,
958 this->registerObject()
966 <<
"created old time field " << field0Ptr_->info() <<
endl;
970 error::printStack(
Info);
983 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
994 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
997 if (!fieldPrevIterPtr_)
1000 <<
"Allocating previous iteration field" <<
nl 1001 << this->info() <<
endl;
1003 fieldPrevIterPtr_ = std::make_unique<this_type>
1005 this->
name() +
"PrevIter",
1011 *fieldPrevIterPtr_ == *
this;
1016 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1020 if (!fieldPrevIterPtr_)
1023 <<
"previous iteration field" <<
endl << this->info() <<
endl 1025 <<
" Use field.storePrevIter() at start of iteration." 1029 return *fieldPrevIterPtr_;
1033 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1036 field0Ptr_.reset(
nullptr);
1037 fieldPrevIterPtr_.reset(
nullptr);
1041 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1047 this->setUpToDate();
1050 boundaryField_.evaluate();
1054 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1060 this->setUpToDate();
1063 boundaryField_.evaluateLocal();
1067 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1073 bool needRef =
true;
1075 for (
const auto& pf : boundaryField_)
1077 if (pf.fixesValue())
1088 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1098 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1103 if (this->
mesh().data().isFinalIteration())
1108 scalar relaxCoeff = 1;
1110 if (this->
mesh().relaxField(
name, relaxCoeff))
1117 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1125 return this->
name() +
"Final";
1128 return this->
name();
1132 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1145 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1149 this->internalField().writeData(
os,
"internalField");
1151 this->boundaryField().writeEntry(
"boundaryField",
os);
1160 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1166 this->
name() +
".T()",
1171 Foam::T(tresult.ref().primitiveFieldRef(), primitiveField());
1172 Foam::T(tresult.ref().boundaryFieldRef(), boundaryField());
1178 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1200 Foam::component(tresult.ref().primitiveFieldRef(), primitiveField(), d);
1201 Foam::component(tresult.ref().boundaryFieldRef(), boundaryField(), d);
1207 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1211 const GeometricField
1213 typename GeometricField<Type, PatchField, GeoMesh>::cmptType,
1224 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1236 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1247 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1258 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1268 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1274 this->clamp_max(
upper.value());
1278 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1290 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1301 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1308 this->clamp_range(
lower.value(),
upper.value());
1312 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1318 this->clamp_range(
range.value());
1322 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1330 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1340 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1360 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1366 const auto& gf = tgf();
1396 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1402 internalFieldRef() = dt;
1407 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1413 const auto& gf = tgf();
1426 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1432 internalFieldRef() = dt;
1437 #define COMPUTED_ASSIGNMENT(TYPE, op) \ 1439 template<class Type, template<class> class PatchField, class GeoMesh> \ 1440 void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \ 1442 const GeometricField<TYPE, PatchField, GeoMesh>& gf \ 1445 checkField(*this, gf, #op); \ 1447 internalFieldRef() op gf.internalField(); \ 1448 boundaryFieldRef() op gf.boundaryField(); \ 1451 template<class Type, template<class> class PatchField, class GeoMesh> \ 1452 void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \ 1454 const tmp<GeometricField<TYPE, PatchField, GeoMesh>>& tgf \ 1457 operator op(tgf()); \ 1461 template<class Type, template<class> class PatchField, class GeoMesh> \ 1462 void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \ 1464 const dimensioned<TYPE>& dt \ 1467 internalFieldRef() op dt; \ 1468 boundaryFieldRef() op dt.value(); \ 1476 #undef COMPUTED_ASSIGNMENT 1481 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1493 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
1500 tfld().writeData(
os);
void clamp_min(const Type &lower)
Impose lower (floor) clamp on the field values (in-place)
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.
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.
orientedType oriented() const noexcept
Return oriented type.
string upper(const std::string &s)
Return string copy transformed with std::toupper on each character.
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()+
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...
const T & min() const noexcept
The min value (first)
bool returnReduceAnd(const bool value, const label comm=UPstream::worldComm)
Perform logical (and) MPI Allreduce on a copy. Uses UPstream::reduceAnd.
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.
void storeOldTime() const
Store the old-time field.
void writeMinMax(Ostream &os) const
Helper function to write the min and max to an Ostream.
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)
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
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.
string lower(const std::string &s)
Return string copy transformed with std::tolower on each character.
#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)
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.
const dimensionSet & dimensions() const noexcept
Return dimensions.
#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.