首页/文章/ 详情

Paraview作图技巧:两相流中压力波(声音)的传递

1年前浏览5581
01        
两相流压力波传播算例        

以下2幅动画给出的是压力波在二维面上的传播,展示的是声波从左边的单相区(水)传播至右边的两相区(水和空气)的情况。


单相区长度0.015m,两相区长度0.03m;

两相区共1001个气泡,气泡粒径1.5e-4 m;

网格的最小尺度是5e-6 m,即粒径等于30个网格大小;

二维网格数量为400万;

CFL=0.2;

时间步长约6.74e-10s;

共使用937核运行74.2万步,用时约4天。

02      
数值方法      

采用基于可压缩求解的VOF方法,并对两相界面进行重构。时间递进采用4阶Runge–Kutta方法,并采用3阶Osher–Chakravarthy TVD空间离散格式。两相界面通量计算采用精确黎曼解。

计算的主要参数:

相含率α=0.2 

粒径D=0.15 mm

 Pa

入口处扰动压力的幅度Δp=230 Pa 

压力波频率f=10 kHz


03      
Paraview 5.2 后处理      

以若干plt文件为例介绍paraview后处理。


 Part 1  本地文件处理 

01    

首先激活start trace,使paraview可以记录鼠标操作并将其转换为python命令。这些命令可用于之后的批处理。

 

 

按照默认选项,点击OK即可激活trace。

 

 
02    
需要打开一组(不是一个)plt文件
 

显示压力云图(以及相含率云图)。注意到此时处理的是第一记录步的流场。

     

     
03    

截面

虽然做的是二维计算,但其实结构还是三维的,只不过在z方向上没有做任何计算而已。所以为了分析二维面上的流场,需要截个面出来。

按钮 

     

     
04        

截完平面以后,继续计算dp。

点击按钮计算

要点:如上图所示,我们现在处理的是刚才所截平面的流场,所以要激活Slice1,并显示其流场(左边的眼睛是亮着的)。顺带着关闭流场Tec-*的显示(眼睛暗了)。

 

到此我们取得了在某个截面上的的云图。

05    

接下来处理颗粒的显示。

颗粒的显示用相含率标定。但是一般情况下,显示效果图如下:

 
但这不是我们想要的效果,还需要做调整。  

首先激活Slice1图层。在下图所示的右侧点击按钮调整mapping的基本形式。

 

 

选择X ray黑白颜色

 

 

接下来在map轴线上点击增加两个点,如图所示。

 

 

将相含率区间1e-5到1e-3,以及0.999-0.9999区间的颜色设置为白色(RGB111),区间0.001-0.999设置成黑色(RGB000)。那么颗粒就有如下显示效果了。

 

 

隐藏color legend,同时适当调节透明度,方便同时观察两个图层。

 

 
06        

同时显示dp与相含率可得到下图:

 

 
07        

最后对结果图像输出保存(Save screenshot)

08        

以上介绍的是处理第一个plt文件的情况,对于其余时间序列的文件,直接按下一时刻按钮可自动生成该时刻的图像。

 

 
09        

若想保存动画,可以使用菜单上的File>>Save animation

10        

最后我们也可以得到以上一系列操作对应的python命令。

 

 
 

 

该python文件可以保存并导入。

Macro>>Add new macros

导入之后下次可以重复执行之前的步骤,而不用再操作一遍了


Part 2 远程文件后处理

上面得到的python文件不但可以在paraview GUI中执行,更重要的是也可以在控制台下执行。对于在远程集群上计算得到的结果,往往数据量巨大。下载到本地再进行处理是一件不经济的事情。往往需要在远程服务器上后处理后,直接将后处理得到的图像或者数据结果下载到本地再进行分析。

那么远程如何进行后处理呢?

需要对python文件稍作修改。


向上滑动阅览

import sys

number=sys.argv[1]

#fileFolder=sys.argv[2]

#outputFolder=sys.argv[3]

 

#### import thesimple module from the paraview

from paraview.simpleimport *

#### disableautomatic camera reset on 'Show'

paraview.simple._DisableFirstRenderCameraReset()

 

# create a new'VisItTecplotBinaryReader'

#tec90plt=VisItTecplotBinaryReader(FileName=['E:\\RemoteDir\\Tec-90.plt'])

tec90plt=VisItTecplotBinaryReader(FileName=['./Tec-'+number+'.plt'])

# get active view

renderView1 =GetActiveViewOrCreate('RenderView')

# uncommentfollowing to set a specific view size

renderView1.ViewSize= [1627, 810]

SaveScreenshot('./p-'+number+'.png', magnification=1, quality=100, view=renderView1)


只需要在之前生成的python文件中增加/修改以下几处:

1 增加import sys,可以从外面调参数到python执行程序中来;

2 变量number是从外部导入的变量,用来指导该python命令处理的是哪个具体数据;

3 renderView1.ViewSize需要设置,该参数会影响到输出图像的分辨率。笔者在这个地方纠结很久,GUI生成的python语句通常会自动把该部分注释掉,从而导致从控制台命令中输出的图像分辨率非常糟糕;

4 修改SaveScreenshot命令中的保存文件的路径名称,以及图像的大小(通过magnification调整)。

 

修改好python执行程序以后(假设文件名pv.py)

到控制台下执行如下命令:

pvbatch --use-offscreen-rendering ./pv.py 90

即可进行图像的输出(其中90代表处理的是当前目录下的文件Tec-90.plt)。

若要处理若干plt文件,可采用shell脚本处理99个plt文件:

for i in `seq 1 99`

do

    pvbatch --use-offscreen-rendering ./pv.py $i

done

其中--use-offscreen-rendering是在paraview 5.4版本之前采用,最新的5.6版本使用如下语句:

--force-offscreen-rendering

来源:多相流在线
FluentOpenFOAM碰撞多相流湍流核能电力pythonTecplot材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-22
最近编辑:1年前
积鼎科技
联系我们13162025768
获赞 108粉丝 109文章 299课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈