算例路径: none
算例描述: 波面附近采用自适应网格划分
学习目标: 动网格设置和使用,dynamicFvMesh dynamicRefineFvMesh 的各参数含义
学习体会:
(1) 在结构附近的加密网格,自适应网格依然会对细网格进一步细化,导致结构附近网格尺寸非常小,时间步减小。同时,网格重新划分的耗时也是可观的。总的计算耗时不一定比静态网格少。因此,是否采用自适应网格还需综合考虑各种因素的影响。
(2) 比较动态自适应网格和静态网格两种条件下的波浪模拟结果,发现相同网格尺度下,自适应网格模拟的波面相比静态网格时更容易随时间衰减。或许可以通过优化网格参数来改善这种情况。静态网格时,若网格尺度不合适,波面更容易随空间衰减,随时间衰减的现象不是很明显。
算例快照:
文件结构:
文件结构与静态网格的数值波浪水池完全一样。
参考 【OpenFOAM】-olaFlow-算例1- baseWaveFlume
算例文件解析:
算例文件设置除 constant/dynamicMeshDict 外,其他设计与静态网格时完全一样。
参考 【OpenFOAM】-olaFlow-算例1- baseWaveFlume
【constant\dynamicMeshDict】
动网格相关参数定义参考 Parameter Definitions - dynamicRefineFvMesh
dynamicFvMesh dynamicRefineFvMesh;
// How often to refine
refineInterval 1; //网格划分的时间间隔,1表示每个时间步更新网格
// Field to be refinement on
field alpha.water; //要捕捉的特征要素变量。可以是标量或向量,若为向量时,使用的参考值是向量的模。
// Refine field in between lower..upper
// 指定网格细化或粗化的出发条件,为上述变量的值,变量值在 lowerRefineLevel 和 upperRefineLevel 之间的区域为加密网格。
lowerRefineLevel 0.001; //变量的值低于 lowerRefineLevel 时,会触发网格细化
upperRefineLevel 0.999; //变量的值高于 lowerRefineLevel 时,会触发网格粗化
// If value < unrefineLevel unrefine
unrefineLevel 0.0005; //变量的值低于 unrefineLevel 时,网格会被粗化。粗网格尺寸不会超过基础网格。
// Have slower than 2:1 refinement
nBufferLayers 2; //两个加密等级间的网格缓冲层数
// Refine cells only up to maxRefinement levels
maxRefinement 3; //网格最大细化水平
// Stop refinement if maxCells reached
maxCells 600000; //最大网格数量,当网格量达到该值时不再加密
// 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.
// 通量校正:细化会分裂网格,该关键字指定了需要对新网格面进行通量校正的变量。
// 以 (通量场 对应的速度场) 的形式定义,通过对速度插值,通量会在网格面上重新计算。
// 在不需要重新插值的 surfaceScalarFields 上使用 ‘none’。
correctFluxes
(
(phi none)
(nHatf none)
(rhoPhi none)
(alphaPhi0.water none)
(ghf none)
);
// Write the refinement level as a volScalarField
// 将单元格的细化等级写入 volScalarField ,用于网格细化分布的可视化。
dumpLevel true;