diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C index c350d14a0c54f2b7c27cca3302914e3437923b2f..0c902d6faab3bf3ee3492c1209041e749e742e8d 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 9054d20d3363005f51ca0d054e9e9b05888768c9..1600ac4e7934e0941fafd0c62bd80872f8876720 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 b9a64b2fb0b3021f1d6cc4eaf37d23d899795864..3b045fa22b59608bf45cf8020b0d40d2c096b153 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 3139e7e76bacba3f633db9fae12ef0392c308499..fb36e689ea37d2f137d5212aa680694f6914f424 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 ff056fb3b352862b579509ffe070f1f7261dfc7e..b4a59329df15c78901f3074124eb85d4d9bfdb5e 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 (