openfoam程序paraview pvpython后处理脚本

今天更新一个用paraview的pvpython对openfoam程序进行后处理的方法,以统计轴向固含量为例

pvpython

ParaView附带了两个执行Python脚本的命令行程序:pvpython和pvbatch。它们类似于python发行版附带的python可执行文件,因为它们从命令行或文件中接受python脚本,并将脚本提供给python解释器。

算例简介

在这里插入图片描述
算例是长这样的,dddd。

创建Python脚本跟踪

首先,清空paraview, 选择EditReset从菜单中重置会话。

1. 开始录制宏脚本

单击Tools菜单中的Start Trace选项。显示了一个带有Trace选项的对话框。现在,只需单击“确定”。
在这里插入图片描述
在这里插入图片描述
all properties 跟踪所有特性的值,即使它们保持默认值。这有助于保存所有可能的属性,或确保状态一致,而不管其他用户的设置如何。这也会产生非常详细的输出,可能很难读取。
any modified properties 忽略其默认值不变的任何属性。对于大多数用例来说,这是一个很好的选择。
only user-modified properties 忽略用户未明确设置的任何属性。这种性质的跟踪依赖于运行脚本时重新应用的任何内部设置属性。

现在点击Tools菜单中的Start Trace变为了Stop Trace,这表明当前正在录制操作。

2. 进行操作—以统计轴向固含率为例

(1)打开foam或vtk文件

建议用reconstructPar命令合并进程,foamToVTKfoam文件转为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 ,FiltersAlphabeticalPython Calculator
    在这里插入图片描述
    或者 ctrl+space搜索Python Calculator
    在这里插入图片描述
    Expression填1-mean(voidfraction),Array name随便写比如Solid_holdup,apply
    在这里插入图片描述
    新建一个layout,选SpreadSheet View
    在这里插入图片描述
    在这里插入图片描述
    找到Solid_holdup,即为轴向0~0.05的平均固含率。FileSave Data,保存一个文件名,比如Solid_holdup_1.csv
    在这里插入图片描述

3.结束录制

现在点击Tools菜单中的Stop Trace,结束录制操作。
在这里插入图片描述
得到python脚本文件,里面保留了刚才进行的所有操作。另存为Cal_Solid_holdup.py
现在我们得到一个可以计算轴向0~0.05的平均固含率的脚本,下面介绍怎么使用这个脚本。

使用python脚本

自定义ParaView行为的一种简单但强大的方法是将Python脚本添加为宏。宏只是一个自动脚本,可以通过工具栏中的按钮或菜单栏中的条目调用。

MacrosAdd 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

猜你喜欢

转载自blog.csdn.net/qq_43488795/article/details/125882914