今天更新一个用paraview的pvpython对openfoam程序进行后处理的方法,以统计轴向固含量为例
pvpython后处理脚本
pvpython
ParaView附带了两个执行Python脚本的命令行程序:pvpython和pvbatch。它们类似于python发行版附带的python可执行文件,因为它们从命令行或文件中接受python脚本,并将脚本提供给python解释器。
算例简介
算例是长这样的,dddd。
创建Python脚本跟踪
首先,清空paraview, 选择Edit→ Reset从菜单中重置会话。
1. 开始录制宏脚本
单击Tools菜单中的Start Trace选项。显示了一个带有Trace选项的对话框。现在,只需单击“确定”。
all properties 跟踪所有特性的值,即使它们保持默认值。这有助于保存所有可能的属性,或确保状态一致,而不管其他用户的设置如何。这也会产生非常详细的输出,可能很难读取。
any modified properties 忽略其默认值不变的任何属性。对于大多数用例来说,这是一个很好的选择。
only user-modified properties 忽略用户未明确设置的任何属性。这种性质的跟踪依赖于运行脚本时重新应用的任何内部设置属性。
现在点击Tools菜单中的Start Trace变为了Stop Trace,这表明当前正在录制操作。
2. 进行操作—以统计轴向固含率为例
(1)打开foam或vtk文件
建议用reconstructPar命令合并进程,foamToVTK将foam文件转为vtk文件,-h查看帮助可以指定需要合并的变量,
-allPatches combine all patches into a single file
-ascii write in ASCII format instead of binary
-case <dir> specify alternate case directory, default is the cwd
-cellSet <name> convert a mesh subset corresponding to the specified cellSet
-constant include the 'constant/' dir in the times list
-excludePatches <wordReList>
a list of patches to exclude - eg '( inlet ".*Wall" )'
-faceSet <name> restrict conversion to the specified faceSet
-fields <wordList>
only convert the specified fields - eg '(p T U)'
-latestTime select the latest time
-nearCellValue use cell value on patches instead of patch value itself
-noFaceZones no faceZones
-noFunctionObjects
do not execute functionObjects
-noInternal do not generate file for mesh, only for patches
-noLinks dont link processor VTK files - parallel only
-noPointValues no pointFields
-noZero exclude the '0/' dir from the times list, has precedence
over the -withZero option
-parallel run in parallel
-pointSet <name> restrict conversion to the specified pointSet
-poly write polyhedral cells without tet/pyramid decomposition
-region <name> specify alternative mesh region
-roots <(dir1 .. dirN)>
slave root directories for distributed running
-surfaceFields write surfaceScalarFields (e.g., phi)
-time <ranges> comma-separated time ranges - eg, ':10,20,40:70,1000:'
-useTimeName use the time name instead of the time index when naming the
files
-srcDoc display source code in browser
-doc display application documentation in browser
-help print the usage
(2)统计轴向0~0.05的平均固含率
用土办法,切片求平均,有更好的办法可以一起交流。
- 新建两个clip
- 添加一个Python Calculator ,Filters→ Alphabetical→ Python Calculator
或者 ctrl+space搜索Python Calculator
Expression填1-mean(voidfraction),Array name随便写比如Solid_holdup,apply
新建一个layout,选SpreadSheet View
找到Solid_holdup,即为轴向0~0.05的平均固含率。File →Save Data,保存一个文件名,比如Solid_holdup_1.csv
3.结束录制
现在点击Tools菜单中的Stop Trace,结束录制操作。
得到python脚本文件,里面保留了刚才进行的所有操作。另存为Cal_Solid_holdup.py
现在我们得到一个可以计算轴向0~0.05的平均固含率的脚本,下面介绍怎么使用这个脚本。
使用python脚本
宏
自定义ParaView行为的一种简单但强大的方法是将Python脚本添加为宏。宏只是一个自动脚本,可以通过工具栏中的按钮或菜单栏中的条目调用。
Macros →Add a new macro选择刚才生成的Cal_Solid_holdup.py文件
可以看到Macros多了一个Cal_Solid_holdup宏,双击运行可以直接完成第二节中的操作。
命令行
运行paraview的python脚本需要使用pvpython环境,首先查看节点上的pvpython环境。
$: whereis pvpython
pvpython: /opt/ParaView-5.8.1-MPI-Linux-Python3.7-64bit/bin/pvpython
运行Cal_Solid_holdup.py脚本
pvpython Cal_Solid_holdup.py
#报错没关系,会输出结果文件
高级用法
大家都知道python文件可以读取输入参数,我们稍微修改两行代码,可以另外复制一份防止改错。
#coding:utf-8
#加在第一行
import sys
print(sys.argv[1],sys.argv[2])
#sys可以读取命令行输入参数。
# 修改clip高度
# clip1.ClipType.Origin = [0.0, 0.0, 0.05]
clip1.ClipType.Origin = [0.0, 0.0, float(sys.argv[2])]
clip1.ClipType.Normal = [0.0, 0.0, -1.0]
# clip2.ClipType.Origin = [0.0, 0.0, 0.0]
clip2.ClipType.Origin = [0.0, 0.0, float(sys.argv[1])]
clip2.ClipType.Normal = [0.0, 0.0, 1.0]
#修改保存文件名
# save data
# SaveData('Solid_holdup_.csv', proxy=pythonCalculator1)
SaveData('Solid_holdup_'+sys.argv[1]+'_'+sys.argv[2]+'.csv', proxy=pythonCalculator1)
附赠一个脚本,具体解释参考这篇文章 shell脚本 自动改参数
for ((i=0;i<=9;i++));
do
low=`awk 'BEGIN {;printf "%.4f\n",'$i'/10 * 0.6 }'`
high=`awk 'BEGIN {;printf "%.4f\n",('$i'+1)/10*0.6 }'`
pvpython Cal_Solid_holdup1.py $low $high
# cat Solid_holdup_1.csv | awk -F ',' '{if(NR>=1 && NR <=2) print $48}'
solid_holdup=`cat Solid_holdup_$low'_'$high.csv | awk -F ',' '{if(NR ==2) print $48}'`
echo $low' : '$solid_holdup
echo $low' : '$solid_holdup >> solid_holdup.txt
done
cat solid_holdup.txt
#输出:
#0.0000 : 0.19869
#0.0600 : 0.3005
#0.1200 : 0.2941
#0.1800 : 0.2786
#0.2400 : 0.23015
#0.3000 : 0.10267
#0.3600 : 0.0059612
#0.4200 : 0.00040967
#0.4800 : 0.00012642
#0.5400 : 0