ARM技术论坛
直播中

李红

7年用户 1226经验值
私信 关注
[经验]

基于C语言进行编程的Fluent UDF

  C语言数据类型主要有整型int、浮点型float、指针*、数组array[]、结构体struct等。正常来说,既然UDF是以C语言进行编程的,那么UDF中的数据类型也应该是这几种才对,而不能无中生有搞出其他数据类型来。
  UDF常用的数据类型如下:
  1. 实数(real):
  实数是Fluent UDF中最常用的数据类型之一,用于存储浮点数值。实数通常用于定义物理量,如速度、压力、温度等。具体是单精度还是双精度,取决于Fluent软件打开界面有没有勾选双精度。
  2. cell_t:
  cell_t是一个代表单元的整数据类型。在Fluent中,单元通常指的是三维空间中的体单元。cell_t类型用于访问单元的几何和物理特性。
2.jpg
  3. face_t:
  face_t是一个代表面的整数据类型。在Fluent中,面通常指的是单元的表面,也就是单元之间的接口。face_t类型用于访问面的几何和物理特性。
2.jpg
  4. Thread:
  Thread是ANSYS Fluent中的一个非常重要的结构体数据类型。在Fluent UDF中,Thread经常用于访问单元和面,以及定义物理量和边界条件等。
  5. Domain:
  Domain是一个代表整个计算域的结构体数据类型。它包含了所有的Thread,每个Thread又包含了一组单元和面。在Fluent UDF中,Domain经常用于定义物理量、边界条件和求解器选项等。例如,可以使用Domain中的函数来定义流体的初始条件和边界条件。
2.jpg
  尽管UDF使用如cell_t等特殊字符来声明变量,但是其本质还是C语言常用的数据类型。
  比如上面提到的Thread和Domain都是结构体类型,其中可能包含很多数据变量,如cell,face等
  而比较有意思的是cell_t和face_t数据类型,cell_t可以用来声明网格cell,face_t用来声明face,但是他们竟然是整型变量!!!!
  这引出来很多有意思的问题:
  1. 既然cell_t声明的是整型变量,那声明语句cell_t c中的c就是一个整数,根本不是什么特别神秘的网格,其实就是一个整型变量。
  2. begin_c_loop(c, thread)这个语句什么意思??循环遍历网格,如果c是一个整型变量,那么其实这个语句就类似于for循环,而其中的c只是循环变量。
2.jpg
  上面的代码会输出什么??c会从小到大输出0,1,2,3······
  3. UDF遍历网格顺序是什么??
  之前测试过UDF遍历网格的顺序,也得出来了结论,现在看来是错误的。UDF遍历网格的顺序很简单,就是c从小到大遍历,既不按照x轴坐标,也不按照y轴坐标
2.jpg
  4. 每个网格都有一个编号,既然这样,只要知道了特定网格的编号,使用UDF似乎可以违背任何物理规律,为所欲为????



原作者:学习Fluent的狗子 Fluent学习笔记

更多回帖

发帖
×
20
完善资料,
赚取积分