icoFoam/nonNewtonianIcoFoam: Update to use pisoControl

This commit is contained in:
Henry
2015-02-21 21:39:01 +00:00
parent bd3cbd4c37
commit 1dcf50d4b4
4 changed files with 38 additions and 37 deletions

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -30,15 +30,18 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "fvCFD.H" #include "fvCFD.H"
#include "pisoControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createMesh.H" #include "createMesh.H"
pisoControl piso(mesh);
#include "createFields.H" #include "createFields.H"
#include "initContinuityErrs.H" #include "initContinuityErrs.H"
@ -50,9 +53,10 @@ int main(int argc, char *argv[])
{ {
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
#include "readPISOControls.H"
#include "CourantNo.H" #include "CourantNo.H"
// Momentum predictor
fvVectorMatrix UEqn fvVectorMatrix UEqn
( (
fvm::ddt(U) fvm::ddt(U)
@ -60,11 +64,13 @@ int main(int argc, char *argv[])
- fvm::laplacian(nu, U) - fvm::laplacian(nu, U)
); );
solve(UEqn == -fvc::grad(p)); if (piso.momentumPredictor())
{
solve(UEqn == -fvc::grad(p));
}
// --- PISO loop // --- PISO loop
while (piso.correct())
for (int corr=0; corr<nCorr; corr++)
{ {
volScalarField rAU(1.0/UEqn.A()); volScalarField rAU(1.0/UEqn.A());
@ -79,17 +85,21 @@ int main(int argc, char *argv[])
adjustPhi(phiHbyA, U, p); adjustPhi(phiHbyA, U, p);
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) // Non-orthogonal pressure corrector loop
while (piso.correctNonOrthogonal())
{ {
// Pressure corrector
fvScalarMatrix pEqn fvScalarMatrix pEqn
( (
fvm::laplacian(rAU, p) == fvc::div(phiHbyA) fvm::laplacian(rAU, p) == fvc::div(phiHbyA)
); );
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve();
if (nonOrth == nNonOrthCorr) pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (piso.finalNonOrthogonalIter())
{ {
phi = phiHbyA - pEqn.flux(); phi = phiHbyA - pEqn.flux();
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -31,15 +31,18 @@ Description
#include "fvCFD.H" #include "fvCFD.H"
#include "singlePhaseTransportModel.H" #include "singlePhaseTransportModel.H"
#include "pisoControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createMeshNoClear.H" #include "createMeshNoClear.H"
pisoControl piso(mesh);
#include "createFields.H" #include "createFields.H"
#include "initContinuityErrs.H" #include "initContinuityErrs.H"
@ -51,11 +54,12 @@ int main(int argc, char *argv[])
{ {
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
#include "readPISOControls.H"
#include "CourantNo.H" #include "CourantNo.H"
fluid.correct(); fluid.correct();
// Momentum predictor
fvVectorMatrix UEqn fvVectorMatrix UEqn
( (
fvm::ddt(U) fvm::ddt(U)
@ -64,11 +68,13 @@ int main(int argc, char *argv[])
- (fvc::grad(U) & fvc::grad(fluid.nu())) - (fvc::grad(U) & fvc::grad(fluid.nu()))
); );
solve(UEqn == -fvc::grad(p)); if (piso.momentumPredictor())
{
solve(UEqn == -fvc::grad(p));
}
// --- PISO loop // --- PISO loop
while (piso.correct())
for (int corr=0; corr<nCorr; corr++)
{ {
volScalarField rAU(1.0/UEqn.A()); volScalarField rAU(1.0/UEqn.A());
@ -83,17 +89,21 @@ int main(int argc, char *argv[])
adjustPhi(phiHbyA, U, p); adjustPhi(phiHbyA, U, p);
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) // Non-orthogonal pressure corrector loop
while (piso.correctNonOrthogonal())
{ {
// Pressure corrector
fvScalarMatrix pEqn fvScalarMatrix pEqn
( (
fvm::laplacian(rAU, p) == fvc::div(phiHbyA) fvm::laplacian(rAU, p) == fvc::div(phiHbyA)
); );
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve();
if (nonOrth == nNonOrthCorr) pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (piso.finalNonOrthogonalIter())
{ {
phi = phiHbyA - pEqn.flux(); phi = phiHbyA - pEqn.flux();
} }

View File

@ -41,7 +41,6 @@ Description
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createMesh.H" #include "createMesh.H"
@ -63,7 +62,6 @@ int main(int argc, char *argv[])
// Pressure-velocity PISO corrector // Pressure-velocity PISO corrector
{ {
// Momentum predictor // Momentum predictor
fvVectorMatrix UEqn fvVectorMatrix UEqn
( (
fvm::ddt(U) fvm::ddt(U)

View File

@ -1,17 +0,0 @@
const dictionary& pisoDict = mesh.solutionDict().subDict("PISO");
const int nOuterCorr =
pisoDict.lookupOrDefault<int>("nOuterCorrectors", 1);
const int nCorr =
pisoDict.lookupOrDefault<int>("nCorrectors", 1);
const int nNonOrthCorr =
pisoDict.lookupOrDefault<int>("nNonOrthogonalCorrectors", 0);
const bool momentumPredictor =
pisoDict.lookupOrDefault("momentumPredictor", true);
const bool transonic =
pisoDict.lookupOrDefault("transonic", false);