interFoam 动网格算例导读 – 带障碍物的溃坝

今天分享一个用动网格(Dynamic Mesh)细化(Refine)网格的算例,这种技术被 Ansys Fluent 称为自适应网格(Adaptive Mesh Refinement)。如下图所示,红色是水,蓝色是空气,左侧的算例没有使用自适应网格,而右侧的算例使用了。使用了自适应网格的算例,解析出了若干小液滴、相界面也更清晰。

自适应网格的效果

这项技术的原理是加密部分区域,提高局部的网格密度,从而提高精度;同时,根据流体运动情况,有选择性地将加密过的网格重新变稀疏。如下图所示,这一算例加密了液面附近的网格。

这一算例的位置是 $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreakWithObstacle,动网格的定义在 constant/dynamicMeshDict,这一字典的主要内容如下

dynamicFvMesh   dynamicRefineFvMesh;

// How often to refine
refineInterval  1;

// Field to be refinement on
field           alpha.water;

// Refine field in between lower..upper
lowerRefineLevel 0.001;
upperRefineLevel 0.999;

// If value < unrefineLevel unrefine
unrefineLevel   10;

// Have slower than 2:1 refinement
nBufferLayers   1;

// Refine cells only up to maxRefinement levels
maxRefinement   2;

// Stop refinement if maxCells reached
maxCells        200000;

// Flux field and corresponding velocity field. Fluxes on changed
// faces get recalculated by interpolating the velocity. Use 'none'
// on surfaceScalarFields that do not need to be reinterpolated.
correctFluxes
(
    (phi none)
    (nHatf none)
    (rhoPhi none)
    (alphaPhi0.water none)
    (ghf none)
);

// Write the refinement level as a volScalarField
dumpLevel       true;
Code language: JavaScript (javascript)

可以看到,水的百分数 alpha.water 在 0.001 到 0.009 之间的区域会被细化。需要注意的是,网格细化后会占用更多内存,记得设置合适 maxCells 值,避免内存不足。

只要配置了这一字典,求解器启动时会自动读入字典中的设置,无需额外配置。每一个时间步,求解器会输出网格优化情况,下面是一个例子。

Selected 32 cells for refinement out of 91602.
Refined from 91602 to 91826 cells.
Selected 9 split points out of a possible 7055.
Unrefined from 91826 to 91763 cells.Code language: JavaScript (javascript)

此外,我在其他算例使用自适应网格时发现,这种网格优化方式仅支持六面体网格,不支持四面体网格,如果使用四面体网格会有如下提示

detected 2963996 cells that are protected from refinementCode language: JavaScript (javascript)

感谢阅读!

常恭

作者: 常恭

略懂 OpenFOAM

发表评论