From 7841318b76a28442fd12cd62c16dd407d7e68c0a Mon Sep 17 00:00:00 2001 From: Henry <Henry> Date: Mon, 19 Mar 2012 11:55:48 +0000 Subject: [PATCH] twoPhaseEulerFoam: Add MRF support and remove MRFTwoPhaseEulerFoam --- .../multiphase/twoPhaseEulerFoam/Allwclean | 1 - .../multiphase/twoPhaseEulerFoam/Allwmake | 1 - .../MRFTwoPhaseEulerFoam.C | 119 ------------------ .../MRFtwoPhaseEulerFoam/Make/files | 3 - .../MRFtwoPhaseEulerFoam/Make/options | 17 --- .../MRFtwoPhaseEulerFoam/UEqns.H | 99 --------------- .../MRFtwoPhaseEulerFoam/createMRFZones.H | 4 - .../MRFtwoPhaseEulerFoam/pEqn.H | 118 ----------------- .../multiphase/twoPhaseEulerFoam/UEqns.H | 4 +- .../twoPhaseEulerFoam/createFields.H | 6 + .../multiphase/twoPhaseEulerFoam/pEqn.H | 20 ++- .../twoPhaseEulerFoam/twoPhaseEulerFoam.C | 4 +- 12 files changed, 25 insertions(+), 371 deletions(-) delete mode 100644 applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/MRFTwoPhaseEulerFoam.C delete mode 100644 applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/files delete mode 100644 applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/options delete mode 100644 applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/UEqns.H delete mode 100644 applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H delete mode 100644 applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/pEqn.H diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean index 63db39ff056..cc138bc068e 100755 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean @@ -6,6 +6,5 @@ wclean libso phaseModel wclean libso interfacialModels wclean libso kineticTheoryModels wclean -wclean MRFtwoPhaseEulerFoam # ----------------------------------------------------------------- end-of-file diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake index faf438d0bdd..29294d166a9 100755 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake @@ -6,6 +6,5 @@ wmake libso phaseModel wmake libso interfacialModels wmake libso kineticTheoryModels wmake -wmake MRFtwoPhaseEulerFoam # ----------------------------------------------------------------- end-of-file diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/MRFTwoPhaseEulerFoam.C b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/MRFTwoPhaseEulerFoam.C deleted file mode 100644 index 357c7e413ab..00000000000 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/MRFTwoPhaseEulerFoam.C +++ /dev/null @@ -1,119 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -Application - twoPhaseEulerFoam - -Description - Solver for a system of 2 incompressible fluid phases with one phase - dispersed, e.g. gas bubbles in a liquid or solid particles in a gas. - -\*---------------------------------------------------------------------------*/ - -#include "fvCFD.H" -#include "nearWallDist.H" -#include "wallFvPatch.H" -#include "Switch.H" - -#include "IFstream.H" -#include "OFstream.H" - -#include "dragModel.H" -#include "phaseModel.H" -#include "kineticTheoryModel.H" - -#include "pimpleControl.H" -#include "MRFZones.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -int main(int argc, char *argv[]) -{ - #include "setRootCase.H" - - #include "createTime.H" - #include "createMesh.H" - #include "readGravitationalAcceleration.H" - #include "createFields.H" - #include "readPPProperties.H" - #include "initContinuityErrs.H" - #include "createMRFZones.H" - #include "readTimeControls.H" - #include "CourantNo.H" - #include "setInitialDeltaT.H" - - pimpleControl pimple(mesh); - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - Info<< "\nStarting time loop\n" << endl; - - while (runTime.run()) - { - #include "readTwoPhaseEulerFoamControls.H" - #include "CourantNos.H" - #include "setDeltaT.H" - - runTime++; - Info<< "Time = " << runTime.timeName() << nl << endl; - - // --- Pressure-velocity PIMPLE corrector loop - while (pimple.loop()) - { - #include "alphaEqn.H" - #include "liftDragCoeffs.H" - #include "UEqns.H" - - // --- Pressure corrector loop - while (pimple.correct()) - { - #include "pEqn.H" - - if (correctAlpha && !pimple.finalIter()) - { - #include "alphaEqn.H" - } - } - - #include "DDtU.H" - - if (pimple.turbCorr()) - { - #include "kEpsilon.H" - } - } - - #include "write.H" - - Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" - << " ClockTime = " << runTime.elapsedClockTime() << " s" - << nl << endl; - } - - Info<< "End\n" << endl; - - return 0; -} - - -// ************************************************************************* // diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/files b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/files deleted file mode 100644 index 45960722aef..00000000000 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -MRFTwoPhaseEulerFoam.C - -EXE = $(FOAM_APPBIN)/MRFTwoPhaseEulerFoam diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/options b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/options deleted file mode 100644 index b9b19059da6..00000000000 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/Make/options +++ /dev/null @@ -1,17 +0,0 @@ -EXE_INC = \ - -I.. \ - -I../../bubbleFoam \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ - -IturbulenceModel \ - -I../kineticTheoryModels/lnInclude \ - -I../interfacialModels/lnInclude \ - -I../phaseModel/lnInclude \ - -EXE_LIBS = \ - -lEulerianInterfacialModels \ - -lfiniteVolume \ - -lmeshTools \ - -lincompressibleTransportModels \ - -lphaseModel \ - -lkineticTheoryModel diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/UEqns.H b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/UEqns.H deleted file mode 100644 index 0c0cc1543a7..00000000000 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/UEqns.H +++ /dev/null @@ -1,99 +0,0 @@ -fvVectorMatrix U1Eqn(U1, U1.dimensions()*dimVol/dimTime); -fvVectorMatrix U2Eqn(U2, U2.dimensions()*dimVol/dimTime); - -{ - { - volTensorField gradU1T(T(fvc::grad(U1))); - - if (kineticTheory.on()) - { - kineticTheory.solve(gradU1T); - nuEff1 = kineticTheory.mu1()/rho1; - } - else // If not using kinetic theory is using Ct model - { - nuEff1 = sqr(Ct)*nut2 + nu1; - } - - volTensorField Rc1 - ( - "Rc1", - (((2.0/3.0)*I)*nuEff1)*tr(gradU1T) - nuEff1*gradU1T - ); - - if (kineticTheory.on()) - { - Rc1 -= ((kineticTheory.lambda()/rho1)*tr(gradU1T))*tensor(I); - } - - surfaceScalarField phiR1 - ( - -fvc::interpolate(nuEff1)*mesh.magSf()*fvc::snGrad(alpha1) - /fvc::interpolate(alpha1 + scalar(0.001)) - ); - - U1Eqn = - ( - (scalar(1) + Cvm*rho2*alpha2/rho1)* - ( - fvm::ddt(U1) - + fvm::div(phi1, U1, "div(phi1,U1)") - - fvm::Sp(fvc::div(phi1), U1) - ) - - - fvm::laplacian(nuEff1, U1) - + fvc::div(Rc1) - - + fvm::div(phiR1, U1, "div(phi1,U1)") - - fvm::Sp(fvc::div(phiR1), U1) - + (fvc::grad(alpha1)/(fvc::average(alpha1) + scalar(0.001)) & Rc1) - == - // g // Buoyancy term transfered to p-equation - - fvm::Sp(alpha2/rho1*K, U1) - //+ alpha2/rho1*K*U2 // Explicit drag transfered to p-equation - - alpha2/rho1*(liftCoeff - Cvm*rho2*DDtU2) - ); - mrfZones.addCoriolis(U1Eqn); - U1Eqn.relax(); - } - - { - volTensorField gradU2T(T(fvc::grad(U2))); - volTensorField Rc2 - ( - "Rc2", - (((2.0/3.0)*I)*nuEff2)*tr(gradU2T) - nuEff2*gradU2T - ); - - surfaceScalarField phiR2 - ( - -fvc::interpolate(nuEff2)*mesh.magSf()*fvc::snGrad(alpha2) - /fvc::interpolate(alpha2 + scalar(0.001)) - ); - - U2Eqn = - ( - (scalar(1) + Cvm*rho2*alpha1/rho2)* - ( - fvm::ddt(U2) - + fvm::div(phi2, U2, "div(phi2,U2)") - - fvm::Sp(fvc::div(phi2), U2) - ) - - - fvm::laplacian(nuEff2, U2) - + fvc::div(Rc2) - - + fvm::div(phiR2, U2, "div(phi2,U2)") - - fvm::Sp(fvc::div(phiR2), U2) - - + (fvc::grad(alpha2)/(fvc::average(alpha2) + scalar(0.001)) & Rc2) - == - // g // Buoyancy term transfered to p-equation - - fvm::Sp(alpha1/rho2*K, U2) - //+ alpha1/rho2*K*U1 // Explicit drag transfered to p-equation - + alpha1/rho2*(liftCoeff + Cvm*rho2*DDtU1) - ); - mrfZones.addCoriolis(U2Eqn); - U2Eqn.relax(); - } -} diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H deleted file mode 100644 index 4d5c2bab723..00000000000 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H +++ /dev/null @@ -1,4 +0,0 @@ - MRFZones mrfZones(mesh); - mrfZones.correctBoundaryVelocity(U1); - mrfZones.correctBoundaryVelocity(U2); - mrfZones.correctBoundaryVelocity(U); diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/pEqn.H b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/pEqn.H deleted file mode 100644 index 348cc847d71..00000000000 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/pEqn.H +++ /dev/null @@ -1,118 +0,0 @@ -{ - surfaceScalarField alpha1f(fvc::interpolate(alpha1)); - surfaceScalarField alpha2f(scalar(1) - alpha1f); - - volScalarField rAU1(1.0/U1Eqn.A()); - volScalarField rAU2(1.0/U2Eqn.A()); - - rAU1f = fvc::interpolate(rAU1); - surfaceScalarField rAU2f(fvc::interpolate(rAU2)); - - volVectorField HbyA1("HbyA1", U1); - HbyA1 = rAU1*U1Eqn.H(); - - volVectorField HbyA2("HbyA2", U2); - HbyA2 = rAU2*U2Eqn.H(); - - mrfZones.absoluteFlux(phi1.oldTime()); - mrfZones.absoluteFlux(phi1); - - mrfZones.absoluteFlux(phi2.oldTime()); - mrfZones.absoluteFlux(phi2); - - surfaceScalarField phiDrag1 - ( - fvc::interpolate(alpha2/rho1*K*rAU1)*phi2 + rAU1f*(g & mesh.Sf()) - ); - - if (g0.value() > 0.0) - { - phiDrag1 -= ppMagf*fvc::snGrad(alpha1)*mesh.magSf(); - } - - if (kineticTheory.on()) - { - phiDrag1 -= rAU1f*fvc::snGrad(kineticTheory.pa()/rho1)*mesh.magSf(); - } - - - surfaceScalarField phiDrag2 - ( - fvc::interpolate(alpha1/rho2*K*rAU2)*phi1 + rAU2f*(g & mesh.Sf()) - ); - - // Fix for gravity on outlet boundary. - forAll(p.boundaryField(), patchi) - { - if (isA<zeroGradientFvPatchScalarField>(p.boundaryField()[patchi])) - { - phiDrag1.boundaryField()[patchi] = 0.0; - phiDrag2.boundaryField()[patchi] = 0.0; - } - } - - surfaceScalarField phiHbyA1 - ( - "phiHbyA1", - (fvc::interpolate(HbyA1) & mesh.Sf()) - + fvc::ddtPhiCorr(rAU1, U1, phi1) - + phiDrag1 - ); - mrfZones.relativeFlux(phiHbyA1); - - surfaceScalarField phiHbyA2 - ( - "phiHbyA2", - (fvc::interpolate(HbyA2) & mesh.Sf()) - + fvc::ddtPhiCorr(rAU2, U2, phi2) - + phiDrag2 - ); - mrfZones.relativeFlux(phiHbyA2); - - mrfZones.relativeFlux(phi1.oldTime()); - mrfZones.relativeFlux(phi1); - mrfZones.relativeFlux(phi2.oldTime()); - mrfZones.relativeFlux(phi2); - - surfaceScalarField phiHbyA("phiHbyA", alpha1f*phiHbyA1 + alpha2f*phiHbyA2); - - surfaceScalarField Dp - ( - "Dp", - alpha1f*rAU1f/rho1 + alpha2f*rAU2f/rho2 - ); - - while (pimple.correctNonOrthogonal()) - { - fvScalarMatrix pEqn - ( - fvm::laplacian(Dp, p) == fvc::div(phiHbyA) - ); - - pEqn.setReference(pRefCell, pRefValue); - - pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter()))); - - if (pimple.finalNonOrthogonalIter()) - { - surfaceScalarField SfGradp(pEqn.flux()/Dp); - - phi1 = phiHbyA1 - rAU1f*SfGradp/rho1; - phi2 = phiHbyA2 - rAU2f*SfGradp/rho2; - phi = alpha1f*phi1 + alpha2f*phi2; - - p.relax(); - SfGradp = pEqn.flux()/Dp; - - U1 = HbyA1 + fvc::reconstruct(phiDrag1 - rAU1f*SfGradp/rho1); - U1.correctBoundaryConditions(); - - U2 = HbyA2 + fvc::reconstruct(phiDrag2 - rAU2f*SfGradp/rho2); - U2.correctBoundaryConditions(); - - U = alpha1*U1 + alpha2*U2; - } - } -} - -#include "continuityErrs.H" diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/UEqns.H b/applications/solvers/multiphase/twoPhaseEulerFoam/UEqns.H index 8d09ccd3ef0..0c0cc1543a7 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/UEqns.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/UEqns.H @@ -53,7 +53,7 @@ fvVectorMatrix U2Eqn(U2, U2.dimensions()*dimVol/dimTime); //+ alpha2/rho1*K*U2 // Explicit drag transfered to p-equation - alpha2/rho1*(liftCoeff - Cvm*rho2*DDtU2) ); - + mrfZones.addCoriolis(U1Eqn); U1Eqn.relax(); } @@ -93,7 +93,7 @@ fvVectorMatrix U2Eqn(U2, U2.dimensions()*dimVol/dimTime); //+ alpha1/rho2*K*U1 // Explicit drag transfered to p-equation + alpha1/rho2*(liftCoeff + Cvm*rho2*DDtU1) ); - + mrfZones.addCoriolis(U2Eqn); U2Eqn.relax(); } } diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H b/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H index b71c7849e5b..314d9b55ea6 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H @@ -93,16 +93,22 @@ dimensionedScalar Cvm ( + "Cvm", + dimless, transportProperties.lookup("Cvm") ); dimensionedScalar Cl ( + "Cl", + dimless, transportProperties.lookup("Cl") ); dimensionedScalar Ct ( + "Ct", + dimless, transportProperties.lookup("Ct") ); diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H b/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H index 91f8302d7ff..348cc847d71 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H @@ -14,6 +14,12 @@ volVectorField HbyA2("HbyA2", U2); HbyA2 = rAU2*U2Eqn.H(); + mrfZones.absoluteFlux(phi1.oldTime()); + mrfZones.absoluteFlux(phi1); + + mrfZones.absoluteFlux(phi2.oldTime()); + mrfZones.absoluteFlux(phi2); + surfaceScalarField phiDrag1 ( fvc::interpolate(alpha2/rho1*K*rAU1)*phi2 + rAU1f*(g & mesh.Sf()) @@ -29,6 +35,7 @@ phiDrag1 -= rAU1f*fvc::snGrad(kineticTheory.pa()/rho1)*mesh.magSf(); } + surfaceScalarField phiDrag2 ( fvc::interpolate(alpha1/rho2*K*rAU2)*phi1 + rAU2f*(g & mesh.Sf()) @@ -51,6 +58,7 @@ + fvc::ddtPhiCorr(rAU1, U1, phi1) + phiDrag1 ); + mrfZones.relativeFlux(phiHbyA1); surfaceScalarField phiHbyA2 ( @@ -59,6 +67,12 @@ + fvc::ddtPhiCorr(rAU2, U2, phi2) + phiDrag2 ); + mrfZones.relativeFlux(phiHbyA2); + + mrfZones.relativeFlux(phi1.oldTime()); + mrfZones.relativeFlux(phi1); + mrfZones.relativeFlux(phi2.oldTime()); + mrfZones.relativeFlux(phi2); surfaceScalarField phiHbyA("phiHbyA", alpha1f*phiHbyA1 + alpha2f*phiHbyA2); @@ -83,14 +97,8 @@ { surfaceScalarField SfGradp(pEqn.flux()/Dp); - phi1.boundaryField() == - (fvc::interpolate(U1) & mesh.Sf())().boundaryField(); phi1 = phiHbyA1 - rAU1f*SfGradp/rho1; - - phi2.boundaryField() == - (fvc::interpolate(U2) & mesh.Sf())().boundaryField(); phi2 = phiHbyA2 - rAU2f*SfGradp/rho2; - phi = alpha1f*phi1 + alpha2f*phi2; p.relax(); diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C index 19810a15f19..357c7e413ab 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -43,6 +43,7 @@ Description #include "kineticTheoryModel.H" #include "pimpleControl.H" +#include "MRFZones.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -56,6 +57,7 @@ int main(int argc, char *argv[]) #include "createFields.H" #include "readPPProperties.H" #include "initContinuityErrs.H" + #include "createMRFZones.H" #include "readTimeControls.H" #include "CourantNo.H" #include "setInitialDeltaT.H" -- GitLab