UDF使用过程中,经常要通过循环遍历的方式对数据进行操作,如设置边界条件时,需要给每一个边界网格面赋值,此时需要通过逐层循环的方式访问每一个边界网格面。Fluent UDF中提供了众多循环来实现此功能。这些宏包括:
-
区域中单元循环thread_loop_c
-
区域中网格面循环thread_loop_f
-
单元中单元循环begin...end_c_loop
-
面中面循环begin...end_f_loop
-
单元中面循环c_face_loop
-
单元中的节点循环c_node_loop
-
单元面中的节点循环f_node_loop
利用thread_loop_c在指定domain中遍历所有的网格单元(cell)。使用方式非常简单,如下:
Domain *domain; Thread *c_thread; thread_loop_c(c_thread,domain) {
/*对单元进行操作*/ ... }
利用宏thread_loop_f来遍历domain中的所有网格面(face)。与遍历网格单元类似的使用。如:
Thread *f_thread; Domain *domain; thread_loop_f(f_thread,domain) {
/*对网格面进行操作*/
}
使用宏begin_c_loop及end_c_loop对所给定的网格单元集合中的所有单元进行遍历。
使用方式:
cell_t c; Thread *c_thread; begin_c_loop(c, c_thread) { } end_c_loop(c, c_thread)
例如下面程序计算c_thread中的所有单元的温度和:
begin_c_loop(c, c_thread) { temp += C_T(c, c_thread); } end_c_loop(c, c_thread)
利用宏begin_f_loop与end_f_loop来遍历给定face集合中的所有网格面。
使用方式:
face_t f; Thread *f_thread; begin_f_loop(f, f_thread) { } end_f_loop(f, f_thread)
以下例程计算给定网格几何f_thread上的所有网格面上温度总和。
begin_f_loop(f, f_thread) { temp += F_T(f, f_thread); } end_f_loop(f, f_thread)
利用宏c_face_loop来实现遍历网格单元上的所有网格面。如:
cell_t c; Thread *t; face_t f; Thread *tf;int n; c_face_loop(c, t, n) { f = C_FACE(c,t,n); tf = C_FACE_THREAD(c,t,n); }
利用宏c_node_loop来实现遍历网格单元中的所有网格节点。
cell_t c; Thread *t; int n; Node *node; c_node_loop(c,t,n) { node = C_NODE(c,t,n); }
利用宏f_node_loop来实现此目的。
face_t f; Thread *t;
int n; Node *node; f_node_loop(f,t,n) { node = F_NODE(f,t,n); }
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册