在動網格中,對於那些既包含了運動也包含了變形的區域,可以通過UDF來指定區域中每一個節點的位置。這給了用戶最大的自由度來指定網格的運動。在其他的動網格技術中(如重疊網格)則很難做到這一點。定義網格節點的位置是通過UDF宏DEFINE_GRID_MOTION來實現的。
步驟
可以通過以下步驟來指定既包含剛體運動又包含變形的區域:
-
從Zone Names列表項中選擇運動區域
-
選擇Type為User-Defined
-
在Motion Attributes中,選擇UDF函數。此時的UDF用的是DEFINE_GRID_MOTION宏。
宏的描述
DEFINE_GRID_MOTION ( name , d , dt , time , dtime)
參數:
name:自定義宏的名稱,symbol name。
d:指向區域的指針,Domain *d。
dt:指向存儲動網格屬性的結構體指針,Dynamic_Thread *dt。
time:當前時間,real time。
dtime:時間步長。
宏中包含了5個參數:name,d,dt,time,dtime。其中name為用戶自定義,而d,dt,time以及dtim均由Fluent傳入。
示例文件
以下示例宏文件表達了一個簡支梁的彎曲。
/**********************************************
node motion based on simple beam deflection
equation compiled UDF
*********************************************/
#include "udf.h"
DEFINE_GRID_MOTION(beam,domain,dt,time,dtime)
{
Thread *tf = DT_THREAD(dt);
face_t f;
Node *v;
real NV_VEC(omega), NV_VEC(axis), NV_VEC(dx);
real NV_VEC(origin), NV_VEC(rvec);
real sign;
int n;
/* set deforming flag on adjacent cell zone */
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf));
sign = -5.0 * sin (26.178 * time);
Message ("time = %f, omega = %f\n", time, sign);
NV_S(omega, =, 0.0);
NV_D(axis, =, 0.0, 1.0, 0.0);
NV_D(origin, =, 0.0, 0.0, 0.152);
begin_f_loop(f,tf)
{
f_node_loop(f,tf,n)
{
v = F_NODE(f,tf,n);
/* update node if x position is greater than 0.02
and that the current node has not been previously
visited when looping through previous faces */
if (NODE_X(v) > 0.020 && NODE_POS_NEED_UPDATE (v))
{
/* indicate that node position has been update
so that it’s not updated more than once */
NODE_POS_UPDATED(v);
omega[1] = sign * pow (NODE_X(v)/0.230, 0.5);
NV_VV(rvec, =, NODE_COORD(v), -, origin);
NV_CROSS(dx, omega, rvec);
NV_S(dx, *=, dtime);
NV_V(NODE_COORD(v), +=, dx);
}
}
}
end_f_loop(f,tf);
}
下次會演示這個宏的效果。
更多關於CFD內容,可微信掃描下方二維碼關注微信公眾號。