今天分享一个用动网格(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 refinement
Code language: JavaScript (javascript)
感谢阅读!