multiphaseEulerFoam对相变的计算
-
各位老师和学者好,我最近在尝试使用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.CFoam::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,无论液体的温度高过饱和温度多少。
请问有老师碰到过这种情况吗,任何点拨都感激不尽