A new wallBoiling heat transfer model has been added for use with the
thermalPhaseChangeMultiphaseSystem. This model operates similarly to the
alphatWallBoilingWallFunction. The difference is that the boiling generated by
the wallBoiling heat transfer model occurs on the surface of a third stationary
phase, within the volume of the simulation, rather than on a wall patch. This
can be used to model boiling within a packed bed or similar.
The wallBoiling heat transfer model and the alphatWallBoilingWallFunction share
underlying sub-models, so their specification is very similar. For example, in
constant/phaseProperties:
heatTransfer
{
...
bed_dispersedIn_liquid_inThe_liquid
{
type wallBoiling;
liquidPhase liquid;
vapourPhase gas;
heatTransferModel
{
type Gunn;
}
partitioningModel
{
type Lavieville; // phaseFraction, linear, cosine
alphaCrit 0.2;
}
nucleationSiteModel
{
type LemmertChawla; // KocamustafaogullariIshii
}
departureDiameterModel
{
type TolubinskiKostanchuk; // KocamustafaogullariIshii
}
departureFrequencyModel
{
type KocamustafaogullariIshii; // Cole
Cf 1.18;
}
}
bed_dispersedIn_liquid_inThe_bed
{
type spherical;
}
...
}
Based on a patch contributed by Juho Peltola, VTT.
125 lines
3.4 KiB
C++
125 lines
3.4 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
\\ / O peration | Website: https://openfoam.org
|
|
\\ / A nd | Copyright (C) 2021-2023 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 "phaseInterface.H"
|
|
#include "sidedPhaseInterface.H"
|
|
#include "addToRunTimeSelectionTable.H"
|
|
|
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
|
|
|
namespace Foam
|
|
{
|
|
defineTypeNameAndDebugWithName
|
|
(
|
|
sidedPhaseInterface,
|
|
separatorsToTypeName
|
|
({
|
|
phaseInterface::separator(),
|
|
separator()
|
|
}).c_str(),
|
|
0
|
|
);
|
|
addToRunTimeSelectionTable(phaseInterface, sidedPhaseInterface, word);
|
|
}
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
|
|
Foam::sidedPhaseInterface::sidedPhaseInterface
|
|
(
|
|
const phaseModel& phase,
|
|
const phaseModel& otherPhase
|
|
)
|
|
:
|
|
phaseInterface(phase, otherPhase),
|
|
phase_(phase)
|
|
{}
|
|
|
|
|
|
Foam::sidedPhaseInterface::sidedPhaseInterface
|
|
(
|
|
const phaseSystem& fluid,
|
|
const word& name
|
|
)
|
|
:
|
|
phaseInterface(fluid, name),
|
|
phase_(identifyPhases(fluid, name, {separator()}).second())
|
|
{
|
|
if (!contains(phase_))
|
|
{
|
|
FatalErrorInFunction
|
|
<< "Interface " << name << " is not valid. An interface cannot "
|
|
<< "have a side that is not one of its own phases."
|
|
<< exit(FatalError);
|
|
}
|
|
}
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
|
|
Foam::sidedPhaseInterface::~sidedPhaseInterface()
|
|
{}
|
|
|
|
|
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
|
|
|
Foam::word Foam::sidedPhaseInterface::name() const
|
|
{
|
|
return phaseInterface::name() + '_' + separator() + '_' + phase().name();
|
|
}
|
|
|
|
|
|
const Foam::phaseModel& Foam::sidedPhaseInterface::phase() const
|
|
{
|
|
return phase_;
|
|
}
|
|
|
|
|
|
const Foam::phaseModel& Foam::sidedPhaseInterface::otherPhase() const
|
|
{
|
|
return phaseInterface::otherPhase(phase_);
|
|
}
|
|
|
|
|
|
Foam::autoPtr<Foam::phaseInterface>
|
|
Foam::sidedPhaseInterface::otherInterface() const
|
|
{
|
|
wordList nameParts = phaseInterface::nameToNameParts(fluid(), name());
|
|
|
|
const label i =
|
|
findIndex(nameParts, sidedPhaseInterface::separator());
|
|
|
|
nameParts[i+1] = otherPhase().name();
|
|
|
|
return phaseInterface::New
|
|
(
|
|
fluid(),
|
|
phaseInterface::namePartsToName(fluid(), nameParts)
|
|
);
|
|
}
|
|
|
|
|
|
// ************************************************************************* //
|