界面相变
-
请问各位老师:我如何控制相变只发生在气液界面处,而在气体区和液体区不论温度是否超过饱和均不发生相变。之前想用网格内的alpha不等于0或者1判断,但是网格划分之后所有的网格都是0或1,如何有效识别出相界面呢
-
应该通过相分数的梯度来判断
-
@李东岳 嗯嗯好的,我会尝试一下的。
有一位前辈推荐了我一个utility,或许也有帮助,贴在下方
https://github.com/daidezhi/alphaInitializerFoam
-
@李东岳
老师,请问下面的语句应该怎么进行修改一下~a是一个volScalarField类型的量forAll(a,celli) { if (fvc::snGrad(alpha1[celli]) == 0) { a[celli]= 0; } else { a[celli]= 1; } }
-
volScalarField test = fvc::snGrad(alpha); forAll(test, celli) { if (test[celli] == 0) { } else { } }
-
@李东岳 老师,我按照下面的进行了修改
surfaceScalarField test = fvc::snGrad(alpha1); forAll(a,celli) { if (test[celli]) == 0) { a[celli]= 0; } else { a[celli]= 1; } }
并且看a的输出文件,确实有a=1的网格(即相梯度不等于0)。但是查看运行结果,他并不是在相梯度不等于0的地方相变,还是和之前一样温度高了就相变,并没有抑制作用。我的处理方法是在和相变相关的量前乘以a进行判断,请问老师这样处理哪里出现了问题~
-
-
@hongjiewang 你的a是一个volScalarField,而test是一个surfaceScalarField,两个变量不匹配。想办法把surfaeScalarField转化成一个volScalarField试一下
-
@hongjiewang 在 界面相变 中说:
通过 https://github.com/daidezhi/alphaInitializerFoam 精确初始化相场后,使用
$\alpha ( 1- \alpha )$
的值进行判断,在$[0,1]$区间其值位于$[0,0.25]$之间,为了剔除相分数十分接近0或者1(体单元接近empty或者full,有些单元由于数值计算的误差累计会出现该为empty的时候其相分数是个十分小的数值,full也有这种可能)的情况,加入阈值判断。代码可以参考// Tolerance const scalar tol(1e-7); const volScalarField test(alpha1*(scalar(1)-alpha1)); forAll(test, cellI) { if (mag(test[cellI]) > tol) { // do something ... } else { // do something else ... } }
-
@史浩 确实如老师所说,我对这部分进行修改之后,已经可以算出预期的效果。感谢老师。
-
@队长别开枪 感谢老师的提醒,之后我会对代码进一步的完善。非常感谢~
-
@hongjiewang 能帮到你我也很开心,继续加油~