CFDEM:Liggghts和OpenFOAM耦合实现CFD-DEM(二)

     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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值