From 8e3e1808ec0ef83ed1229a8af70b6a3c46ab8258 Mon Sep 17 00:00:00 2001 From: Henry <Henry> Date: Mon, 16 Apr 2012 11:47:28 +0100 Subject: [PATCH] compressibleInterFoam: Added thermal support --- .../compressibleInterFoam/Make/files | 1 + .../multiphase/compressibleInterFoam/TEqn.H | 20 ++ .../compressibleInterDyMFoam.C | 8 +- .../compressibleInterDyMFoam/pEqn.H | 88 -------- .../compressibleInterFoam.C | 5 +- .../compressibleInterFoam/createFields.H | 105 ++++++++-- .../wallHeatTransferFvPatchScalarField.C | 184 +++++++++++++++++ .../wallHeatTransferFvPatchScalarField.H | 194 ++++++++++++++++++ .../multiphase/compressibleInterFoam/pEqn.H | 61 +++--- .../les/depthCharge2D/0/T.org | 34 +++ .../0/{alpha1.org => alphawater.org} | 2 +- .../les/depthCharge2D/Allclean | 3 +- .../les/depthCharge2D/Allrun | 3 +- .../constant/polyMesh/blockMeshDict | 34 ++- .../constant/transportProperties | 14 +- .../les/depthCharge2D/system/controlDict | 2 +- .../les/depthCharge2D/system/fvSchemes | 5 +- .../les/depthCharge2D/system/fvSolution | 2 +- .../les/depthCharge2D/system/setFieldsDict | 8 +- .../les/depthCharge3D/0/T.org | 29 +++ .../0/{alpha1.org => alphawater.org} | 2 +- .../les/depthCharge3D/Allclean | 2 +- .../les/depthCharge3D/Allrun | 3 +- .../constant/transportProperties | 14 +- .../les/depthCharge3D/system/fvSchemes | 5 +- .../les/depthCharge3D/system/fvSolution | 2 +- .../les/depthCharge3D/system/setFieldsDict | 8 +- 27 files changed, 651 insertions(+), 187 deletions(-) create mode 100644 applications/solvers/multiphase/compressibleInterFoam/TEqn.H delete mode 100644 applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H create mode 100644 applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C create mode 100644 applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H create mode 100644 tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/T.org rename tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/{alpha1.org => alphawater.org} (97%) create mode 100644 tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/T.org rename tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/{alpha1.org => alphawater.org} (97%) diff --git a/applications/solvers/multiphase/compressibleInterFoam/Make/files b/applications/solvers/multiphase/compressibleInterFoam/Make/files index de5437219c0..0e009f09bcd 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/Make/files +++ b/applications/solvers/multiphase/compressibleInterFoam/Make/files @@ -1,3 +1,4 @@ +derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C compressibleInterFoam.C EXE = $(FOAM_APPBIN)/compressibleInterFoam diff --git a/applications/solvers/multiphase/compressibleInterFoam/TEqn.H b/applications/solvers/multiphase/compressibleInterFoam/TEqn.H new file mode 100644 index 00000000000..34b6bd35dd5 --- /dev/null +++ b/applications/solvers/multiphase/compressibleInterFoam/TEqn.H @@ -0,0 +1,20 @@ +{ + volScalarField kByCv + ( + "kByCv", + (alpha1*k1/Cv1 + alpha2*k2/Cv2) + + (alpha1*rho1 + alpha2*rho2)*turbulence->nut() + ); + + solve + ( + fvm::ddt(rho, T) + + fvm::div(rhoPhi, T) + - fvm::laplacian(kByCv, T) + + p*fvc::div(phi)*(alpha1/Cv1 + alpha2/Cv2) + ); + + // Update compressibilities + psi1 = 1.0/(R1*T); + psi2 = 1.0/(R2*T); +} diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C index 1ac1596c4db..a4cfc215fcc 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.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 @@ -25,7 +25,7 @@ Application compressibleInterDyMFoam Description - Solver for 2 compressible, isothermal immiscible fluids using a VOF + Solver for 2 compressible, non-isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach, with optional mesh motion and mesh topology changes including adaptive re-meshing. @@ -124,11 +124,15 @@ int main(int argc, char *argv[]) solve(fvm::ddt(rho) + fvc::div(rhoPhi)); #include "UEqn.H" + #include "TEqn.H" // --- Pressure corrector loop while (pimple.correct()) { #include "pEqn.H" + + // Make the fluxes relative to the mesh motion + fvc::makeRelative(phi, U); } } diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H deleted file mode 100644 index 26666c41203..00000000000 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H +++ /dev/null @@ -1,88 +0,0 @@ -{ - volScalarField rAU(1.0/UEqn.A()); - surfaceScalarField rAUf(fvc::interpolate(rAU)); - - tmp<fvScalarMatrix> p_rghEqnComp; - - if (pimple.transonic()) - { - p_rghEqnComp = - ( - fvm::ddt(p_rgh) - + fvm::div(phi, p_rgh) - - fvm::Sp(fvc::div(phi), p_rgh) - ); - } - else - { - p_rghEqnComp = - ( - fvm::ddt(p_rgh) - + fvc::div(phi, p_rgh) - - fvc::Sp(fvc::div(phi), p_rgh) - ); - } - - - U = rAU*UEqn.H(); - - surfaceScalarField phiU - ( - "phiU", - (fvc::interpolate(U) & mesh.Sf()) - + fvc::ddtPhiCorr(rAU, rho, U, phi) - ); - - phi = phiU + - ( - fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - )*rAUf*mesh.magSf(); - - while (pimple.correctNonOrthogonal()) - { - fvScalarMatrix p_rghEqnIncomp - ( - fvc::div(phi) - - fvm::laplacian(rAUf, p_rgh) - ); - - solve - ( - ( - max(alpha1, scalar(0))*(psi1/rho1) - + max(alpha2, scalar(0))*(psi2/rho2) - ) - *p_rghEqnComp() - + p_rghEqnIncomp, - mesh.solver(p_rgh.select(pimple.finalInnerIter())) - ); - - if (pimple.finalNonOrthogonalIter()) - { - dgdt = - (pos(alpha2)*(psi2/rho2) - pos(alpha1)*(psi1/rho1)) - *(p_rghEqnComp & p_rgh); - phi += p_rghEqnIncomp.flux(); - } - } - - U += rAU*fvc::reconstruct((phi - phiU)/rAUf); - U.correctBoundaryConditions(); - - p = max - ( - (p_rgh + gh*(alpha1*rho10 + alpha2*rho20)) - /(1.0 - gh*(alpha1*psi1 + alpha2*psi2)), - pMin - ); - - rho1 = rho10 + psi1*p; - rho2 = rho20 + psi2*p; - - Info<< "max(U) " << max(mag(U)).value() << endl; - Info<< "min(p_rgh) " << min(p_rgh).value() << endl; - - // Make the fluxes relative to the mesh motion - fvc::makeRelative(phi, U); -} diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C index 4ad1b3d01da..58dd7e68669 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.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 @@ -25,7 +25,7 @@ Application compressibleInterFoam Description - Solver for 2 compressible, isothermal immiscible fluids using a VOF + Solver for 2 compressible, non-isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach. The momentum and other fluid properties are of the "mixture" and a single @@ -82,6 +82,7 @@ int main(int argc, char *argv[]) solve(fvm::ddt(rho) + fvc::div(rhoPhi)); #include "UEqn.H" + #include "TEqn.H" // --- Pressure corrector loop while (pimple.correct()) diff --git a/applications/solvers/multiphase/compressibleInterFoam/createFields.H b/applications/solvers/multiphase/compressibleInterFoam/createFields.H index c598cb75ce6..4930743887e 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/createFields.H +++ b/applications/solvers/multiphase/compressibleInterFoam/createFields.H @@ -12,23 +12,6 @@ mesh ); - Info<< "Reading field alpha1\n" << endl; - volScalarField alpha1 - ( - IOobject - ( - "alpha1", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - Info<< "Calculating field alpha1\n" << endl; - volScalarField alpha2("alpha2", scalar(1) - alpha1); - Info<< "Reading field U\n" << endl; volVectorField U ( @@ -45,10 +28,19 @@ #include "createPhi.H" - Info<< "Reading transportProperties\n" << endl; twoPhaseMixture twoPhaseProperties(U, phi); + volScalarField& alpha1(twoPhaseProperties.alpha1()); + + Info<< "Calculating phase-fraction alpha" << twoPhaseProperties.phase2Name() + << nl << endl; + volScalarField alpha2 + ( + "alpha" + twoPhaseProperties.phase2Name(), + scalar(1) - alpha1 + ); + dimensionedScalar rho10 ( twoPhaseProperties.subDict @@ -65,21 +57,90 @@ ).lookup("rho0") ); - dimensionedScalar psi1 + dimensionedScalar k1 + ( + twoPhaseProperties.subDict + ( + twoPhaseProperties.phase1Name() + ).lookup("k") + ); + + dimensionedScalar k2 + ( + twoPhaseProperties.subDict + ( + twoPhaseProperties.phase2Name() + ).lookup("k") + ); + + dimensionedScalar Cv1 + ( + twoPhaseProperties.subDict + ( + twoPhaseProperties.phase1Name() + ).lookup("Cv") + ); + + dimensionedScalar Cv2 + ( + twoPhaseProperties.subDict + ( + twoPhaseProperties.phase2Name() + ).lookup("Cv") + ); + + dimensionedScalar R1 ( twoPhaseProperties.subDict ( twoPhaseProperties.phase1Name() - ).lookup("psi") + ).lookup("R") ); - dimensionedScalar psi2 + dimensionedScalar R2 ( twoPhaseProperties.subDict ( twoPhaseProperties.phase2Name() - ).lookup("psi") + ).lookup("R") + ); + + Info<< "Reading field T\n" << endl; + volScalarField T + ( + IOobject + ( + "T", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + volScalarField psi1 + ( + IOobject + ( + "psi1", + runTime.timeName(), + mesh + ), + 1.0/(R1*T) + ); + + volScalarField psi2 + ( + IOobject + ( + "psi2", + runTime.timeName(), + mesh + ), + 1.0/(R2*T) ); + psi2.oldTime(); dimensionedScalar pMin(twoPhaseProperties.lookup("pMin")); diff --git a/applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C b/applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C new file mode 100644 index 00000000000..e6782e8b3a9 --- /dev/null +++ b/applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C @@ -0,0 +1,184 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 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/>. + +\*---------------------------------------------------------------------------*/ + +#include "wallHeatTransferFvPatchScalarField.H" +#include "addToRunTimeSelectionTable.H" +#include "fvPatchFieldMapper.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::wallHeatTransferFvPatchScalarField::wallHeatTransferFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF +) +: + mixedFvPatchScalarField(p, iF), + Tinf_(p.size(), 0.0), + alphaWall_(p.size(), 0.0) +{ + refValue() = 0.0; + refGrad() = 0.0; + valueFraction() = 0.0; +} + + +Foam::wallHeatTransferFvPatchScalarField::wallHeatTransferFvPatchScalarField +( + const wallHeatTransferFvPatchScalarField& ptf, + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + mixedFvPatchScalarField(ptf, p, iF, mapper), + Tinf_(ptf.Tinf_, mapper), + alphaWall_(ptf.alphaWall_, mapper) +{} + + +Foam::wallHeatTransferFvPatchScalarField::wallHeatTransferFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const dictionary& dict +) +: + mixedFvPatchScalarField(p, iF), + Tinf_("Tinf", dict, p.size()), + alphaWall_("alphaWall", dict, p.size()) +{ + refValue() = Tinf_; + refGrad() = 0.0; + valueFraction() = 0.0; + + if (dict.found("value")) + { + fvPatchField<scalar>::operator= + ( + scalarField("value", dict, p.size()) + ); + } + else + { + evaluate(); + } +} + + +Foam::wallHeatTransferFvPatchScalarField::wallHeatTransferFvPatchScalarField +( + const wallHeatTransferFvPatchScalarField& tppsf +) +: + mixedFvPatchScalarField(tppsf), + Tinf_(tppsf.Tinf_), + alphaWall_(tppsf.alphaWall_) +{} + + +Foam::wallHeatTransferFvPatchScalarField::wallHeatTransferFvPatchScalarField +( + const wallHeatTransferFvPatchScalarField& tppsf, + const DimensionedField<scalar, volMesh>& iF +) +: + mixedFvPatchScalarField(tppsf, iF), + Tinf_(tppsf.Tinf_), + alphaWall_(tppsf.alphaWall_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::wallHeatTransferFvPatchScalarField::autoMap +( + const fvPatchFieldMapper& m +) +{ + scalarField::autoMap(m); + Tinf_.autoMap(m); + alphaWall_.autoMap(m); +} + + +void Foam::wallHeatTransferFvPatchScalarField::rmap +( + const fvPatchScalarField& ptf, + const labelList& addr +) +{ + mixedFvPatchScalarField::rmap(ptf, addr); + + const wallHeatTransferFvPatchScalarField& tiptf = + refCast<const wallHeatTransferFvPatchScalarField>(ptf); + + Tinf_.rmap(tiptf.Tinf_, addr); + alphaWall_.rmap(tiptf.alphaWall_, addr); +} + + +void Foam::wallHeatTransferFvPatchScalarField::updateCoeffs() +{ + if (updated()) + { + return; + } + + const fvPatchScalarField& Cpw = + patch().lookupPatchField<volScalarField, scalar>("Cp"); + + const fvPatchScalarField& kByCpw = + patch().lookupPatchField<volScalarField, scalar>("kByCp"); + + valueFraction() = + 1.0/ + ( + 1.0 + + Cpw*kByCpw*patch().deltaCoeffs()/alphaWall_ + ); + + mixedFvPatchScalarField::updateCoeffs(); +} + + +void Foam::wallHeatTransferFvPatchScalarField::write(Ostream& os) const +{ + fvPatchScalarField::write(os); + Tinf_.writeEntry("Tinf", os); + alphaWall_.writeEntry("alphaWall", os); + writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makePatchTypeField(fvPatchScalarField, wallHeatTransferFvPatchScalarField); +} + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H b/applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H new file mode 100644 index 00000000000..cf5284a087d --- /dev/null +++ b/applications/solvers/multiphase/compressibleInterFoam/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H @@ -0,0 +1,194 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 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/>. + +Class + Foam::wallHeatTransferFvPatchScalarField + +Description + Enthalpy boundary conditions for wall heat transfer + +SourceFiles + wallHeatTransferFvPatchScalarField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef wallHeatTransferFvPatchScalarField_H +#define wallHeatTransferFvPatchScalarField_H + +#include "mixedFvPatchFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class wallHeatTransferFvPatch Declaration +\*---------------------------------------------------------------------------*/ + +class wallHeatTransferFvPatchScalarField +: + public mixedFvPatchScalarField +{ + // Private data + + //- Tinf + scalarField Tinf_; + + //- alphaWall + scalarField alphaWall_; + + +public: + + //- Runtime type information + TypeName("wallHeatTransfer"); + + + // Constructors + + //- Construct from patch and internal field + wallHeatTransferFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + wallHeatTransferFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given wallHeatTransferFvPatchScalarField + // onto a new patch + wallHeatTransferFvPatchScalarField + ( + const wallHeatTransferFvPatchScalarField&, + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + wallHeatTransferFvPatchScalarField + ( + const wallHeatTransferFvPatchScalarField& + ); + + //- Construct and return a clone + virtual tmp<fvPatchScalarField> clone() const + { + return tmp<fvPatchScalarField> + ( + new wallHeatTransferFvPatchScalarField(*this) + ); + } + + //- Construct as copy setting internal field reference + wallHeatTransferFvPatchScalarField + ( + const wallHeatTransferFvPatchScalarField&, + const DimensionedField<scalar, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchScalarField> clone + ( + const DimensionedField<scalar, volMesh>& iF + ) const + { + return tmp<fvPatchScalarField> + ( + new wallHeatTransferFvPatchScalarField(*this, iF) + ); + } + + + // Member functions + + // Access + + //- Return Tinf + const scalarField& Tinf() const + { + return Tinf_; + } + + //- Return reference to Tinf to allow adjustment + scalarField& Tinf() + { + return Tinf_; + } + + //- Return alphaWall + const scalarField& alphaWall() const + { + return alphaWall_; + } + + //- Return reference to alphaWall to allow adjustment + scalarField& alphaWall() + { + return alphaWall_; + } + + + // Mapping functions + + //- Map (and resize as needed) from self given a mapping object + virtual void autoMap + ( + const fvPatchFieldMapper& + ); + + //- Reverse map the given fvPatchField onto this fvPatchField + virtual void rmap + ( + const fvPatchScalarField&, + const labelList& + ); + + + // Evaluation functions + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/compressibleInterFoam/pEqn.H b/applications/solvers/multiphase/compressibleInterFoam/pEqn.H index 035e8e237da..b803b1ac189 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/pEqn.H @@ -1,28 +1,31 @@ { - volScalarField rAU(1.0/UEqn.A()); - surfaceScalarField rAUf(fvc::interpolate(rAU)); + rho1 = rho10 + psi1*p; + rho2 = rho20 + psi2*p; - tmp<fvScalarMatrix> p_rghEqnComp; + volScalarField rAU = 1.0/UEqn.A(); + surfaceScalarField rAUf = fvc::interpolate(rAU); - if (pimple.transonic()) - { - p_rghEqnComp = - ( - fvm::ddt(p_rgh) - + fvm::div(phi, p_rgh) - - fvm::Sp(fvc::div(phi), p_rgh) - ); - } - else + tmp<fvScalarMatrix> p_rghEqnComp1; + tmp<fvScalarMatrix> p_rghEqnComp2; + + //if (transonic) + //{ + //} + //else { - p_rghEqnComp = - ( - fvm::ddt(p_rgh) - + fvc::div(phi, p_rgh) - - fvc::Sp(fvc::div(phi), p_rgh) - ); - } + surfaceScalarField phid1("phid1", fvc::interpolate(psi1)*phi); + surfaceScalarField phid2("phid2", fvc::interpolate(psi2)*phi); + p_rghEqnComp1 = + fvc::ddt(rho1) + psi1*correction(fvm::ddt(p_rgh)) + + fvc::div(phid1, p_rgh) + - fvc::Sp(fvc::div(phid1), p_rgh); + + p_rghEqnComp2 = + fvc::ddt(rho2) + psi2*correction(fvm::ddt(p_rgh)) + + fvc::div(phid2, p_rgh) + - fvc::Sp(fvc::div(phid2), p_rgh); + } U = rAU*UEqn.H(); @@ -39,6 +42,10 @@ - ghf*fvc::snGrad(rho) )*rAUf*mesh.magSf(); + // Thermodynamic density needs to be updated by psi*d(p) after the + // pressure solution - done in 2 parts. Part 1: + //thermo.rho() -= psi*p_rgh; + while (pimple.correctNonOrthogonal()) { fvScalarMatrix p_rghEqnIncomp @@ -50,19 +57,23 @@ solve ( ( - max(alpha1, scalar(0))*(psi1/rho1) - + max(alpha2, scalar(0))*(psi2/rho2) + (max(alpha1, scalar(0))/rho1)*p_rghEqnComp1() + + (max(alpha2, scalar(0))/rho2)*p_rghEqnComp2() ) - *p_rghEqnComp() + p_rghEqnIncomp, mesh.solver(p_rgh.select(pimple.finalInnerIter())) ); if (pimple.finalNonOrthogonalIter()) { + // Second part of thermodynamic density update + //thermo.rho() += psi*p_rgh; + dgdt = - (pos(alpha2)*(psi2/rho2) - pos(alpha1)*(psi1/rho1)) - *(p_rghEqnComp & p_rgh); + ( + pos(alpha2)*(p_rghEqnComp2 & p_rgh)/rho2 + - pos(alpha1)*(p_rghEqnComp1 & p_rgh)/rho1 + ); phi += p_rghEqnIncomp.flux(); } } diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/T.org b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/T.org new file mode 100644 index 00000000000..e5ac2eeb27e --- /dev/null +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/T.org @@ -0,0 +1,34 @@ +/*--------------------------------*- 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 alpha1; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + walls + { + type zeroGradient; + } + + defaultFaces + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/alpha1.org b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/alphawater.org similarity index 97% rename from tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/alpha1.org rename to tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/alphawater.org index b55820f9a97..d90b720092a 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/alpha1.org +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/alphawater.org @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object alpha1; + object alphawater; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allclean b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allclean index 1f81d5f86a1..d6e8dce5df4 100755 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allclean +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allclean @@ -1,5 +1,6 @@ #!/bin/sh +cd ${0%/*} || exit 1 # run from this directory foamCleanTutorials cases rm -rf processor* -rm -rf 0/p_rgh 0/p_rgh.gz 0/alpha1 0/alpha1.gz +rm -rf 0/p_rgh.gz 0/alphawater.gz 0/T.gz diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun index 5fd844dc716..76547516b77 100755 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun @@ -8,8 +8,9 @@ cd ${0%/*} || exit 1 # run from this directory application=`getApplication` runApplication blockMesh -cp 0/alpha1.org 0/alpha1 +cp 0/alphawater.org 0/alphawater cp 0/p_rgh.org 0/p_rgh +cp 0/T.org 0/T runApplication setFields runApplication $application diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/polyMesh/blockMeshDict b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/polyMesh/blockMeshDict index 22d11441f9d..9ed9a630b55 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/polyMesh/blockMeshDict +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/polyMesh/blockMeshDict @@ -33,28 +33,20 @@ blocks hex (0 1 2 3 4 5 6 7) (80 160 1) simpleGrading (1 1 1) ); -boundary +patches ( - walls - { - type wall; - faces - ( - (3 7 6 2) - (0 4 7 3) - (2 6 5 1) - (1 5 4 0) - ); - } - frontAndBack - { - type empty; - faces - ( - (0 3 2 1) - (4 5 6 7) - ); - } + wall walls + ( + (3 7 6 2) + (0 4 7 3) + (2 6 5 1) + (1 5 4 0) + ) + empty frontAndBack + ( + (0 3 2 1) + (4 5 6 7) + ) ); // ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/transportProperties b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/transportProperties index 67e66cd27d1..1803697ff73 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/transportProperties +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/constant/transportProperties @@ -15,22 +15,28 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -phase1 +phases (water air); + +water { transportModel Newtonian; nu nu [ 0 2 -1 0 0 0 0 ] 1e-06; + k k [1 1 -3 -1 0 0 0] 0; //0.613; rho rho [ 1 -3 0 0 0 0 0 ] 1000; rho0 rho0 [ 1 -3 0 0 0 0 0 ] 1000; - psi psi [ 0 -2 2 0 0 ] 1e-05; + R R [0 2 -2 -1 0] 3000; + Cv Cv [0 2 -2 -1 0] 4179; } -phase2 +air { transportModel Newtonian; nu nu [ 0 2 -1 0 0 0 0 ] 1.589e-05; + k k [1 1 -3 -1 0 0 0] 0; //2.63e-2; rho rho [ 1 -3 0 0 0 0 0 ] 1; rho0 rho0 [ 1 -3 0 0 0 0 0 ] 0; - psi psi [ 0 -2 2 0 0 ] 1e-05; + R R [0 2 -2 -1 0] 287; + Cv Cv [0 2 -2 -1 0] 721; } pMin pMin [ 1 -1 -2 0 0 0 0 ] 10000; diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/controlDict b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/controlDict index 4c225df9c72..933d1de4506 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/controlDict +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/controlDict @@ -17,7 +17,7 @@ FoamFile application compressibleInterFoam; -startFrom latestTime; +startFrom startTime; startTime 0; diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes index 5ab2bdc2fdd..c35af6cc4f1 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes @@ -30,7 +30,9 @@ divSchemes div(rho*phi,U) Gauss upwind; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss interfaceCompression 1; - div(phi,p_rgh) Gauss upwind; + div(phid1,p_rgh) Gauss upwind; + div(phid2,p_rgh) Gauss upwind; + div(rho*phi,T) Gauss upwind; div(phi,k) Gauss vanLeer; div((nuEff*dev(T(grad(U))))) Gauss linear; } @@ -55,7 +57,6 @@ fluxRequired default no; p_rgh; pcorr; - gamma; } diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution index 4a7f094cec5..46189745464 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution @@ -91,7 +91,7 @@ solvers nSweeps 1; } - "(k|B|nuTilda)" + "(T|k|B|nuTilda).*" { solver PBiCG; preconditioner DILU; diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict index 37f90fd1d58..88198a4d249 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict @@ -17,8 +17,9 @@ FoamFile defaultFieldValues ( - volScalarFieldValue alpha1 1 + volScalarFieldValue alphawater 1 volScalarFieldValue p_rgh 1e5 + volScalarFieldValue T 300 ); regions @@ -29,8 +30,9 @@ regions radius 0.1; fieldValues ( - volScalarFieldValue alpha1 0 + volScalarFieldValue alphawater 0 volScalarFieldValue p_rgh 1e6 + volScalarFieldValue T 578 ); } boxToCell @@ -38,7 +40,7 @@ regions box (-10 1 -1) (10 10 1); fieldValues ( - volScalarFieldValue alpha1 0 + volScalarFieldValue alphawater 0 ); } ); diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/T.org b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/T.org new file mode 100644 index 00000000000..b40cb084786 --- /dev/null +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/T.org @@ -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 alpha1; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + walls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/alpha1.org b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/alphawater.org similarity index 97% rename from tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/alpha1.org rename to tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/alphawater.org index b15de21b75d..62be61f403a 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/alpha1.org +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/alphawater.org @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object alpha1.org; + object alphawater; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean index 902055c7f72..539c7721669 100755 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean @@ -3,6 +3,6 @@ cd ${0%/*} || exit 1 # run from this directory foamCleanTutorials cases rm -rf processor* -rm -rf 0/p_rgh 0/p_rgh.gz 0/alpha1 0/alpha1.gz +rm -rf 0/p_rgh 0/p_rgh.gz 0/alphawater 0/alphawater.gz 0/T.gz # ----------------------------------------------------------------- end-of-file diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun index ac00d007bcf..0941ac4aa1a 100755 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun @@ -8,8 +8,9 @@ cd ${0%/*} || exit 1 # run from this directory application=`getApplication` runApplication blockMesh -cp 0/alpha1.org 0/alpha1 +cp 0/alphawater.org 0/alphawater cp 0/p_rgh.org 0/p_rgh +cp 0/T.org 0/T runApplication setFields runApplication decomposePar runParallel $application 4 diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/constant/transportProperties b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/constant/transportProperties index 67e66cd27d1..1803697ff73 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/constant/transportProperties +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/constant/transportProperties @@ -15,22 +15,28 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -phase1 +phases (water air); + +water { transportModel Newtonian; nu nu [ 0 2 -1 0 0 0 0 ] 1e-06; + k k [1 1 -3 -1 0 0 0] 0; //0.613; rho rho [ 1 -3 0 0 0 0 0 ] 1000; rho0 rho0 [ 1 -3 0 0 0 0 0 ] 1000; - psi psi [ 0 -2 2 0 0 ] 1e-05; + R R [0 2 -2 -1 0] 3000; + Cv Cv [0 2 -2 -1 0] 4179; } -phase2 +air { transportModel Newtonian; nu nu [ 0 2 -1 0 0 0 0 ] 1.589e-05; + k k [1 1 -3 -1 0 0 0] 0; //2.63e-2; rho rho [ 1 -3 0 0 0 0 0 ] 1; rho0 rho0 [ 1 -3 0 0 0 0 0 ] 0; - psi psi [ 0 -2 2 0 0 ] 1e-05; + R R [0 2 -2 -1 0] 287; + Cv Cv [0 2 -2 -1 0] 721; } pMin pMin [ 1 -1 -2 0 0 0 0 ] 10000; diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes index 5ab2bdc2fdd..c35af6cc4f1 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes @@ -30,7 +30,9 @@ divSchemes div(rho*phi,U) Gauss upwind; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss interfaceCompression 1; - div(phi,p_rgh) Gauss upwind; + div(phid1,p_rgh) Gauss upwind; + div(phid2,p_rgh) Gauss upwind; + div(rho*phi,T) Gauss upwind; div(phi,k) Gauss vanLeer; div((nuEff*dev(T(grad(U))))) Gauss linear; } @@ -55,7 +57,6 @@ fluxRequired default no; p_rgh; pcorr; - gamma; } diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution index 4a7f094cec5..46189745464 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution @@ -91,7 +91,7 @@ solvers nSweeps 1; } - "(k|B|nuTilda)" + "(T|k|B|nuTilda).*" { solver PBiCG; preconditioner DILU; diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict index 07f675b5de6..ec31deae034 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict @@ -17,8 +17,9 @@ FoamFile defaultFieldValues ( - volScalarFieldValue alpha1 1 + volScalarFieldValue alphawater 1 volScalarFieldValue p_rgh 1e5 + volScalarFieldValue T 300 ); regions @@ -29,8 +30,9 @@ regions radius 0.1; fieldValues ( - volScalarFieldValue alpha1 0 + volScalarFieldValue alphawater 0 volScalarFieldValue p_rgh 1e6 + volScalarFieldValue T 578 ); } boxToCell @@ -38,7 +40,7 @@ regions box (-10 1 -1) (10 10 1); fieldValues ( - volScalarFieldValue alpha1 0 + volScalarFieldValue alphawater 0 ); } ); -- GitLab