首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

国防军工丨能源电力丨核能核电丨石油石化

- 多 相 的 世 界 -

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G0YCHM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券