Liggghts和OpenFOAM耦合计算结果的展示用到后处理软件Paraview,能够显示颗粒和流场的信息。这篇文章展示了如何使用Paraview制作动图gif。所谓的gif就是将连续的时间步的计算结果叠加在同一个图中,并逐帧播放。我这里用到的Paraview的版本是ParaView 5.12.0-RC1。
上面讲到gif的原理,因此制作gif分为两步,第一步是保存每一时间步的运行结果,第二步是将这些结果进行叠加。
1. 保存每一帧图像
保存每一时间步的结果时,用到Paraview中python shell,用python脚本控制
(1)在view中调出Python Shell
(2)点击Python Shell右下角的Run Script按钮
(3)批量保存截图的python脚本:
from paraview.simple import *
# 设置文件路径和文件名格式
output_path = "yourpath" # 修改为你自己的输出目录
file_prefix = "yourname_" # 文件名前缀
# 获取当前的渲染视图
renderView = GetActiveViewOrCreate('RenderView')
# 设置图像的分辨率
renderView.ViewSize = [1920, 1080] # 设置屏幕截图的分辨率
# 获取时间步数信息
animationScene = GetAnimationScene()
timesteps = animationScene.TimeKeeper.TimestepValues # 获取所有的时间步
# 循环遍历时间步并导出截图
for i, time in enumerate(timesteps):
# 设置当前时间步
animationScene.TimeKeeper.Time = time
Render() # 更新渲染
# 生成输出文件名
file_name = output_path + file_prefix + f"{i}.png"
# 导出屏幕截图
SaveScreenshot(file_name, renderView)
print(f"Saved screenshot for time step {time} as {file_name}")
print("Batch screenshot export completed.")
2. 叠加每一帧图像,形成动图
使用matlab脚本,实现叠加:
%% 制作Gif图
clear;clc;
for i=1:133 % 133是总帧数
str=strcat('yourname_',num2str(i-1), '.png');
A=imread(str);
[I,map]=rgb2ind(A,256);
if(i==1)
imwrite(I, map, 'movefig.gif', 'DelayTime', 0.1, 'LoopCount', Inf); %'DelayTime' - 显示下一个图像之前的时滞
%'LoopCount' - 重复动画的次数
else
imwrite(I, map, 'movefig.gif', 'WriteMode', 'append', 'DelayTime', 0.1);
end
end