首页/文章/ 详情

Fluent 并行UDF丨02 网格术语

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
4年前浏览4842
本文描述Fluen并行UDF中独有的网格术语。

注:本文内容翻译自Fluent文档

并行计算中涉及到网格的分割,因此需要引入一些术语来区分网格中不同类型的单元和网格面。注意这些术语仅适用于并行代码。

1 分区网格中的网格类型

分区网格中主要包括两种类型的网格单元:内部单元与外部单元。内部单元完全存在与网格分区中,外部单元不包含在网格分区中,而是通过一个或多个相邻分区连接到交界面节点。

如果一个外部单元与一个内部单元共享一个网格面,那么它被称为一个规则的外部单元(Regular Exterior Cell)。如果外部单元只与内部单元共享一条边或一个节点,那么它被称为扩展的外部单元(Extended Exterior Cell)。一个计算节点上的外部单元对应于相邻计算节点上的相同内部单元。

当用户希望在并行网格中遍历网格单元时,这种分区边界上的单元**就变得极为重要。有单独的宏用于便利内部网格单元、外部单元以及所有单元。有关详细信息,请参阅循环宏。

图1 分区网格中的网格类型

2 分区边界上的网格面

在一个分区网格中有三种类型的网格面:内部面(Interior Face)、边界面(Boundary Zone Face)和外部面(External Face)。内部面包含两个相邻的网格,其位于分区边界(Partition Boundary)上的内部面称之为分区边界面。边界面位于物理网格边界上,只有一个相邻的网格单元。外部面是属于外部单元的非分区边界面。外部面通常不用于并行UDF。

图2 分区边界上的网格面

注意,每个分区边界面在相邻的计算节点上是重复的。这是必要的,这样每个计算节点都可以计算自己的面值。然而,当UDF涉及到在包含分区边界面的Thread中对数据求和的操作时,这种重复会导致face上的数据被计算两次。例如,如果UDF对一个网格中的所有面求和,那么当每个节点在其面上循环时,重复的分区边界面会被计算两次。因此,Fluent将每个相邻网格**中的一个计算节点作为划分边界面的“principal”计算节点。换句话说,虽然每个面可以出现在一个或两个分区上,但它只能正式属于其中的一个。如果面f是当前计算节点上的principal面,则宏PRINCIPAL_FACE_P(f,t)返回TRUE。

3 PRINCIPAL_FACE_P宏

可以使用PRINCIPAL_FACE_P宏测试测试一个给定的网格面是否是Principal面,然后再将其包含到一个面循环求和中。在下面的示例源代码中,仅当面为Principal面时,它的面积才会添加到整个面积中。

注:PRINCIPAL_FACE_P宏只能用于编译型UDF中。

begin_f_loop(f,t)
   if PRINCIPAL_FACE_P(f,t)
   {
       F_AREA(area,f,t);
       total_area +=NV_MAG(area);
   }
end_f_loop(f,t)

4 外部Thread数据存储

每个Thread将与其网格单元或网格面相关联的数据存储在一组数组中。例如,压力存储在一个数组中,单元格c的压力是通过访问该数组的元素c获得的。外部单元和面数据存储在每个Thread数据数组的末尾。对于单元Thread,常规外部单元的数据先于扩展外部单元的数据

图3 数据存储结构

Fluent
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-03-27
最近编辑:4年前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2421粉丝 10327文章 646课程 27
点赞
收藏

作者推荐

未登录
1条评论
Lsj
哈哈哈
3年前
UDF好难啊
回复

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈