diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C index cbf79e5818cb65a625b19b08fcd4d11ddec5533d..0a16f916c39373cfbbc838d967fd4830509a786a 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017,2022 OpenFOAM Foundation - Copyright (C) 2016-2023 OpenCFD Ltd. + Copyright (C) 2016-2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -189,7 +189,7 @@ bool Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::checkConsistency template<class Type, template<class> class PatchField, class GeoMesh> void Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::readField ( - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const dictionary& dict ) { @@ -210,7 +210,9 @@ void Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::readField for (const entry& dEntry : dict) { - if (dEntry.isDict() && dEntry.keyword().isLiteral()) + const auto* subdict = dEntry.dictPtr(); + + if (subdict && dEntry.keyword().isLiteral()) { const label patchi = bmesh_.findPatchID(dEntry.keyword()); @@ -222,11 +224,11 @@ void Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::readField PatchField<Type>::New ( bmesh_[patchi], - field, - dEntry.dict() + iField, + *subdict ) ); - nUnset--; + --nUnset; } } } @@ -245,8 +247,9 @@ void Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::readField for (auto iter = dict.crbegin(); iter != dict.crend(); ++iter) { const entry& dEntry = *iter; + const auto* subdict = dEntry.dictPtr(); - if (dEntry.isDict() && dEntry.keyword().isLiteral()) + if (subdict && dEntry.keyword().isLiteral()) { const labelList patchIds = bmesh_.indices(dEntry.keyword(), true); // use patchGroups @@ -261,8 +264,8 @@ void Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::readField PatchField<Type>::New ( bmesh_[patchi], - field, - dEntry.dict() + iField, + *subdict ) ); } @@ -285,15 +288,15 @@ void Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::readField ( emptyPolyPatch::typeName, bmesh_[patchi], - field + iField ) ); } else { - bool found = dict.found(bmesh_[patchi].name()); + const auto* subdict = dict.findDict(bmesh_[patchi].name()); - if (found) + if (subdict) { this->set ( @@ -301,8 +304,8 @@ void Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::readField PatchField<Type>::New ( bmesh_[patchi], - field, - dict.subDict(bmesh_[patchi].name()) + iField, + *subdict ) ); } @@ -353,7 +356,7 @@ template<class Type, template<class> class PatchField, class GeoMesh> Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const word& patchFieldType ) : @@ -374,7 +377,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( patchFieldType, bmesh_[patchi], - field + iField ) ); } @@ -385,7 +388,7 @@ template<class Type, template<class> class PatchField, class GeoMesh> Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const wordList& patchFieldTypes, const wordList& constraintTypes ) @@ -424,7 +427,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField patchFieldTypes[patchi], constraintTypes[patchi], bmesh_[patchi], - field + iField ) ); } @@ -440,7 +443,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( patchFieldTypes[patchi], bmesh_[patchi], - field + iField ) ); } @@ -452,7 +455,7 @@ template<class Type, template<class> class PatchField, class GeoMesh> Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const PtrList<PatchField<Type>>& ptfl ) : @@ -466,7 +469,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField forAll(bmesh_, patchi) { - this->set(patchi, ptfl[patchi].clone(field)); + this->set(patchi, ptfl[patchi].clone(iField)); } } @@ -474,7 +477,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField template<class Type, template<class> class PatchField, class GeoMesh> Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const GeometricBoundaryField<Type, PatchField, GeoMesh>& btf ) : @@ -488,7 +491,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField forAll(bmesh_, patchi) { - this->set(patchi, btf[patchi].clone(field)); + this->set(patchi, btf[patchi].clone(iField)); } } @@ -496,7 +499,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField template<class Type, template<class> class PatchField, class GeoMesh> Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const GeometricBoundaryField<Type, PatchField, GeoMesh>& btf, const labelList& patchIDs, const word& patchFieldType @@ -519,7 +522,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( patchFieldType, bmesh_[patchi], - field + iField ) ); } @@ -528,7 +531,7 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField { if (!this->set(patchi)) { - this->set(patchi, btf[patchi].clone(field)); + this->set(patchi, btf[patchi].clone(iField)); } } } @@ -554,14 +557,14 @@ template<class Type, template<class> class PatchField, class GeoMesh> Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const dictionary& dict ) : FieldField<PatchField, Type>(bmesh.size()), bmesh_(bmesh) { - readField(field, dict); + readField(iField, dict); } @@ -835,18 +838,24 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::types() const template<class Type, template<class> class PatchField, class GeoMesh> -Foam::GeometricBoundaryField<Type, PatchField, GeoMesh> +Foam::tmp<Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>> Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>:: boundaryInternalField() const { - GeometricBoundaryField<Type, PatchField, GeoMesh> result(*this); + auto tresult = tmp<GeometricBoundaryField<Type, PatchField, GeoMesh>>::New + ( + DimensionedField<Type, GeoMesh>::null(), + *this + ); + + auto& result = tresult; forAll(result, patchi) { result[patchi] == this->operator[](patchi).patchInternalField(); } - return result; + return tresult; } @@ -858,13 +867,11 @@ Foam::GeometricBoundaryField<Type, PatchField, GeoMesh>::interfaces() const forAll(list, patchi) { - const auto* lduPtr = - isA<LduInterfaceField<Type>>(this->operator[](patchi)); - - if (lduPtr) - { - list.set(patchi, lduPtr); - } + list.set + ( + patchi, + isA<LduInterfaceField<Type>>(this->operator[](patchi)) + ); } return list; @@ -880,13 +887,11 @@ scalarInterfaces() const forAll(list, patchi) { - const auto* lduPtr = - isA<lduInterfaceField>(this->operator[](patchi)); - - if (lduPtr) - { - list.set(patchi, lduPtr); - } + list.set + ( + patchi, + isA<lduInterfaceField>(this->operator[](patchi)) + ); } return list; diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H index 218214ec91116513b48dc063a112e35a0dea42c7..3e327184099500bcfb3a10758f96e2ab8e15ba10 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H @@ -117,7 +117,7 @@ public: GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const word& patchFieldType = PatchField<Type>::calculatedType() ); @@ -127,7 +127,7 @@ public: GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const wordList& wantedPatchTypes, const wordList& actualPatchTypes = wordList() ); @@ -137,14 +137,14 @@ public: GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const PtrList<PatchField<Type>>& ptfl ); //- Construct as copy, setting the reference to the internal field GeometricBoundaryField ( - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const GeometricBoundaryField<Type, PatchField, GeoMesh>& btf ); @@ -152,7 +152,7 @@ public: //- and resetting type of field for given patch IDs GeometricBoundaryField ( - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const GeometricBoundaryField<Type, PatchField, GeoMesh>& btf, const labelList& patchIDs, const word& patchFieldName @@ -169,7 +169,7 @@ public: GeometricBoundaryField ( const BoundaryMesh& bmesh, - const DimensionedField<Type, GeoMesh>& field, + const Internal& iField, const dictionary& dict ); @@ -177,11 +177,7 @@ public: // Member Functions //- Read the boundary field - void readField - ( - const DimensionedField<Type, GeoMesh>& field, - const dictionary& dict - ); + void readField(const Internal& iField, const dictionary& dict); //- Update the boundary condition coefficients void updateCoeffs(); @@ -203,7 +199,7 @@ public: wordList types() const; //- Return boundary field of values neighbouring the boundary - GeometricBoundaryField boundaryInternalField() const; + tmp<GeometricBoundaryField> boundaryInternalField() const; //- Return a list of pointers for each patch field with only those //- pointing to interfaces being set