如下图所示,等边三角形的网格单元为c0, 蓝色的网格单元为c1。两者的中心分别为和。网格单元c0和c1共享一个面f,如下的二维图中即为线段ab。INTERIOR_FACE_GEOMETRY宏就是用来获取关键的网格单元之间连接几何信息的。要调用该宏,首先必须加入头文件“sg.h”。
INTERIOR_FACE_GEOMETRY宏的参数定义如下:
以下是一个例子,用来获取网格c0到c1的矢量(采用VC++ UDF Studio插件编译通过)。
#include "udf.h"
extern "C"
{
#include "sg.h" //必须的头文件
};
DEFINE_ON_DEMAND(test)
{
Thread*tf;
Domain*domain = Get_Domain(1);
thread_loop_f (tf,domain)
{
if (!BOUNDARY_FACE_THREAD_P(tf)) //如果不是边界面的线索,因为边界面无法调用INTERIOR_FACE_GEOMETRY宏
{
face_t f;
real ds,A_by_es;
real A[ND_ND],es[ND_ND],dr0[ND_ND],dr1[ND_ND],NV_VEC(vector_c0_c1);
begin_f_loop(f,tf) //对面进行循环
{
if(PRINCIPAL_FACE_P(f,tf)) //避免并行版本中出现重复统计的面
{
INTERIOR_FACE_GEOMETRY(f,tf,A,ds,es,A_by_es,dr0,dr1); NV_VS(vector_c0_c1,=, es, *, ds);
//现在vector_c0_c1中包含了从 网格c0到c1的矢量
}
}
end_f_loop(f,tf);
}
}
}