Commit c25b48a7 authored by Henry Weller's avatar Henry Weller
Browse files

GeometricField: New non-const access function boundaryFieldRef()

There is a need to specify const or non-const access to a non-const
object which is not currently possible with the "boundaryField()" access
function the const-ness of the return of which is defined by the
const-ness of the object for which it is called.  For consistency with
the latest "tmp" storage class in which non-const access is obtained
with the "ref()" function it is proposed to replace the non-const form
of "boundaryField()" with "boundaryFieldRef()".

Thanks to Mattijs Janssens for starting the process of migration to
"boundaryFieldRef()" and providing a patch for the OpenFOAM and
finiteVolume libraries.
parent b63a532a
......@@ -712,7 +712,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::internalField()
template<class Type, template<class> class PatchField, class GeoMesh>
typename
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricBoundaryField&
Foam::GeometricField<Type, PatchField, GeoMesh>::boundaryField()
Foam::GeometricField<Type, PatchField, GeoMesh>::boundaryFieldRef()
{
this->setUpToDate();
storeOldTimes();
......@@ -993,7 +993,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::T() const
);
Foam::T(result.ref().internalField(), internalField());
Foam::T(result.ref().boundaryField(), boundaryField());
Foam::T(result.ref().boundaryFieldRef(), boundaryField());
return result;
}
......@@ -1030,7 +1030,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::component
);
Foam::component(Component.ref().internalField(), internalField(), d);
Foam::component(Component.ref().boundaryField(), boundaryField(), d);
Foam::component(Component.ref().boundaryFieldRef(), boundaryField(), d);
return Component;
}
......@@ -1049,7 +1049,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::replace
)
{
internalField().replace(d, gcf.internalField());
boundaryField().replace(d, gcf.boundaryField());
boundaryFieldRef().replace(d, gcf.boundaryField());
}
......@@ -1061,7 +1061,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::replace
)
{
internalField().replace(d, ds.value());
boundaryField().replace(d, ds.value());
boundaryFieldRef().replace(d, ds.value());
}
......@@ -1072,7 +1072,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::max
)
{
Foam::max(internalField(), internalField(), dt.value());
Foam::max(boundaryField(), boundaryField(), dt.value());
Foam::max(boundaryFieldRef(), boundaryField(), dt.value());
}
......@@ -1083,7 +1083,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::min
)
{
Foam::min(internalField(), internalField(), dt.value());
Foam::min(boundaryField(), boundaryField(), dt.value());
Foam::min(boundaryFieldRef(), boundaryField(), dt.value());
}
......@@ -1091,7 +1091,7 @@ template<class Type, template<class> class PatchField, class GeoMesh>
void Foam::GeometricField<Type, PatchField, GeoMesh>::negate()
{
internalField().negate();
boundaryField().negate();
boundaryFieldRef().negate();
}
......@@ -1115,7 +1115,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::operator=
// only equate field contents not ID
dimensionedInternalField() = gf.dimensionedInternalField();
boundaryField() = gf.boundaryField();
boundaryFieldRef() = gf.boundaryField();
}
......@@ -1146,7 +1146,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::operator=
const_cast<Field<Type>&>(gf.internalField())
);
boundaryField() = gf.boundaryField();
boundaryFieldRef() = gf.boundaryField();
tgf.clear();
}
......@@ -1159,7 +1159,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::operator=
)
{
dimensionedInternalField() = dt;
boundaryField() = dt.value();
boundaryFieldRef() = dt.value();
}
......@@ -1176,7 +1176,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::operator==
// only equate field contents not ID
dimensionedInternalField() = gf.dimensionedInternalField();
boundaryField() == gf.boundaryField();
boundaryFieldRef() == gf.boundaryField();
tgf.clear();
}
......@@ -1189,7 +1189,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::operator==
)
{
dimensionedInternalField() = dt;
boundaryField() == dt.value();
boundaryFieldRef() == dt.value();
}
......@@ -1204,7 +1204,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \
checkField(*this, gf, #op); \
\
dimensionedInternalField() op gf.dimensionedInternalField(); \
boundaryField() op gf.boundaryField(); \
boundaryFieldRef() op gf.boundaryField(); \
} \
\
template<class Type, template<class> class PatchField, class GeoMesh> \
......@@ -1224,7 +1224,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::operator op \
) \
{ \
dimensionedInternalField() op dt; \
boundaryField() op dt.value(); \
boundaryFieldRef() op dt.value(); \
}
COMPUTED_ASSIGNMENT(Type, +=)
......
......@@ -442,7 +442,15 @@ public:
inline const InternalField& internalField() const;
//- Return reference to GeometricBoundaryField
GeometricBoundaryField& boundaryField();
GeometricBoundaryField& boundaryFieldRef();
//- Return reference to GeometricBoundaryField
#ifndef BOUNDARY_FIELD_REF
GeometricBoundaryField& boundaryField()
{
return boundaryFieldRef();
}
#endif
//- Return reference to GeometricBoundaryField for const field
inline const GeometricBoundaryField& boundaryField() const;
......
......@@ -50,7 +50,7 @@ void component
)
{
component(gcf.internalField(), gf.internalField(), d);
component(gcf.boundaryField(), gf.boundaryField(), d);
component(gcf.boundaryFieldRef(), gf.boundaryField(), d);
}
......@@ -62,7 +62,7 @@ void T
)
{
T(gf.internalField(), gf1.internalField());
T(gf.boundaryField(), gf1.boundaryField());
T(gf.boundaryFieldRef(), gf1.boundaryField());
}
......@@ -80,7 +80,7 @@ void pow
)
{
pow(gf.internalField(), gf1.internalField(), r);
pow(gf.boundaryField(), gf1.boundaryField(), r);
pow(gf.boundaryFieldRef(), gf1.boundaryField(), r);
}
template
......@@ -174,7 +174,7 @@ void sqr
)
{
sqr(gf.internalField(), gf1.internalField());
sqr(gf.boundaryField(), gf1.boundaryField());
sqr(gf.boundaryFieldRef(), gf1.boundaryField());
}
template<class Type, template<class> class PatchField, class GeoMesh>
......@@ -262,7 +262,7 @@ void magSqr
)
{
magSqr(gsf.internalField(), gf.internalField());
magSqr(gsf.boundaryField(), gf.boundaryField());
magSqr(gsf.boundaryFieldRef(), gf.boundaryField());
}
template<class Type, template<class> class PatchField, class GeoMesh>
......@@ -334,7 +334,7 @@ void mag
)
{
mag(gsf.internalField(), gf.internalField());
mag(gsf.boundaryField(), gf.boundaryField());
mag(gsf.boundaryFieldRef(), gf.boundaryField());
}
template<class Type, template<class> class PatchField, class GeoMesh>
......@@ -411,7 +411,7 @@ void cmptAv
)
{
cmptAv(gcf.internalField(), gf.internalField());
cmptAv(gcf.boundaryField(), gf.boundaryField());
cmptAv(gcf.boundaryFieldRef(), gf.boundaryField());
}
template<class Type, template<class> class PatchField, class GeoMesh>
......@@ -600,7 +600,12 @@ void opFunc \
) \
{ \
Foam::opFunc(gf.internalField(), gf1.internalField(), gf2.internalField());\
Foam::opFunc(gf.boundaryField(), gf1.boundaryField(), gf2.boundaryField());\
Foam::opFunc \
( \
gf.boundaryFieldRef(), \
gf1.boundaryField(), \
gf2.boundaryField() \
);\
} \
\
template \
......@@ -746,7 +751,7 @@ void opFunc \
) \
{ \
Foam::opFunc(gf.internalField(), gf1.internalField(), dvs.value()); \
Foam::opFunc(gf.boundaryField(), gf1.boundaryField(), dvs.value()); \
Foam::opFunc(gf.boundaryFieldRef(), gf1.boundaryField(), dvs.value()); \
} \
\
template \
......@@ -859,7 +864,7 @@ void opFunc \
) \
{ \
Foam::opFunc(gf.internalField(), dvs.value(), gf1.internalField()); \
Foam::opFunc(gf.boundaryField(), dvs.value(), gf1.boundaryField()); \
Foam::opFunc(gf.boundaryFieldRef(), dvs.value(), gf1.boundaryField()); \
} \
\
template \
......
......@@ -42,7 +42,7 @@ void Func \
) \
{ \
Foam::Func(res.internalField(), gf1.internalField()); \
Foam::Func(res.boundaryField(), gf1.boundaryField()); \
Foam::Func(res.boundaryFieldRef(), gf1.boundaryField()); \
} \
\
TEMPLATE \
......@@ -111,7 +111,7 @@ void OpFunc \
) \
{ \
Foam::OpFunc(res.internalField(), gf1.internalField()); \
Foam::OpFunc(res.boundaryField(), gf1.boundaryField()); \
Foam::OpFunc(res.boundaryFieldRef(), gf1.boundaryField()); \
} \
\
TEMPLATE \
......@@ -180,8 +180,13 @@ void Func \
const GeometricField<Type2, PatchField, GeoMesh>& gf2 \
) \
{ \
Foam::Func(res.internalField(), gf1.internalField(), gf2.internalField());\
Foam::Func(res.boundaryField(), gf1.boundaryField(), gf2.boundaryField());\
Foam::Func(res.internalField(), gf1.internalField(), gf2.internalField()); \
Foam::Func \
( \
res.boundaryFieldRef(), \
gf1.boundaryField(), \
gf2.boundaryField() \
);\
} \
\
TEMPLATE \
......@@ -309,7 +314,7 @@ void Func \
) \
{ \
Foam::Func(res.internalField(), dt1.value(), gf2.internalField()); \
Foam::Func(res.boundaryField(), dt1.value(), gf2.boundaryField()); \
Foam::Func(res.boundaryFieldRef(), dt1.value(), gf2.boundaryField()); \
} \
\
TEMPLATE \
......@@ -400,7 +405,7 @@ void Func \
) \
{ \
Foam::Func(res.internalField(), gf1.internalField(), dt2.value()); \
Foam::Func(res.boundaryField(), gf1.boundaryField(), dt2.value()); \
Foam::Func(res.boundaryFieldRef(), gf1.boundaryField(), dt2.value()); \
} \
\
TEMPLATE \
......@@ -500,7 +505,7 @@ void OpFunc \
Foam::OpFunc \
(res.internalField(), gf1.internalField(), gf2.internalField()); \
Foam::OpFunc \
(res.boundaryField(), gf1.boundaryField(), gf2.boundaryField()); \
(res.boundaryFieldRef(), gf1.boundaryField(), gf2.boundaryField()); \
} \
\
TEMPLATE \
......@@ -628,7 +633,7 @@ void OpFunc \
) \
{ \
Foam::OpFunc(res.internalField(), dt1.value(), gf2.internalField()); \
Foam::OpFunc(res.boundaryField(), dt1.value(), gf2.boundaryField()); \
Foam::OpFunc(res.boundaryFieldRef(), dt1.value(), gf2.boundaryField()); \
} \
\
TEMPLATE \
......@@ -719,7 +724,7 @@ void OpFunc \
) \
{ \
Foam::OpFunc(res.internalField(), gf1.internalField(), dt2.value()); \
Foam::OpFunc(res.boundaryField(), gf1.boundaryField(), dt2.value()); \
Foam::OpFunc(res.boundaryFieldRef(), gf1.boundaryField(), dt2.value()); \
} \
\
TEMPLATE \
......
......@@ -132,7 +132,7 @@ void MapGeometricFields
// Map the patch fields
typename GeometricField<Type, PatchField, GeoMesh>
::GeometricBoundaryField& bfield = field.boundaryField();
::GeometricBoundaryField& bfield = field.boundaryFieldRef();
forAll(bfield, patchi)
{
// Cannot check sizes for patch fields because of
......
......@@ -44,7 +44,7 @@ void stabilise
)
{
stabilise(result.internalField(), gsf.internalField(), ds.value());
stabilise(result.boundaryField(), gsf.boundaryField(), ds.value());
stabilise(result.boundaryFieldRef(), gsf.boundaryField(), ds.value());
}
......@@ -127,7 +127,7 @@ void pow
)
{
pow(Pow.internalField(), gsf1.internalField(), gsf2.internalField());
pow(Pow.boundaryField(), gsf1.boundaryField(), gsf2.boundaryField());
pow(Pow.boundaryFieldRef(), gsf1.boundaryField(), gsf2.boundaryField());
}
......@@ -270,7 +270,7 @@ void pow
)
{
pow(tPow.internalField(), gsf.internalField(), ds.value());
pow(tPow.boundaryField(), gsf.boundaryField(), ds.value());
pow(tPow.boundaryFieldRef(), gsf.boundaryField(), ds.value());
}
......@@ -359,7 +359,7 @@ void pow
)
{
pow(tPow.internalField(), ds.value(), gsf.internalField());
pow(tPow.boundaryField(), ds.value(), gsf.boundaryField());
pow(tPow.boundaryFieldRef(), ds.value(), gsf.boundaryField());
}
......@@ -451,7 +451,7 @@ void atan2
)
{
atan2(Atan2.internalField(), gsf1.internalField(), gsf2.internalField());
atan2(Atan2.boundaryField(), gsf1.boundaryField(), gsf2.boundaryField());
atan2(Atan2.boundaryFieldRef(), gsf1.boundaryField(), gsf2.boundaryField());
}
......@@ -578,7 +578,7 @@ void atan2
)
{
atan2(tAtan2.internalField(), gsf.internalField(), ds.value());
atan2(tAtan2.boundaryField(), gsf.boundaryField(), ds.value());
atan2(tAtan2.boundaryFieldRef(), gsf.boundaryField(), ds.value());
}
......@@ -667,7 +667,7 @@ void atan2
)
{
atan2(tAtan2.internalField(), ds.value(), gsf.internalField());
atan2(tAtan2.boundaryField(), ds.value(), gsf.boundaryField());
atan2(tAtan2.boundaryFieldRef(), ds.value(), gsf.boundaryField());
}
......@@ -800,7 +800,7 @@ void func \
) \
{ \
func(gsf.internalField(), n, gsf1.internalField()); \
func(gsf.boundaryField(), n, gsf1.boundaryField()); \
func(gsf.boundaryFieldRef(), n, gsf1.boundaryField()); \
} \
\
template<template<class> class PatchField, class GeoMesh> \
......
......@@ -46,7 +46,7 @@ void transform
)
{
transform(rtf.internalField(), trf.internalField(), tf.internalField());
transform(rtf.boundaryField(), trf.boundaryField(), tf.boundaryField());
transform(rtf.boundaryFieldRef(), trf.boundaryField(), tf.boundaryField());
}
......@@ -132,7 +132,7 @@ void transform
)
{
transform(rtf.internalField(), t.value(), tf.internalField());
transform(rtf.boundaryField(), t.value(), tf.boundaryField());
transform(rtf.boundaryFieldRef(), t.value(), tf.boundaryField());
}
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2015-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -37,23 +37,25 @@ void Foam::correctUphiBCs
if (mesh.changing())
{
forAll(U.boundaryField(), patchi)
volVectorField::GeometricBoundaryField& Ubf = U.boundaryFieldRef();
surfaceScalarField::GeometricBoundaryField& phibf =
phi.boundaryFieldRef();
forAll(Ubf, patchi)
{
if (U.boundaryField()[patchi].fixesValue())
if (Ubf[patchi].fixesValue())
{
U.boundaryField()[patchi].initEvaluate();
Ubf[patchi].initEvaluate();
}
}
forAll(U.boundaryField(), patchi)
forAll(Ubf, patchi)
{
if (U.boundaryField()[patchi].fixesValue())
if (Ubf[patchi].fixesValue())
{
U.boundaryField()[patchi].evaluate();
Ubf[patchi].evaluate();
phi.boundaryField()[patchi] =
U.boundaryField()[patchi]
& mesh.Sf().boundaryField()[patchi];
phibf[patchi] = Ubf[patchi] & mesh.Sf().boundaryField()[patchi];
}
}
}
......@@ -71,24 +73,28 @@ void Foam::correctUphiBCs
if (mesh.changing())
{
forAll(U.boundaryField(), patchi)
volVectorField::GeometricBoundaryField& Ubf = U.boundaryFieldRef();
surfaceScalarField::GeometricBoundaryField& phibf =
phi.boundaryFieldRef();
forAll(Ubf, patchi)
{
if (U.boundaryField()[patchi].fixesValue())
if (Ubf[patchi].fixesValue())
{
U.boundaryField()[patchi].initEvaluate();
Ubf[patchi].initEvaluate();
}
}
forAll(U.boundaryField(), patchi)
forAll(Ubf, patchi)
{
if (U.boundaryField()[patchi].fixesValue())
if (Ubf[patchi].fixesValue())
{
U.boundaryField()[patchi].evaluate();
Ubf[patchi].evaluate();
phi.boundaryField()[patchi] =
phibf[patchi] =
rho.boundaryField()[patchi]
*(
U.boundaryField()[patchi]
Ubf[patchi]
& mesh.Sf().boundaryField()[patchi]
);
}
......
......@@ -418,12 +418,15 @@ void Foam::MRFZone::makeRelative(volVectorField& U) const
}
// Included patches
volVectorField::GeometricBoundaryField& Ubf = U.boundaryFieldRef();
forAll(includedFaces_, patchi)
{
forAll(includedFaces_[patchi], i)
{
label patchFacei = includedFaces_[patchi][i];
U.boundaryField()[patchi][patchFacei] = Zero;
Ubf[patchi][patchFacei] = Zero;
}
}
......@@ -433,7 +436,7 @@ void Foam::MRFZone::makeRelative(volVectorField& U) const
forAll(excludedFaces_[patchi], i)
{
label patchFacei = excludedFaces_[patchi][i];
U.boundaryField()[patchi][patchFacei] -=
Ubf[patchi][patchFacei] -=
(Omega
^ (C.boundaryField()[patchi][patchFacei] - origin_));
}
......@@ -484,12 +487,14 @@ void Foam::MRFZone::makeAbsolute(volVectorField& U) const
}
// Included patches
volVectorField::GeometricBoundaryField& Ubf = U.boundaryFieldRef();
forAll(includedFaces_, patchi)
{
forAll(includedFaces_[patchi], i)
{
label patchFacei = includedFaces_[patchi][i];
U.boundaryField()[patchi][patchFacei] =
Ubf[patchi][patchFacei] =
(Omega ^ (C.boundaryField()[patchi][patchFacei] - origin_));
}
}
......@@ -500,7 +505,7 @@ void Foam::MRFZone::makeAbsolute(volVectorField& U) const
forAll(excludedFaces_[patchi], i)
{
label patchFacei = excludedFaces_[patchi][i];
U.boundaryField()[patchi][patchFacei] +=
Ubf[patchi][patchFacei] +=
(Omega ^ (C.boundaryField()[patchi][patchFacei] - origin_));
}
}
......@@ -528,11 +533,13 @@ void Foam::MRFZone::correctBoundaryVelocity(volVectorField& U) const
const vector Omega = this->Omega();
// Included patches
volVectorField::GeometricBoundaryField& Ubf = U.boundaryFieldRef();
forAll(includedFaces_, patchi)
{
const vectorField& patchC = mesh_.Cf().boundaryField()[patchi];
vectorField pfld(U.boundaryField()[patchi]);
vectorField pfld(Ubf[patchi]);
forAll(includedFaces_[patchi], i)
{
......@@ -541,7 +548,7 @@ void Foam::MRFZone::correctBoundaryVelocity(volVectorField& U) const
pfld[patchFacei] = (Omega ^ (patchC[patchFacei] - origin_));
}
U.boundaryField()[patchi] == pfld;
Ubf[patchi] == pfld;
}
}
......
......@@ -393,19 +393,22 @@ void Foam::MRFZoneList::correctBoundaryFlux
surfaceScalarField& phi
) const
{
FieldField<fvsPatchField, scalar> phibf
FieldField<fvsPatchField, scalar> Uf
(
relative(mesh_.Sf().boundaryField() & U.boundaryField())
);
surfaceScalarField::GeometricBoundaryField& phibf = phi.boundaryFieldRef();
forAll(mesh_.boundary(), patchi)
{
if
(
isA<fixedValueFvsPatchScalarField>(phi.boundaryField()[patchi])
isA<fixedValueFvsPatchScalarField>(phibf[patchi])
)
{
phi.boundaryField()[patchi] == phibf[patchi];
phibf[patchi] == Uf[patchi];
}
}
}
......
......@@ -54,7 +54,7 @@ void Foam::MRFZone::makeRelativeRhoFlux