首页/文章/ 详情

Fluent UDF中的数据结构

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
1年前浏览4167

本文介绍Fluent UDF中一些常用的数据结构。

在Fluent UDF中,除了可以使用标准C/C++语言的数据类型外,还可以使用一些Fluent中特有的与求解器相关的数据类型(这些数据类型与计算网格有关)来定义UDF中的数据。这些数据类型定义的变量通常作为参数提供给DEFINE宏,用于访问和获取Fluent的求解数据。

1 常用的数据结构

一些比较常用的Fluent数据类型包括:

1、Node

结构体。用于存储与网格节点相关的数据。

2、face_t

整型数。用于标识face Thread中的特定网格面。可以将其视为网格面的编号。

3、cell_t

整型数。用于标识cell Thread中的特定网格单元。可将其视为网格单元的编号。

4、Thread

结构体。存储其所代表的网格单元或网格面的数据。在Thread数据结构中包含有一个指针数组,其中每个指针都指向一个特定场变量(如压力、速度或梯度)的网格单元值或网格面值数组。在该指针数组中,用来标识指向特定场变量(单元值或面值)数组的指针的索引为Svar类型。在多相流问题中,每一相以及Mixture相都有一个Thread结构。

5、Svar

用于标识Thread结构中存储的指针的索引。该索引变量的所有可能值都定义在文件src/storage/storage.h中所包含的关于该类型的枚举中。需要注意有些值是使用SV_[COUPLED_],SOLUTION_VAR[_WITH_FC](...), SV_UDS_I(...) or SV_UDSI_G(...)等宏生成的,这些值无法在枚举中直接找到。若数组中的指针值为NULL,那么表示还未分配相应场变量的内存,此时可以利用函数Alloc_Storage_Vars(domain, SV_..., ..., SV_NULL);分配内存。利用表达式if (NULLP(THREAD_STORAGE(t, SV_...))可以用来测试某个特定场变量的内存是否已经被分配到某个Thread上。

6、Domain

结构体。用于存储与网格节点、网格面和网格单元Thread集合相关的数据。单相流问题只有一个Domain结构;对于多相流问题,每一相、相间相互作用以及混合物都有Domain结构。

2 多相流数据结构

除了基本数据类型外,还有一些专门针对多相流UDF的特殊Thread及Domain数据结构。这些数据类型用于存储所有相的混合物的属性及变量,以及在使用多相流模型(Mixture、VOF或Eulerian)时存储每个独立的相的属性和变量。

在多相流应用中,顶层Domain被称为superdomain。每个相占据一个被称为subdomain的Domain。第三种Domain类型为相互作用Domain,其被引入以允许定义相间相互作用。当需要混合相的属性和变量时,可以利用superdomain获取信息。subdomain只存放单个相的信息,每一个相都有自己的subdomain。

求解信息存储在Thread数据结构中,Thread必须与superdomain以及每个subdomain相关联。也就是说,对于superdomain中定义的每个网格单元或网格面的Thread,每个subdomain都有一个相应的网格单元或网格面的Thread。在superdomain的一个Thread中定义的一些信息是与每个subdomain相应Thread共享的。

上图引入了domain_id和phase_domain_index的概念。domain_id可以在UDF中用来区分superdomain和主相及次相Domain。superdomain(mixture)的domain_id总是被分配为1,交互domain也用domain_id标识。domain_id不一定按顺序排列,各相的id值可以通过gui界面查看。

在UDF中,phase_domain_index可以用来区分主相和次相的phase-level thread。对于主相的phase-level Thread,其phase_domain_index总是被指定为0。


(未完待续)


来源:CFD之道
Fluent多相流UDF
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-04-19
最近编辑:1年前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2569粉丝 11336文章 737课程 27
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈