python进行OpenFOAM流场后处理
-
@田畔的风 膜大佬!研究了半晚上。几点小疑问,向您请教:
reader = OpenFOAMReader(FileName="PEE.foam", CaseType=0)
- caseType=0 是控制什么的?这句导致我的case读不到任何一个时间步。删除之后可以读到。
logData = np.where( mesh.point_data['driftDensity'] < 1e-12, -12.0, np.log10(mesh.point_data['driftDensity']), )
- 这句是控制什么的呢?我print(mesh.dict),发现没有‘driftdensity’
- 我用的是六面体网格,怎么划分成三角形,你的代码里有相关的吗?(我刚理解到第二个问题,后面还没看,肝不动了)
多谢分享,多谢多谢
-
-
caseType
参数的作用在上一行的注释中已经给出。caseType=0
指读写decompose
算例,即包含processor*
文件夹的并行算例。caseType=1
指读写reconstruct
算例,即串行或使用reconstructPar
重建后的算例。 -
driftDensity
是我自己写的某个求解器里的标量场的名称。在标准求解器里,你想读压力就是p
,想读速度就是U
,想读温度就是T
... -
我的这个算例用的也是六面体网格,通过一次
slice
操作转换成了四边形切片,然后对每个四边形单元进行三角化。请注意理解我的这段代码:
cell_0 = mesh.cells[0].data[:, :3] cell_1 = np.concatenate( (mesh.cells[0].data[:, 2:], mesh.cells[0].data[:, [0]]), axis=1) cell = np.concatenate((cell_0, cell_1), axis=0) triang = tri.Triangulation(mesh.points[:, 0], mesh.points[:, 2], cell)
就是取每个四边形的
0 1 2
和0 2 3
两组顶点,组成两个互不重叠的三角形,然后生成matplotlib自己的三角网格。- 如果你不关心切片后的几何拓扑,可以在slice函数中设置
Triangulatetheslice=True
。这个功能和paraview图形操作里是一样的,这样出来的切片就直接是三角网格了。就不需要进行上述的额外的三角化操作了。
-
-
@田畔的风 这个流场图真的很漂亮。请教一下老师,我的网格是O型+H型,Fortran代码算的,能导入paraView。想请教一下,这种情况如何导入到python画图呢?如果直接用contourf 或者tricontourf都会导致网格变形。比如在paraview中为:
在python中直接
ax1.tricontourf(x,y, u,linewidth=0.25, levels=levels,cmap='coolwarm',vmin=0, vmax=1),显示出来为:
造成的原因可能是因为您说的Matplotlib只能处理三角形的网格。想请问在不清楚网格具体信息的情况下,能不能从paraview导出成三角网格?尝试过您代码中的Slice,但由于本身是2D,不能切片。请问有什么建议么? -
@田畔的风
感谢老师分享非常实用的代码,本人也是初次使用pvpython处理数据,请问老师一个简单的问题,当我运行您的程序时,出现了以下的错误,我想这个错误应该是非常常见的,但是目前我尝试的方法有:1 重新install pathlib(用pipe 和 conda都试过) 2. 更新python的版本,这两个方法都没有将此错误排除,求问老师有没有其他方法?Traceback (most recent call last): File "./readData.py", line 3, in <module> from pathlib import Path ImportError: No module named pathlib
-
- 首先pathlib这个模块在最终的代码中并没有被使用到,所以你可以将这个模块和对应的代码移除,这并不会影响代码运行结果。
- 然后谈谈你这个报错。
readData.py
这个文件是用pvpython
执行的,这个python解释器是paraview自带的,对应的第三方库也是在安装paraview时配置好的,所以错误来源于你的paraview附带的pvpython解释器(可能是安装问题,可能是系统环境问题,也可能是软件版本问题,请自行排查),和系统python解释器无关。你使用pip
和conda
只是在安装你系统python解释器的第三方库。 - 尽管最终版本这个模块被弃用,不过这里再补充一下:pathlib在本代码中的用途是创建空文件夹(
pathlib.Path
),在上面的讨论中也提到了,因此可以使用os.mkdir
替代。