From 618bf48a61acacf8e44d9c5decc62e3e5bf1ecd6 Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Mon, 15 Feb 2016 15:52:33 +0000 Subject: [PATCH] MRFZone: Added patch-based "relative" function --- .../cfdTools/general/MRF/MRFZone.C | 6 ++++ .../cfdTools/general/MRF/MRFZone.H | 13 +++++++ .../cfdTools/general/MRF/MRFZoneList.C | 18 ++++++++++ .../cfdTools/general/MRF/MRFZoneList.H | 8 +++++ .../cfdTools/general/MRF/MRFZoneTemplates.C | 36 ++++++++++++++++++- 5 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C index c350d14a0c5..0c902d6faab 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C @@ -453,6 +453,12 @@ void Foam::MRFZone::makeRelative(FieldField<fvsPatchField, scalar>& phi) const } +void Foam::MRFZone::makeRelative(Field<scalar>& phi, const label patchi) const +{ + makeRelativeRhoFlux(oneField(), phi, patchi); +} + + void Foam::MRFZone::makeRelative ( const surfaceScalarField& rho, diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H index 9054d20d336..1600ac4e793 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H @@ -129,6 +129,15 @@ class MRFZone FieldField<fvsPatchField, scalar>& phi ) const; + //- Make the given absolute mass/vol flux relative within the MRF region + template<class RhoFieldType> + void makeRelativeRhoFlux + ( + const RhoFieldType& rho, + Field<scalar>& phi, + const label patchi + ) const; + //- Make the given relative mass/vol flux absolute within the MRF region template<class RhoFieldType> void makeAbsoluteRhoFlux @@ -226,6 +235,10 @@ public: // within the MRF region void makeRelative(FieldField<fvsPatchField, scalar>& phi) const; + //- Make the given absolute patch flux relative + // within the MRF region + void makeRelative(Field<scalar>& phi, const label patchi) const; + //- Make the given absolute mass-flux relative within the MRF region void makeRelative ( diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.C b/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.C index b9a64b2fb0b..3b045fa22b5 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.C @@ -247,6 +247,24 @@ Foam::MRFZoneList::relative } +Foam::tmp<Foam::Field<Foam::scalar>> +Foam::MRFZoneList::relative +( + const tmp<Field<scalar>>& phi, + const label patchi +) const +{ + tmp<Field<scalar>> rphi(phi.ptr()); + + forAll(*this, i) + { + operator[](i).makeRelative(rphi(), patchi); + } + + return rphi; +} + + void Foam::MRFZoneList::makeRelative ( const surfaceScalarField& rho, diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.H b/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.H index 3139e7e76ba..fb36e689ea3 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.H +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZoneList.H @@ -142,6 +142,14 @@ public: const tmp<FieldField<fvsPatchField, scalar>>& tphi ) const; + //- Return the given absolute patch flux relative within + // the MRF region + tmp<Field<scalar>> relative + ( + const tmp<Field<scalar>>& tphi, + const label patchi + ) const; + //- Make the given absolute mass-flux relative within the MRF region void makeRelative ( diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C b/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C index ff056fb3b35..b4a59329df1 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -97,6 +97,40 @@ void Foam::MRFZone::makeRelativeRhoFlux } +template<class RhoFieldType> +void Foam::MRFZone::makeRelativeRhoFlux +( + const RhoFieldType& rho, + Field<scalar>& phi, + const label patchi +) const +{ + const surfaceVectorField& Cf = mesh_.Cf(); + const surfaceVectorField& Sf = mesh_.Sf(); + + const vector Omega = omega_->value(mesh_.time().timeOutputValue())*axis_; + + // Included patches + forAll(includedFaces_[patchi], i) + { + label patchFacei = includedFaces_[patchi][i]; + + phi[patchFacei] = 0.0; + } + + // Excluded patches + forAll(excludedFaces_[patchi], i) + { + label patchFacei = excludedFaces_[patchi][i]; + + phi[patchFacei] -= + rho[patchFacei] + * (Omega ^ (Cf.boundaryField()[patchi][patchFacei] - origin_)) + & Sf.boundaryField()[patchi][patchFacei]; + } +} + + template<class RhoFieldType> void Foam::MRFZone::makeAbsoluteRhoFlux ( -- GitLab