Palabos User Guide中文解读 | 第八章 | 问题设置

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

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

Chapter Eight
问题设置
8.1 分配dynamics对象

首先block-lattice会分配一个默认值的dynamics到所有的格子里,主要是避免有的格子里没有dynamics对象导致bug,这种所谓的dynamics对象叫做 background dynamics。
正常而言,当你生成一个block-lattice时,你必须分配dynamics对象进去,来实现你想要的碰撞类型。
如下面的代码:

// Construct a new block-lattice with a background-dynamics of type BGK.
MultiBlockLattice3D<T,DESCRIPTOR> lattice( nx, ny, nz,
new BGKdynamics<T,DESCRIPTOR>(omega) );

当然,你肯定会需要调整一些局部的格子状态,在palabos里每个格子的dynamics对象都可以再定义的,这种再定义,需要你为所有格子再生成一个单独的dynamics对象copy,以这种方式来覆盖background dynamics。

假如说你强行修改一个cell中的dynamics对象,其他地方都会变的,因为创建block-lattice的时候只会生成一份dynamics object,其他格子都会参考这同一份,由此你用的dynamics对象一定不要与background dynamics相同。

lattice.get(0,0,0).getDynamics().setOmega(newOmega);

像上面这行代码,会影响到所有格子的松弛参数。松弛参数omega储存于dynamics中,而不在格子上。正是因为这种特性,让多个格子对应着相同的对象,只能创个新的block-lattice。

// Override background-dynamics to guarantee and independent per-cell
// copy of the dynamics object.
defineDynamics( lattice, lattice.getBoundingBox(),
new BGKdynamics<T,DESCRIPTOR> );

像这种对应,如果不太满足你的需求,你可以用上面的代码,在创建block-lattice后重新定义dynamics对象,这样每个格子都有一份独立的copy了。

有许多不同的defineDynamics函数,可用于调整格子群的dynamics,可以在附录 Operation on the block-lattice 上看到。

One-cell version: Assign a new dynamics to just one cell.
Example: tutorial/tutorial2/tutorial2_3.cpp.
BoxXD version: Assign a new dynamics to all cells within a rectangular domain.
Example: showCases/multiComponent2d/rayleighTaylor2D.cpp, or the 3d example.
DotListXD version: Assign a new dynamics to several cells, listed individually in a dot-list structure.
Example: codesByTopic/dotList/cylinder2d.cpp
35
Palabos User Guide, Release 1.0 r1
Domain-functional version: Provide an analytical function which indicates the coordinates of cells which get a new
dynamics object.
Example: showCases/cylinder2d/cylinder2d.cpp
Bool-mask version: Specify the location of cells which get a new dynamics object through a Boolean mask, represented through a scalar-field.
Example: codesByTopic/io/loadGeometry.cpp

8.2 初始化密度和速度

常见的做法是,通过给每个格子生成平衡分布方程来初始化密度和速度。

但依赖时间的benchmark problems就特别依赖初始状态,大多数情况下会以一个合理的初始值开始模拟。

initializeAtEquilibrium函数(附录 Operation on the block-lattice)可在方形区域内初始化平衡分布。它有两个好处,一是域内保持密度和速度为常量(如例子examples/showCases/
cavity2d or 3d),二是用户通过自定义的函数来定宏观数值的空间相关值。(如例子examples/showCases/poiseuille)

如果你想换个方法初始化,你可以在 Convenience wrappers for local operations(16.2节)这一节中找到单格子函数与索引的单格子函数,了解自定义的格子算子。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值