Cell Field Variable Macros(单元场变量宏)

数据获取常用宏

除了前面提到的网格单元数据获取宏、网格面数据获取宏及节点数据获取宏外, 在数据获取方面, 还有几个非常常用的宏。编写 UDF 程序时, 经常与这些宏打交道。这些宏包括:

获取指定区域的 Thread

Thread 是 UDF 中一种非常重要的数据结构, 有时常常需要获取某个边界的 Thread 进行其他操作, 此时可以利用宏 Lookup_Thread 实现。

  • 宏描述:Lookup_Thread(d,id)
  • 宏参数:Domain *d, int id
  • 返回值:Thread *t

id 值可以从边界条件面板中获取得到, 如下图所示。

获取某个 zone 的 ID 之后, 就可以对该区域进行操作了。下面的例程是获取 ID 为 1 的边界上各网格面中心节点坐标。

#include "udf.h" 
DEFINE_ADJUST(print_f_centroids, domain) 
{ 
    real FC[2]; 
    face_t f; 
    int ID = 1; 
    Thread *thread = Lookup_Thread(domain, ID); 
    begin_f_loop(f, thread) 
    { 
        F_CENTROID(FC,f,thread); 
        printf("x= %f,y= %f", FC[0], FC[1]); 
    } 
    end_f_loop(f,thread) 
}

获取区域 ID

获取区域的 ID 可以使用宏 THREAD_ID 来实现。

  • 宏描述:THREAD_ID(t)
  • 宏参数:Thread *t
  • 返回值: 返回相应 Thread 的对应 ID 值, int 类型

调用形式:

int zone_id = THREAD_ID(t);

获取区域指针

获取区域指针可以通过宏 Get_Domain 来实现。

当区域的指针无法通过宏参数传递进来时, 可以使用宏 Get_Domain 来获取指定 id 的区域的指针, 利用 DEFINE_ON_DEMAND 宏中。

  • 宏描述:Get_Domain(id)
  • 宏参数:int id
  • 返回值:Domain *d

注意: 对于单相流, id 值为 1; 对于多相流, id 值为大于 1 的整数。

多相流中的 id 值可以在 Phase 对话框中查看。

下面是一个例程:

DEFINE_ON_DEMAND(my_udf) 
{ 
Domain *mixture_domain; 
mixture_domain = Get_Domain(1); 
Domain *subdomain; 
subdomain = Get_Domain(2); 
... 
}

设置边界值

设置边界值可以利用宏 F_PROFILE 来实现。

  • 宏描述:F_PROFILE(f,t,i)
  • 宏参数:face_t f, Thread *t, int i
  • 返回值:void, 此宏没有返回值

此宏后两个参数通过 Fluent 传入, 第一个参数通过循环宏得到。如下例程:

#include "udf.h"
DEFINE_PROFILE(pressure_profile,t,i) 
{ 
    real x[ND_ND]; 
    real y; 
    face_t f; 
    begin_f_loop(f,t) 
    { 
        F_CENTROID(x,f,t); 
        y = x[1]; 
        F_PROFILE(f,t,i) = 1.1e5 - y*y; 
    } 
    end_f_loop(f,t) 
}

获取影子面的 Thread

当一个面存在影子面时, 可以利用宏 THREAD_SHADOW 获取该面的影子的 Thread。

  • 宏描述:THREAD_SHADOW(t)
  • 宏参数:Thread *t
  • 返回值:Thread *t

当宏参数所对应的面没有影子面时, 此宏返回 NULL。

DEFINE_DIFFUSIVITY 宏

Note that diffusivity UDFs (defined using DEFINE_DIFFUSIVITY) are called by FLUENT from within a loop on cell threads. Consequently, your UDF will not need to loop over cells in a thread since FLUENT is doing it outside of the function call. Your UDF will be required to compute the diffusivity only for a single cell and return the real value to the solver.

最后修改:2020 年 09 月 22 日
如果觉得我的文章对你有用,请随意赞赏