mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
compressibleInterFoam: Added thermal support
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C
|
||||
compressibleInterFoam.C
|
||||
|
||||
EXE = $(FOAM_APPBIN)/compressibleInterFoam
|
||||
|
||||
20
applications/solvers/multiphase/compressibleInterFoam/TEqn.H
Normal file
20
applications/solvers/multiphase/compressibleInterFoam/TEqn.H
Normal file
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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())
|
||||
|
||||
@ -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,22 +57,91 @@
|
||||
).lookup("rho0")
|
||||
);
|
||||
|
||||
dimensionedScalar psi1
|
||||
dimensionedScalar k1
|
||||
(
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase1Name()
|
||||
).lookup("psi")
|
||||
).lookup("k")
|
||||
);
|
||||
|
||||
dimensionedScalar psi2
|
||||
dimensionedScalar k2
|
||||
(
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase2Name()
|
||||
).lookup("psi")
|
||||
).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("R")
|
||||
);
|
||||
|
||||
dimensionedScalar R2
|
||||
(
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase2Name()
|
||||
).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"));
|
||||
|
||||
Info<< "Calculating field g.h\n" << endl;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -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
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -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())
|
||||
tmp<fvScalarMatrix> p_rghEqnComp1;
|
||||
tmp<fvScalarMatrix> p_rghEqnComp2;
|
||||
|
||||
//if (transonic)
|
||||
//{
|
||||
//}
|
||||
//else
|
||||
{
|
||||
p_rghEqnComp =
|
||||
(
|
||||
fvm::ddt(p_rgh)
|
||||
+ fvm::div(phi, p_rgh)
|
||||
- fvm::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);
|
||||
}
|
||||
else
|
||||
{
|
||||
p_rghEqnComp =
|
||||
(
|
||||
fvm::ddt(p_rgh)
|
||||
+ fvc::div(phi, p_rgh)
|
||||
- fvc::Sp(fvc::div(phi), 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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -10,7 +10,7 @@ FoamFile
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object alpha1;
|
||||
object alphawater;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
wall walls
|
||||
(
|
||||
(3 7 6 2)
|
||||
(0 4 7 3)
|
||||
(2 6 5 1)
|
||||
(1 5 4 0)
|
||||
);
|
||||
}
|
||||
frontAndBack
|
||||
{
|
||||
type empty;
|
||||
faces
|
||||
)
|
||||
empty frontAndBack
|
||||
(
|
||||
(0 3 2 1)
|
||||
(4 5 6 7)
|
||||
);
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -17,7 +17,7 @@ FoamFile
|
||||
|
||||
application compressibleInterFoam;
|
||||
|
||||
startFrom latestTime;
|
||||
startFrom startTime;
|
||||
|
||||
startTime 0;
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -91,7 +91,7 @@ solvers
|
||||
nSweeps 1;
|
||||
}
|
||||
|
||||
"(k|B|nuTilda)"
|
||||
"(T|k|B|nuTilda).*"
|
||||
{
|
||||
solver PBiCG;
|
||||
preconditioner DILU;
|
||||
|
||||
@ -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
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -10,7 +10,7 @@ FoamFile
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object alpha1.org;
|
||||
object alphawater;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -91,7 +91,7 @@ solvers
|
||||
nSweeps 1;
|
||||
}
|
||||
|
||||
"(k|B|nuTilda)"
|
||||
"(T|k|B|nuTilda).*"
|
||||
{
|
||||
solver PBiCG;
|
||||
preconditioner DILU;
|
||||
|
||||
@ -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
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user