做大型CFD仿真的小伙伴可能会遇到这样一个问题,在超算上进行百万级别以上网格的仿真,数据量庞大,如何实时监测计算结果,确保仿真是朝着正确的方向发展?
OpenFOAM自带的sample工具可以完美解决这个问题
在controlDict文件下设置如下
functions {
surfacesample1
{
type surfaces;
libs (sampling);
writeControl runTime;
writeInterval 0.00001; // 输出的时间步长
interpolationScheme cellPoint;
surfaceFormat vtk; // 输出数据类型
surfaces
(
plane_yz
{
type plane;
planeType pointAndNormal;
pointAndNormalDict //定义平面
{
point (0 0 0);
normal (1 0 0);
}
interpolate false; // 插值方法 选项: cell, cellPoint 等
}
);
fields (T U O2); // 输出的物理量
}
}
以上是采用自定义的取样平面,当然也可以采用计算域的某一个边界:
surfaces
{
type surfaces;
surfaceFormat boundaryData;
writeControl writeTime;
interpolationScheme cell;
fields
(
U
turbulenceProperties:R
turbulenceProperties:nuTilda
turbulenceProperties:L
);
surfaces
(
inlet
{
type patch;
patches (inlet); // 边界名称
interpolate false;
}
);
}
我们可以通过修改writeInterval调整采样平面数据的输出时间步长,这个步长是与算例的输出时间步长相互独立的。
最后通过运行foamSequenceVTKFiles 命令,即可得到paraview可以打开的数据。
这样一来,我们可以通过重建很小的数据量监控一个大Case的运行情况,也可以利用这种方法生成时间步长非常小的CFD视频,非常方便