各位老师和学者好,我最近在尝试使用multiphaseEulerFoam来计算水的闪蒸过程。但是遇到了一些问题。对于纯水的两相流动(没有空气),应该是调用ThermalPhaseChangePhaseSystem
type thermalPhaseChangeMultiphaseSystem;
phases (steam water);
phaseChange on;
steam
{
type purePhaseModel;
diameterModel isothermal;
isothermalCoeffs
{
d0 3e-3;
p0 1e5;
}
residualAlpha 1e-3;
}
water
{
type purePhaseModel;
diameterModel constant;
constantCoeffs
{
d 1e-4;
}
residualAlpha 1e-3;
}
在此基础上,后续的换热模型选用了RanzMarshall,但是我发现根本不会发生闪蒸(我在能量方程里对water相直接补充了热量,保证了温度上升)
in EEqns.H
forAll(fluid.anisothermalPhases(), anisothermalPhasei)
{
phaseModel& phase = fluid.anisothermalPhases()[anisothermalPhasei];
const volScalarField& alpha = phase;
tmp<volScalarField> tRho = phase.rho();
const volScalarField& rho = tRho();
tmp<volVectorField> tU = phase.U();
const volVectorField& U = tU();
volScalarField q = alpha*rho*(U&g)-alpha*rho*(U&g);
if(phase.name() == "water")
{
q[93] = 5.0E8;
q[94] = 5.0E8;
q[95] = 5.0E8;
q[96] = 5.0E8;
q[97] = 5.0E8;
}
···········
不会发生相变的原因确定于代码中,对于质量源项的计算有
ThermalPhaseChangePhaseSystem.C
// Interfacial mass transfer update
{
volScalarField& dmdtf(*this->dmdtfs_[pair]);
volScalarField& Tf(*this->Tfs_[pair]);
const volScalarField Tsat(saturationModelIter()->Tsat(thermo1.p()));
const volScalarField L
(
volatile_ != "none"
? this->Li(pair, volatile_, dmdtf, Tsat, latentHeatScheme::upwind)
: this->L(pair, dmdtf, Tsat, latentHeatScheme::upwind)
);
volScalarField H1(this->heatTransferModels_[pair].first()->K(0));
volScalarField H2(this->heatTransferModels_[pair].second()->K(0));
volScalarField dmdtfNew((H1*(Tsat - T1) + H2*(Tsat - T2))/L);
其中,换热系数H1与2的计算
RanzMarshall.C
Foam::tmp<Foam::volScalarField>
Foam::heatTransferModels::RanzMarshall::K(const scalar residualAlpha) const
{
volScalarField Nu(2 + 0.6*sqrt(pair_.Re())*cbrt(pair_.Pr()));
return
6
*max(pair_.dispersed(), residualAlpha)
*pair_.continuous().thermo().kappa()
*Nu
/sqr(pair_.dispersed().d());
}
可以发现,当离散相为水蒸气(初始条件下为0),连续相为水时,输入的残差为0时,
volScalarField H1(this->heatTransferModels_[pair].first()->K(0));
volScalarField H2(this->heatTransferModels_[pair].second()->K(0));
这个H1和H2必然为0,因此计算所得到的相变量dmdtfNew也必然为0,无论液体的温度高过饱和温度多少。
请问有老师碰到过这种情况吗,任何点拨都感激不尽:xinlei: