Palabos User Guide中文解读 | 第十章 | 运行模拟

作者的话:本人在学习palabos时,发现国内中文资料甚少,恰好网上可以直接搜到palabos user guide这种英文资料,加之时间充裕,便打算开始翻译,翻了一节后发现这可能算侵权,就比较伤脑筋,突然想到自己写中文解读即可,便有了下面的博客。

Palabos User Guide
Release 1.0 r1
Copyright © 2019 University of Geneva
Jul 05, 2019

Chapter Ten
运行模拟
10.1 Palabos程序的时间循环

至少在经典的palabos里LB方法中,每一步演变都是很明显的,从t时间到t+dt。
当dt=1的时候,我们来看看:
1)所有的流体变量都是在时间t时刻定义的。所有的粒子团都是预碰撞状态。
2)将碰撞算子施加到所有的格子上。此时粒子团都是碰撞后状态。
3)将流动算子施加到网格上。
4)运行所有数据处理器,实现一些非局部的操作或格子的耦合。
5)t=t+1,所有格子回到预碰撞状态。

其中(2)中的碰撞步骤由lattice.collide()引发,接下来(3)中的流动步骤由lattice.stream()引发。
两个操作可以同时结合到一个代码中,即lattice.collideAndStream()。

在大部分硬件平台,collideAndStream()计算更有效率,因为它只经历了一次的格子内存读取。

你可以通过lattice.executeInternalProcessors()来手动执行数据处理器,在16.3.4节里有解释说明。
然而我们很少这么做,因为数据处理器会在stream() 和collideAndStream()函数结束后自动运行。

如果你希望只允许stream和collideAndStream运行而停止数据处理器运行,比如说在debug的时候,你就可以用这些函数的域版本函数,比如:

lattice.collideAndStream(lattice.getBoundingBox())

通常palabos只会在碰撞流动过后再执行数据处理器,所以非局部的数据处理器总是在碰撞流动之后的,这并不影响程序的一般性,毕竟在t之前碰撞和t-1流动之后运行数据处理器效果一样。

唯一的问题就是在初始化之后,我们只希望数据处理器运行一次。方法是:在第一轮迭代之前实现通过lattice.initialize()初始化,这样就实现了仅运行一次数据处理器。

10.2 何时评估数据?

pcout << computeAverageEnergy(lattice) << endl;

上面这行代码用于输出平均能量。在观察程序运行的过程时,我们总需要时不时输出一些液体动力学的参数来看看情况。

推荐在预碰撞的情况下计算这些参数。虽然说对于conserved质量和速度这类碰撞前后相等,主要是non-conserved的变量,比如压力张量,速度矩这类就只可以在预碰撞的时候计算。如果我们使用collideAndStream(),不用担心做错,毕竟我们也没办法访问碰撞后变量。

通常这种计算变量供我们参考的代码,都是在collideAndStream()功能之后的。因为这个时候所有的流体变量都已经定义好了,对应着时刻(在碰撞和流动之间速度已被明确定义,但应变率{strain-rate}没有)。

Lattice内部统计数据是个例外。内部数据都是自动计算的,不影响程序的性能(至少单线程是不影响的,多线程可以去看15.2节控制效率),成为运行碰撞步骤的副作用。

内部数据在t至t+1的时间里,在t时刻被计算出来,由此我们可以在collideAndStream()功能之后访问内部数据。
上面例子的代码说到在碰撞和流动前计算平均能量,与这结果一样,在碰撞和流动后访问内部数据计算平均能量的结果一样,代码如下:

pcout << getStoredAverageEnergy(lattice) << endl;

10.3 其他重要的事情

数字总是很难表述,由此你需要周期性生成图片来观察流体的模拟情况,以找到问题。可在11.5节 生成2D3D模拟图像 处找到步骤。

最后,你最好是不是保存你的模拟条件,当电脑死机的时候可别丢了数据。

当你忘记关键的输出文件时,为了恢复数据,你可以去 看看11.7节 检查点:保存和载入模拟情况

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值