从今天开始,我们将走入UDF的核心世界,仔细剖析每个宏的使用方法及其使用过程中需要注意的事项。
前文提过,UDF程序编写的核心内容在于搞明白数据如何获取?数据如何转换?数据如何返回?Fluent提供了众多的辅助宏来实现这三个功能。主要包括:
-
数据访问。主要功能为获取求解器中的数据,如得到单元中的温度、压力、速度等物理量。
-
循环控制。主要提供遍历搜索功能。如设置边界条件数据,则需要利用循环控制宏遍历所有的边界面。
-
向量操作宏。主要提供一些向量运算操作。
-
输入输出宏。提供与外部数据交互的能力。
-
Scheme宏。主要用于GUI定制。
数据获取宏的内容很多,包括各种节点数据、网格单元数据、网格面数据、网格链接关系数据、索引数据、时间相关数据、物性数据等。本文描述其中的部分内容,剩余部分在后续文章中逐渐描述。
注意轴对称数据:当计算采用了轴对称模型或轴对称旋转模型时,需要注意利用数据获取宏得到的面数据(如利用宏F_AREA得到的截面面积)均指的是1弧长面积上的数据,如果要得到整个截面上的数据,则需要乘上2PI(可以利用宏M_PI)
节点宏获取节点信息,如获取节点x,y,z三方向坐标,或获取网格面上的节点数量。
-
获取节点位置信息
获取节点位置包括三个宏,它们在头文件metric.h
中被定义。这些宏包括NODE_X,NODE_Y,NODE_Z:
宏 | 参数类型 | 返回值 |
---|---|---|
NODE_X | Node *node | 返回node的x坐标,real类型 |
NODE_Y | Node *node | 返回node的y坐标,real类型 |
NODE_Z | Node *node | 返回node的z坐标,real类型 |
说明:此宏使用很简单,不过在使用之前需要定义变量Node *v,然后在循环体中利用宏F_NODE获取节点,之后直接应用宏NODE_X(v)获取节点v的x坐标。
如下程序片段取自DEFINE_GRID_MOTION宏:
{ Node *v;
int n; face_t f; Thread *tf = DT_THREAD(dt); begin_f_loop(f,tf) { f_node_loop(f,tf,n) { v=F_NODE(f,tf,n);
if(NODE_X(v)>0.2) { ... } } } end_f_loop(f,tf);
}
-
获取面上节点数量
宏F_NNODES可用来获取面上节点的数量信息,该宏在头文件mem.h
中定义。
宏 | 参数类型 | 返回值 |
---|---|---|
F_NNODES(f,t) |
face_t f Thread *t |
返回节点数量,int类型 |
此宏的使用更简单,直接在面循环体内调用即可,也可以在cell循环体内使用。
{
int number; face_t f; Thread *tf = DT_THREAD(dt); begin_f_loop(f,tf) { number = F_NNODES(f,tf); } end_f_loop(f,tf); }
网格信息访问宏大多数放置在mem.h头文件中,更多关于节点访问的宏可以在此文件中找到。该文件位于Fluent安装目录下..ANSYS Incv180fluentfluent18.0.0srcstorage文件夹中。该文件夹中放置了众多辅助宏定义的头文件,有很多在文档中没有解释的宏都可以在这里面找到,有兴趣的可以看看,不过千万不要被里面的内容给吓到。
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册