前面的博客中已经提到,Python 有 Matplotlib
这种强大的包可以「在线」地生成(并保存)漂亮的图形,但对于计算流体力学的后处理来说,很多时候需要更多「事后」的后处理。在线的即时输出,虽然可以快速预览结果,但对于想输出什么结果必须在写程序阶段就全部想明白,而不是先计算完,按一定间隔输出整个流场的信息,然后后期想要什么数据慢慢提取分析就行。
解决这个问题的方法也很简单,直接照抄开源 LBM 软件 Palabos 的方案,用 vtk
格式保存流场信息,然后用 Paraview 进行后处理。
这个「十分简单」的技术路线结果却花了我很多天的时间,才基本搞清楚其中的奥秘,从多个 tricky
part 中脱身。技术上来说,Python 输出 vtk 有成熟的软件包(我采用的是pyevtk
这个库[1]),实现方法也比较直观。例如官方提供的一个示例是这样的(我稍作了修改):
from evtk.vtk import VtkFile,
VtkRectilinearGrid
import numpy as np
nx, ny, nz = 6, 6, 2
lx, ly, lz = 1.0, 1.0, 1.0
dx, dy, dz = lx/nx, ly/ny, lz/nz
npoints = (nx + 1) * (ny + 1) * (nz +
1)
x = np.arange(0, lx + 0.1*dx, dx,
dtype='float64')
y = np.arange(