From 060690b6fa1ca69db61a27a974b6b3cb770928f0 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Tue, 18 Apr 2023 16:28:19 +0100 Subject: [PATCH] driftFluxFoam: Updated in preparation for conversion into a solver module --- .../multiphase/driftFluxFoam/CourantNo.H | 4 +- .../solvers/multiphase/driftFluxFoam/UEqn.H | 4 +- .../driftFluxFoam/alphaEqnSubCycle.H | 2 +- .../multiphase/driftFluxFoam/createFields.H | 12 +- .../multiphase/driftFluxFoam/driftFluxFoam.C | 3 +- ...incompressibleTwoPhaseInteractingMixture.C | 114 +++--------------- ...incompressibleTwoPhaseInteractingMixture.H | 57 +++------ .../solvers/multiphase/driftFluxFoam/pEqn.H | 6 +- .../relativeVelocityModel.C | 9 +- .../relativeVelocityModel.H | 5 +- .../solvers/MULES/CMULESTemplates.C | 14 ++- .../driftFluxFoam/RAS/dahl/system/fvSolution | 2 - 12 files changed, 76 insertions(+), 156 deletions(-) diff --git a/applications/solvers/multiphase/driftFluxFoam/CourantNo.H b/applications/solvers/multiphase/driftFluxFoam/CourantNo.H index 2f18166804..adb77d19fc 100644 --- a/applications/solvers/multiphase/driftFluxFoam/CourantNo.H +++ b/applications/solvers/multiphase/driftFluxFoam/CourantNo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ scalar meanCoNum = 0.0; ( fvc::surfaceSum ( - mag(phi) + mag(fvc::flux(mixture.Udm())) + mag(phi) + mag(fvc::flux(relativeVelocity->Udm())) )().primitiveField() ); diff --git a/applications/solvers/multiphase/driftFluxFoam/UEqn.H b/applications/solvers/multiphase/driftFluxFoam/UEqn.H index f6ef6bab82..d57683da40 100644 --- a/applications/solvers/multiphase/driftFluxFoam/UEqn.H +++ b/applications/solvers/multiphase/driftFluxFoam/UEqn.H @@ -3,8 +3,8 @@ fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U) - + mixture.MRF().DDt(rho, U) - + mixture.divTauDm() + + MRF.DDt(rho, U) + + relativeVelocity->divDevTau() + turbulence->divDevTau(U) == fvModels.source(rho, U) diff --git a/applications/solvers/multiphase/driftFluxFoam/alphaEqnSubCycle.H b/applications/solvers/multiphase/driftFluxFoam/alphaEqnSubCycle.H index 8c8cfe809c..c6842af92c 100644 --- a/applications/solvers/multiphase/driftFluxFoam/alphaEqnSubCycle.H +++ b/applications/solvers/multiphase/driftFluxFoam/alphaEqnSubCycle.H @@ -13,7 +13,7 @@ dimensionedScalar(phi.dimensions(), 0) ); - surfaceScalarField phir(fvc::flux(mixture.Udm())); + surfaceScalarField phir(fvc::flux(relativeVelocity->Udm())); if (nAlphaSubCycles > 1) { diff --git a/applications/solvers/multiphase/driftFluxFoam/createFields.H b/applications/solvers/multiphase/driftFluxFoam/createFields.H index 4573153cdf..9762177338 100644 --- a/applications/solvers/multiphase/driftFluxFoam/createFields.H +++ b/applications/solvers/multiphase/driftFluxFoam/createFields.H @@ -35,7 +35,7 @@ volVectorField U Info<< "Reading incompressibleTwoPhaseInteractingMixture\n" << endl; -incompressibleTwoPhaseInteractingMixture mixture(U, phi, g); +incompressibleTwoPhaseInteractingMixture mixture(U, phi); volScalarField& alpha1(mixture.alpha1()); const volScalarField& rho(mixture.rho()); @@ -55,6 +55,13 @@ surfaceScalarField rhoPhi ); +// Dispersed phase relative velocity model +autoPtr relativeVelocity +( + relativeVelocityModel::New(mixture, mixture, g) +); + + // Construct compressible turbulence model autoPtr turbulence ( @@ -95,6 +102,7 @@ mesh.schemes().setFluxRequired(alpha1.name()); // MULES Correction tmp talphaPhiCorr0; +#include "createMRF.H" #include "createFvModels.H" #include "createFvConstraints.H" @@ -102,7 +110,7 @@ tmp talphaPhiCorr0; // used for ddtCorr with MRF autoPtr Uf; -if (mixture.MRF().size()) +if (MRF.size()) { Info<< "Constructing face momentum Uf" << endl; diff --git a/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C b/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C index 21fad8c389..8090a07bf9 100644 --- a/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C +++ b/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C @@ -38,6 +38,7 @@ Description #include "CMULES.H" #include "subCycle.H" #include "incompressibleTwoPhaseInteractingMixture.H" +#include "relativeVelocityModel.H" #include "momentumTransportModel.H" #include "compressibleMomentumTransportModels.H" #include "pimpleControl.H" @@ -105,7 +106,7 @@ int main(int argc, char *argv[]) #include "alphaEqnSubCycle.H" - mixture.correct(); + relativeVelocity->correct(); if (pimple.predictTransport()) { diff --git a/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.C b/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.C index 985068c467..2a6d65779a 100644 --- a/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.C +++ b/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,8 +25,6 @@ License #include "incompressibleTwoPhaseInteractingMixture.H" #include "mixtureViscosityModel.H" -#include "relativeVelocityModel.H" -#include "fvcDiv.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -43,25 +41,19 @@ Foam::incompressibleTwoPhaseInteractingMixture:: incompressibleTwoPhaseInteractingMixture ( volVectorField& U, - const surfaceScalarField& phi, - const uniformDimensionedVectorField& g + const surfaceScalarField& phi ) : twoPhaseMixture(U.mesh()), U_(U), - muModel_(mixtureViscosityModel::New(*this)), nucModel_(viscosityModel::New(U.mesh(), phase2Name())), + muModel_(mixtureViscosityModel::New(*this)), - rhod_("rho", dimDensity, muModel_()), rhoc_("rho", dimDensity, nucModel_()), - dd_ - ( - "d", - dimLength, - muModel_->lookupOrDefault("d", 0.0) - ), + rhod_("rho", dimDensity, muModel_()), + alphaMax_(lookupOrDefault("alphaMax", 1.0)), rho_ @@ -78,22 +70,18 @@ incompressibleTwoPhaseInteractingMixture dimensionedScalar("rho", dimDensity, 0) ), - mu_ + nu_ ( IOobject ( - "mu", + "nu", U_.time().name(), U_.db() ), U_.mesh(), - dimensionedScalar(dimensionSet(1, -1, -1, 0, 0), 0), + dimensionedScalar(dimViscosity, 0), calculatedFvPatchScalarField::typeName - ), - - MRF_(U.mesh()), - - UdmModel_(relativeVelocityModel::New(*this, *this, g)) + ) { correct(); } @@ -108,13 +96,6 @@ Foam::incompressibleTwoPhaseInteractingMixture:: // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // -const Foam::volScalarField& -Foam::incompressibleTwoPhaseInteractingMixture::alphad() const -{ - return alpha1(); -} - - const Foam::volScalarField& Foam::incompressibleTwoPhaseInteractingMixture::alphac() const { @@ -122,24 +103,10 @@ Foam::incompressibleTwoPhaseInteractingMixture::alphac() const } -const Foam::mixtureViscosityModel& -Foam::incompressibleTwoPhaseInteractingMixture::muModel() const +const Foam::volScalarField& +Foam::incompressibleTwoPhaseInteractingMixture::alphad() const { - return muModel_(); -} - - -const Foam::viscosityModel& -Foam::incompressibleTwoPhaseInteractingMixture::nucModel() const -{ - return nucModel_(); -} - - -const Foam::dimensionedScalar& -Foam::incompressibleTwoPhaseInteractingMixture::rhod() const -{ - return rhod_; + return alpha1(); } @@ -151,9 +118,9 @@ Foam::incompressibleTwoPhaseInteractingMixture::rhoc() const const Foam::dimensionedScalar& -Foam::incompressibleTwoPhaseInteractingMixture::dd() const +Foam::incompressibleTwoPhaseInteractingMixture::rhod() const { - return dd_; + return rhod_; } @@ -177,60 +144,24 @@ Foam::incompressibleTwoPhaseInteractingMixture::rho() const } -Foam::tmp -Foam::incompressibleTwoPhaseInteractingMixture::mu() const -{ - return mu_; -} - - -Foam::tmp -Foam::incompressibleTwoPhaseInteractingMixture::mu(const label patchi) const -{ - return mu_.boundaryField()[patchi]; -} - - Foam::tmp Foam::incompressibleTwoPhaseInteractingMixture::nu() const { - return mu_/rho_; + return nu_; } Foam::tmp Foam::incompressibleTwoPhaseInteractingMixture::nu(const label patchi) const { - return mu_.boundaryField()[patchi]/rho_.boundaryField()[patchi]; -} - - -const Foam::IOMRFZoneList& -Foam::incompressibleTwoPhaseInteractingMixture::MRF() const -{ - return MRF_; -} - - -const Foam::volVectorField& -Foam::incompressibleTwoPhaseInteractingMixture::Udm() const -{ - return UdmModel_->Udm(); -} - - -Foam::tmp -Foam::incompressibleTwoPhaseInteractingMixture::divTauDm() const -{ - return fvc::div(UdmModel_->tauDm()); + return nu_.boundaryField()[patchi]; } void Foam::incompressibleTwoPhaseInteractingMixture::correct() { rho_ = alpha1()*rhod_ + alpha2()*rhoc_; - mu_ = muModel_->mu(rhoc_*nucModel_->nu(), U_); - UdmModel_->correct(); + nu_ = muModel_->mu(rhoc_*nucModel_->nu(), U_)/rho_; } @@ -240,17 +171,10 @@ bool Foam::incompressibleTwoPhaseInteractingMixture::read() { if (muModel_->read() || nucModel_->read()) { - muModel_->lookup("rho") >> rhod_; nucModel_->lookup("rho") >> rhoc_; + muModel_->lookup("rho") >> rhod_; - dd_ = dimensionedScalar - ( - "d", - dimLength, - muModel_->lookupOrDefault("d", 0) - ); - - alphaMax_ = muModel_->lookupOrDefault( "alphaMax", 1.0); + alphaMax_ = muModel_->lookupOrDefault("alphaMax", 1.0); return true; } diff --git a/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.H b/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.H index dc8738e54e..ed180507a7 100644 --- a/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.H +++ b/applications/solvers/multiphase/driftFluxFoam/incompressibleTwoPhaseInteractingMixture/incompressibleTwoPhaseInteractingMixture.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,8 +39,6 @@ SourceFiles #include "twoPhaseMixture.H" #include "viscosityModel.H" -#include "uniformDimensionedFields.H" -#include "IOMRFZoneList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -48,7 +46,6 @@ namespace Foam { class mixtureViscosityModel; -class relativeVelocityModel; /*---------------------------------------------------------------------------*\ Class incompressibleTwoPhaseInteractingMixture Declaration @@ -63,27 +60,26 @@ class incompressibleTwoPhaseInteractingMixture volVectorField& U_; - autoPtr muModel_; + //- Continuous phase viscosity model autoPtr nucModel_; - dimensionedScalar rhod_; + //- Mixture viscosity model + autoPtr muModel_; + + //- Continuous phase density dimensionedScalar rhoc_; - //- Optional diameter of the dispersed phase particles - dimensionedScalar dd_; + //- Dispersed phase density + dimensionedScalar rhod_; //- Optional maximum dispersed phase-fraction (e.g. packing limit) scalar alphaMax_; + //- Mixture density volScalarField rho_; - volScalarField mu_; - - //- Optional MRF zones - IOMRFZoneList MRF_; - - //- Dispersed phase relative velocity model - autoPtr UdmModel_; + //- Mixture kinematic viscosity + volScalarField nu_; public: @@ -97,8 +93,7 @@ public: incompressibleTwoPhaseInteractingMixture ( volVectorField& U, - const surfaceScalarField& phi, - const uniformDimensionedVectorField& g + const surfaceScalarField& phi ); @@ -114,20 +109,11 @@ public: //- Return const-access to the dispersed phase-fraction const volScalarField& alphad() const; - //- Return const-access to the mixture viscosityModel - const mixtureViscosityModel& muModel() const; - - //- Return const-access to the continuous-phase viscosityModel - const viscosityModel& nucModel() const; - - //- Return const-access to the dispersed-phase density - const dimensionedScalar& rhod() const; - //- Return const-access to continuous-phase density const dimensionedScalar& rhoc() const; - //- Return the diameter of the dispersed-phase particles - const dimensionedScalar& dd() const; + //- Return const-access to the dispersed-phase density + const dimensionedScalar& rhod() const; //- Optional maximum phase-fraction (e.g. packing limit) // Defaults to 1 @@ -139,27 +125,12 @@ public: //- Return the mixture density virtual const volScalarField& rho() const; - //- Return the dynamic mixture viscosity - tmp mu() const; - - //- Return the dynamic mixture viscosity for patch - virtual tmp mu(const label patchi) const; - //- Return the mixture viscosity virtual tmp nu() const; //- Return the mixture viscosity for patch virtual tmp nu(const label patchi) const; - //- Return MRF zones - const IOMRFZoneList& MRF() const; - - //- Return the diffusion velocity of the dispersed phase - const volVectorField& Udm() const; - - //- Return the div stress tensor due to the phase transport - tmp divTauDm() const; - //- Correct the laminar viscosity virtual void correct(); diff --git a/applications/solvers/multiphase/driftFluxFoam/pEqn.H b/applications/solvers/multiphase/driftFluxFoam/pEqn.H index f75940186e..edf0e963aa 100644 --- a/applications/solvers/multiphase/driftFluxFoam/pEqn.H +++ b/applications/solvers/multiphase/driftFluxFoam/pEqn.H @@ -8,7 +8,7 @@ fvc::flux(HbyA) + fvc::interpolate(rho*rAU)*fvc::ddtCorr(U, phi, Uf) ); - mixture.MRF().makeRelative(phiHbyA); + MRF.makeRelative(phiHbyA); adjustPhi(phiHbyA, U, p_rgh); surfaceScalarField phig @@ -21,7 +21,7 @@ phiHbyA += phig; // Update the pressure BCs to ensure flux consistency - constrainPressure(p_rgh, U, phiHbyA, rAUf, mixture.MRF()); + constrainPressure(p_rgh, U, phiHbyA, rAUf, MRF); while (pimple.correctNonOrthogonal()) { @@ -67,5 +67,5 @@ } // Correct Uf for MRF - fvc::correctUf(Uf, U, phi, mixture.MRF()); + fvc::correctUf(Uf, U, phi, MRF); } diff --git a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C index 804a954c59..51ca423948 100644 --- a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C +++ b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -28,6 +28,7 @@ License #include "slipFvPatchFields.H" #include "partialSlipFvPatchFields.H" #include "fvcGrad.H" +#include "fvcDiv.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -177,4 +178,10 @@ Foam::tmp Foam::relativeVelocityModel::tauDm() const } +Foam::tmp Foam::relativeVelocityModel::divDevTau() const +{ + return fvc::div(tauDm()); +} + + // ************************************************************************* // diff --git a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H index 56c75b0acc..d4cb69c454 100644 --- a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H +++ b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -137,6 +137,9 @@ public: //- Return the stress tensor due to the phase transport tmp tauDm() const; + //- Return the div stress tensor due to the phase transport + tmp divDevTau() const; + //- Update the diffusion velocity virtual void correct() = 0; diff --git a/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C b/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C index 17c428def2..6d968b911c 100644 --- a/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C +++ b/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2013-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -361,8 +361,16 @@ void Foam::MULES::limiterCorr } } - psiMaxn = min(psiMaxn + extremaCoeff*(psiMax - psiMin), psiMax); - psiMinn = max(psiMinn - extremaCoeff*(psiMax - psiMin), psiMin); + if (extremaCoeff > 0) + { + psiMaxn = min(psiMaxn + extremaCoeff*(psiMax - psiMin), psiMax); + psiMinn = max(psiMinn - extremaCoeff*(psiMax - psiMin), psiMin); + } + else + { + psiMaxn = min(psiMaxn, psiMax); + psiMinn = max(psiMinn, psiMin); + } if (smoothLimiter > small) { diff --git a/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/fvSolution b/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/fvSolution index 58d7ae6618..678e64fbd8 100644 --- a/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/fvSolution +++ b/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/fvSolution @@ -25,8 +25,6 @@ solvers nLimiterIter 3; alphaApplyPrevCorr yes; - boundaryExtremaCoeff 1; - solver smoothSolver; smoother symGaussSeidel; tolerance 1e-6;