From a59781b9e7e7f72af65bc2d2ffca8a00f58f5394 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Mon, 26 Mar 2018 10:32:34 +0100 Subject: [PATCH] dragModels: Added AttouFerschneider model for trickle beds Also added tutorial case demonstrating usage. Note that the new drag models are symmetric and should be used without any blending. This work was supported by Georg Skillas and Zhen Li, at Evonik --- .../interfacialModels/Make/files | 1 + .../AttouFerschneider/AttouFerschneider.C | 179 ++++++++++++++++ .../AttouFerschneider/AttouFerschneider.H | 155 ++++++++++++++ .../laminar/trickleBed/0/T.air | 29 +++ .../laminar/trickleBed/0/T.solid | 29 +++ .../laminar/trickleBed/0/T.water | 29 +++ .../laminar/trickleBed/0/U.air | 29 +++ .../laminar/trickleBed/0/U.water | 29 +++ .../laminar/trickleBed/0/alpha.air.orig | 29 +++ .../laminar/trickleBed/0/alpha.solid.orig | 29 +++ .../laminar/trickleBed/0/alpha.water.orig | 29 +++ .../laminar/trickleBed/0/p | 30 +++ .../laminar/trickleBed/0/p_rgh | 30 +++ .../laminar/trickleBed/Allrun | 11 + .../laminar/trickleBed/constant/g | 22 ++ .../trickleBed/constant/phaseProperties | 193 ++++++++++++++++++ .../constant/thermophysicalProperties.air | 48 +++++ .../constant/thermophysicalProperties.solid | 52 +++++ .../constant/thermophysicalProperties.water | 53 +++++ .../constant/turbulenceProperties.air | 20 ++ .../constant/turbulenceProperties.water | 20 ++ .../laminar/trickleBed/system/blockMeshDict | 61 ++++++ .../laminar/trickleBed/system/controlDict | 54 +++++ .../laminar/trickleBed/system/fvSchemes | 61 ++++++ .../laminar/trickleBed/system/fvSolution | 78 +++++++ .../laminar/trickleBed/system/setFieldsDict | 40 ++++ 26 files changed, 1340 insertions(+) create mode 100644 applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.C create mode 100644 applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.H create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.air create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.solid create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.water create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.air create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.water create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.air.orig create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.solid.orig create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.water.orig create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p_rgh create mode 100755 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/Allrun create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/g create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.air create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.solid create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.water create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.air create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.water create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/blockMeshDict create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/controlDict create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSchemes create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSolution create mode 100644 tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/setFieldsDict diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files index 14ed51d6ba..3cf1a5d3cf 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files +++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files @@ -15,6 +15,7 @@ dragModels/Tenneti/Tenneti.C dragModels/TomiyamaKataokaZunSakaguchi/TomiyamaKataokaZunSakaguchi.C dragModels/WenYu/WenYu.C dragModels/IshiiZuber/IshiiZuber.C +dragModels/AttouFerschneider/AttouFerschneider.C swarmCorrections/swarmCorrection/swarmCorrection.C swarmCorrections/swarmCorrection/newSwarmCorrection.C diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.C b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.C new file mode 100644 index 0000000000..bef8afa3ba --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.C @@ -0,0 +1,179 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2018 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 . + +\*---------------------------------------------------------------------------*/ + +#include "AttouFerschneider.H" +#include "phasePair.H" +#include "phaseSystem.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace dragModels +{ + defineTypeNameAndDebug(AttouFerschneider, 0); + addToRunTimeSelectionTable(dragModel, AttouFerschneider, dictionary); +} +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +Foam::tmp +Foam::dragModels::AttouFerschneider::KGasLiquid +( + const phaseModel& gas, + const phaseModel& liquid +) const +{ + const phaseModel& solid = gas.fluid().phases()[solidName_]; + + const volScalarField oneMinusGas(max(1 - gas, liquid.residualAlpha())); + const volScalarField cbrtR(solid/oneMinusGas); + const volScalarField magURel(mag(gas.U() - liquid.U())); + + return + E2_*gas.mu()*sqr(oneMinusGas/solid.d())*sqr(cbrtR) + /max(gas, gas.residualAlpha()) + + E2_*gas.rho()*magURel*(1 - gas)/solid.d()*cbrtR; +} + + +Foam::tmp +Foam::dragModels::AttouFerschneider::KGasSolid +( + const phaseModel& gas, + const phaseModel& solid +) const +{ + const volScalarField oneMinusGas(max(1 - gas, solid.residualAlpha())); + const volScalarField cbrtR(solid/oneMinusGas); + + return + E1_*gas.mu()*sqr(oneMinusGas/solid.d())*sqr(cbrtR) + /max(gas, gas.residualAlpha()) + + E2_*gas.rho()*mag(gas.U())*(1 - gas)/solid.d()*cbrtR; +} + + +Foam::tmp +Foam::dragModels::AttouFerschneider::KLiquidSolid +( + const phaseModel& liquid, + const phaseModel& solid +) const +{ + const phaseModel& gas = liquid.fluid().phases()[gasName_]; + + return + E1_*liquid.mu()*sqr(max(solid, solid.residualAlpha())/solid.d()) + /max(liquid, liquid.residualAlpha()) + + E2_*liquid.rho()*mag(gas.U())*solid/solid.d(); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::dragModels::AttouFerschneider::AttouFerschneider +( + const dictionary& dict, + const phasePair& pair, + const bool registerObject +) +: + dragModel(dict, pair, registerObject), + gasName_(dict.lookup("gas")), + liquidName_(dict.lookup("liquid")), + solidName_(dict.lookup("solid")), + E1_("E1", dimless, dict), + E2_("E1", dimless, dict) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::dragModels::AttouFerschneider::~AttouFerschneider() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp +Foam::dragModels::AttouFerschneider::CdRe() const +{ + FatalErrorInFunction + << "Not implemented." + << "Drag coefficient is not defined for the AttouFerschneider model." + << exit(FatalError); + + return tmp(nullptr); +} + + +Foam::tmp +Foam::dragModels::AttouFerschneider::K() const +{ + switch (Pair::compare(pair_, phasePairKey(gasName_, liquidName_))) + { + case 1: + return KGasLiquid(pair_.phase1(), pair_.phase2()); + case -1: + return KGasLiquid(pair_.phase2(), pair_.phase1()); + } + + switch (Pair::compare(pair_, phasePairKey(gasName_, solidName_))) + { + case 1: + return KGasSolid(pair_.phase1(), pair_.phase2()); + case -1: + return KGasSolid(pair_.phase2(), pair_.phase1()); + } + + switch (Pair::compare(pair_, phasePairKey(liquidName_, solidName_))) + { + case 1: + return KLiquidSolid(pair_.phase1(), pair_.phase2()); + case -1: + return KLiquidSolid(pair_.phase2(), pair_.phase1()); + } + + FatalErrorInFunction + << "The pair does not contain two of out of the gas, liquid and solid " + << "phase models." + << exit(FatalError); + + return tmp(nullptr); +} + + +Foam::tmp +Foam::dragModels::AttouFerschneider::Kf() const +{ + return fvc::interpolate(K()); +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.H b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.H new file mode 100644 index 0000000000..453321f035 --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/dragModels/AttouFerschneider/AttouFerschneider.H @@ -0,0 +1,155 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2018 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 . + +Class + Foam::dragModels::AttouFerschneider + +Description + Attou and Ferschneider's Drag model for film flow through packed beds. The + implementation follows the desciption of Gunjal and Ranade, who, in the + reference below, formulate the model in more convenient terms. + + Reference: + \verbatim + "Modeling of laboratory and commercial scale hydro-processing reactors + using CFD" + Gunjal, P.R., Ranade, V.V., + Chemical Engineering Science + Volume 62, Issues 18-20, September-October 2007, pp. 5512 - 5526 + \endverbatim + +SourceFiles + AttouFerschneider.C + +\*---------------------------------------------------------------------------*/ + +#ifndef AttouFerschneider_H +#define AttouFerschneider_H + +#include "dragModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class phasePair; +class phaseModel; + +namespace dragModels +{ + +/*---------------------------------------------------------------------------*\ + Class AttouFerschneider Declaration +\*---------------------------------------------------------------------------*/ + +class AttouFerschneider +: + public dragModel +{ + // Private data + + //- Name of the gaseous phase + const word gasName_; + + //- Name of the liquidphase + const word liquidName_; + + //- Name of the solid phase + const word solidName_; + + //- Ergun constant 1 + const dimensionedScalar E1_; + + //- Ergun constant 2 + const dimensionedScalar E2_; + + + // Private member functions + + //- Return the momentum transfer coefficient between gas and liquid + virtual tmp KGasLiquid + ( + const phaseModel& gas, + const phaseModel& liquid + ) const; + + //- Return the momentum transfer coefficient between gas and solid + virtual tmp KGasSolid + ( + const phaseModel& gas, + const phaseModel& solid + ) const; + + //- Return the momentum transfer coefficient between liquid and solid + virtual tmp KLiquidSolid + ( + const phaseModel& liquid, + const phaseModel& solid + ) const; + + +public: + + //- Runtime type information + TypeName("AttouFerschneider"); + + + // Constructors + + //- Construct from a dictionary and a phase pair + AttouFerschneider + ( + const dictionary& dict, + const phasePair& pair, + const bool registerObject + ); + + + //- Destructor + virtual ~AttouFerschneider(); + + + // Member Functions + + //- Drag coefficient + virtual tmp CdRe() const; + + //- The drag coefficient used in the momentum equation + virtual tmp K() const; + + //- The drag coefficient used in the face-momentum equations + virtual tmp Kf() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace dragModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.air b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.air new file mode 100644 index 0000000000..77f13e270e --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.air @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + "(bottom|top|walls)" + { + type zeroGradient; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.solid b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.solid new file mode 100644 index 0000000000..ad72183d7d --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.solid @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + "(bottom|top|walls)" + { + type zeroGradient; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.water b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.water new file mode 100644 index 0000000000..86e7f20818 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/T.water @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T.water; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + "(bottom|top|walls)" + { + type zeroGradient; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.air b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.air new file mode 100644 index 0000000000..7e419e9413 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.air @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class volVectorField; + object U.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + "(bottom|top|walls)" + { + type noSlip; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.water b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.water new file mode 100644 index 0000000000..2bf5abf150 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/U.water @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class volVectorField; + object U.water; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + "(bottom|top|walls)" + { + type noSlip; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.air.orig b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.air.orig new file mode 100644 index 0000000000..8e9abf899b --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.air.orig @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alpha.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.5; + +boundaryField +{ + "(bottom|top|walls)" + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.solid.orig b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.solid.orig new file mode 100644 index 0000000000..83652cfb3d --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.solid.orig @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alpha.solid; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.5; + +boundaryField +{ + "(bottom|top|walls)" + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.water.orig b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.water.orig new file mode 100644 index 0000000000..ea380a7cfe --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/alpha.water.orig @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alpha.water; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + "(bottom|top|walls)" + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p new file mode 100644 index 0000000000..14df0bd61d --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p @@ -0,0 +1,30 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + "(bottom|top|walls)" + { + type calculated; + value $internalField; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p_rgh b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p_rgh new file mode 100644 index 0000000000..182d4ef480 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/0/p_rgh @@ -0,0 +1,30 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p_rgh; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + "(bottom|top|walls)" + { + type fixedFluxPressure; + value $internalField; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/Allrun b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/Allrun new file mode 100755 index 0000000000..ed61ac5435 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/Allrun @@ -0,0 +1,11 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication setFields +runApplication $(getApplication) + +#------------------------------------------------------------------------------ diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/g b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/g new file mode 100644 index 0000000000..0cc222ca34 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/g @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + location "constant"; + object g; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -2 0 0 0 0]; +value (0 -9.81 0); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties new file mode 100644 index 0000000000..a34d27b991 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties @@ -0,0 +1,193 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object phaseProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +type heatAndMomentumTransferMultiphaseSystem; + +phases (air water solid); + +air +{ + type pureIsothermalPhaseModel; + diameterModel isothermal; + isothermalCoeffs + { + d0 3e-3; + p0 1e5; + } + + residualAlpha 1e-6; +} + +water +{ + type pureIsothermalPhaseModel; + diameterModel constant; + constantCoeffs + { + d 1e-4; + } + + residualAlpha 1e-6; +} + +solid +{ + type pureStationaryIsothermalPhaseModel; + diameterModel constant; + constantCoeffs + { + d 1e-3; + } + + residualAlpha 1e-6; +} + +blending +{ + default + { + type none; + continuousPhase none; + } +} + +surfaceTension +( + (air and water) + { + type constant; + sigma 0.07; + } + + (air and solid) + { + type constant; + sigma 0; + } + + (solid and water) + { + type constant; + sigma 0; + } +); + +aspectRatio +( + (air in water) + { + type constant; + E0 1.0; + } + + (water in air) + { + type constant; + E0 1.0; + } + + (air in solid) + { + type constant; + E0 1.0; + } + + (solid in air) + { + type constant; + E0 1.0; + } + + (water in solid) + { + type constant; + E0 1.0; + } + + (solid in water) + { + type constant; + E0 1.0; + } +); + +drag +( + (air and water) + { + type AttouFerschneider; + gas air; + liquid water; + solid solid; + E1 280; + E2 4.8; + swarmCorrection + { + type none; + } + } + + (air and solid) + { + type AttouFerschneider; + gas air; + liquid water; + solid solid; + E1 280; + E2 4.8; + swarmCorrection + { + type none; + } + } + + (water and solid) + { + type AttouFerschneider; + gas air; + liquid water; + solid solid; + E1 280; + E2 4.8; + swarmCorrection + { + type none; + } + } +); + +virtualMass +(); + +heatTransfer +(); + +lift +(); + +wallLubrication +(); + +turbulentDispersion +(); + +interfaceCompression +(); + +pMin 10000; + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.air b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.air new file mode 100644 index 0000000000..eb9bb8ab73 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.air @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState perfectGas; + specie specie; + energy sensibleInternalEnergy; +} + +mixture +{ + specie + { + molWeight 28.9; + } + thermodynamics + { + Cp 1007; + Hf 0; + } + transport + { + mu 1.84e-05; + Pr 0.7; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.solid b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.solid new file mode 100644 index 0000000000..19a2516e6b --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.solid @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties.solid; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState rhoConst; + specie specie; + energy sensibleInternalEnergy; +} + +mixture +{ + specie + { + molWeight 100; + } + equationOfState + { + rho 2500; + } + thermodynamics + { + Cp 6000; + Hf 0; + } + transport + { + mu 0; + Pr 1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.water b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.water new file mode 100644 index 0000000000..31d8cf0589 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/thermophysicalProperties.water @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties.water; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState perfectFluid; + specie specie; + energy sensibleInternalEnergy; +} + +mixture +{ + specie + { + molWeight 18; + } + equationOfState + { + R 3000; + rho0 1027; + } + thermodynamics + { + Cp 4195; + Hf 0; + } + transport + { + mu 3.645e-4; + Pr 2.289; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.air b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.air new file mode 100644 index 0000000000..1296429b72 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.air @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.water b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.water new file mode 100644 index 0000000000..7f0d75a82f --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/turbulenceProperties.water @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties.water; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/blockMeshDict b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/blockMeshDict new file mode 100644 index 0000000000..b3ecd3c924 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/blockMeshDict @@ -0,0 +1,61 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (0 0 0) + (0.15 0 0) + (0.15 1 0) + (0 1 0) + (0 0 0.1) + (0.15 0 0.1) + (0.15 1 0.1) + (0 1 0.1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (25 75 1) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + patch top + ( + (3 7 6 2) + ) + patch bottom + ( + (1 5 4 0) + ) + wall walls + ( + (0 4 7 3) + (2 6 5 1) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/controlDict b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/controlDict new file mode 100644 index 0000000000..bfe74d9a29 --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/controlDict @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application reactingMultiphaseEulerFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 100; + +deltaT 0.5; + +writeControl runTime; + +writeInterval 1; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +maxCo 0.5; + +maxDeltaT 1; + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSchemes b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSchemes new file mode 100644 index 0000000000..3356dda13b --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSchemes @@ -0,0 +1,61 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + + "div\(phi,alpha.*\)" Gauss vanLeer; + "div\(phir,alpha.*,alpha.*\)" Gauss vanLeer; + + "div\(alphaRhoPhi.*,U.*\)" Gauss limitedLinearV 1; + "div\(phi.*,U.*\)" Gauss limitedLinearV 1; + + "div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1; + "div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1; + "div\(alphaPhi.*,p\)" Gauss limitedLinear 1; + + "div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear uncorrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default uncorrected; +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSolution b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSolution new file mode 100644 index 0000000000..bed262448b --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/fvSolution @@ -0,0 +1,78 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + "alpha.*" + { + nAlphaCorr 1; + nAlphaSubCycles 2; + } + + p_rgh + { + solver GAMG; + smoother DIC; + tolerance 1e-8; + relTol 0; + } + + p_rghFinal + { + $p_rgh; + relTol 0; + } + + "U.*" + { + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-5; + relTol 0; + minIter 1; + } + + "e.*" + { + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-8; + relTol 0; + minIter 1; + } +} + +PIMPLE +{ + nOuterCorrectors 3; + nCorrectors 1; + nNonOrthogonalCorrectors 0; + pRefCell 0; + pRefValue 1e5; + partialElimination true; +} + +relaxationFactors +{ + equations + { + ".*" 1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/setFieldsDict b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/setFieldsDict new file mode 100644 index 0000000000..72c3cb866a --- /dev/null +++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/system/setFieldsDict @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +defaultFieldValues +( + volScalarFieldValue alpha.air 0.5 + volScalarFieldValue alpha.water 0.0 + volScalarFieldValue alpha.solid 0.5 +); + +regions +( + boxToCell + { + box (0 0.5001 -0.1) (0.15 1.0 0.1); + fieldValues + ( + volScalarFieldValue alpha.air 0.4 + volScalarFieldValue alpha.water 0.1 + volScalarFieldValue alpha.solid 0.5 + ); + } +); + + +// ************************************************************************* //