找回密码
 注册
查看: 2620|回复: 4

请问,编译型UDF是怎么写的啊?

[复制链接]
发表于 2010-8-7 13:17:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请问,编译型UDF是怎么写的啊?
发表于 2010-8-7 17:08:24 | 显示全部楼层
坐等高手
 楼主| 发表于 2010-8-11 15:32:23 | 显示全部楼层
看了一些帖子,,几乎全是解释型的啊,,好象,,,编译型的好象可以解方程的,,,那就是说可以用于两个软件的通讯了,,等高手指点下啊,,给个例子看看,,
发表于 2010-8-12 22:04:50 | 显示全部楼层
#include "udf.h"
#include "sg_mphase.h"
# define pi 4.*atan(1.)
#define diam2 8.775e-05

DEFINE_EXCHANGE_PROPERTY(custom_drag_syam, cell, mix_thread, s_col, f_col)
{
Thread *thread_g, *thread_s;
real x_vel_g, x_vel_s, y_vel_g, y_vel_s, abs_v, slip_x, slip_y,
      rho_g, rho_s, mu_g, reyp, afac,
      bfac, void_g, vfac, fdrgs, taup, k_g_s;

real Syam1 = 0.765;
real Syam2 = 2.928;

thread_g = THREAD_SUB_THREAD(mix_thread, s_col);
thread_s = THREAD_SUB_THREAD(mix_thread, f_col);

x_vel_g = C_U(cell, thread_g);
y_vel_g = C_V(cell, thread_g);

x_vel_s = C_U(cell, thread_s);
y_vel_s = C_V(cell, thread_s);

slip_x = x_vel_g - x_vel_s;
slip_y = y_vel_g - y_vel_s;

rho_g = C_R(cell, thread_g);
rho_s = C_R(cell, thread_s);

mu_g = C_MU_L(cell, thread_g);

abs_v = sqrt(slip_x*slip_x + slip_y*slip_y);

reyp = rho_g*abs_v*diam2/mu_g;

taup = rho_s*diam2*diam2/18./mu_g;

void_g = C_VOF(cell, thread_g);

afac = pow(void_g,4.14);

if(void_g<=0.85)
  bfac = Syam1*pow(void_g, 1.28);
else
  bfac = pow(void_g, Syam2);

vfac = 0.5*(afac-0.06*reyp+sqrt(0.0036*reyp*reyp+0.12*reyp*(2.*bfac-
              afac)+afac*afac));
fdrgs = void_g*(pow((0.63*sqrt(reyp)/vfac+4.8*sqrt(vfac)/vfac),2))/24.0;

k_g_s = (1.-void_g)*rho_s*fdrgs/taup;

return k_g_s;

}

[ 本帖最后由 浪子轻狂 于 2010-8-12 14:08 编辑 ]
 楼主| 发表于 2010-8-13 20:53:25 | 显示全部楼层
非常感谢浪子兄的例子,,但说实话,,这和解释型的有什么区别?,,我用解释型解释了下这个例子,,也通过了啊?这是我写的压力出口的UDF,该压力是其压力本身及速度的多项式,,编译通不过,,解释可以通过,,麻烦帮忙看看,,有什么问题,,谢谢,特别是那个 j = 0.001; j=0.00005*dj+j;,是想表示J初值是,0,0001,,然后每次循环,,增加一点数值,,我那样写对吗?谢谢,,
#include "udf.h"

#define H 0.625
#define W 0.221
#define fic0 0.034
#define R 0.326
#define le 0.63
#define li 0.63
#define Ud 102
#define mu 0.00002
#define a 3.2
#define m 1.75
#define Vp 2.5
#define as 340
#define Lc 1.11
#define Den 1
#define Ac 0.25
#define I 0.03
#define c1 0.02
#define c2 0.017

DEFINE_PROFILE(unsteady_pressure, thread, position)
{
  face_t f;
  real p,k;
  real q,dq,dj,j,b,B,lc,mB,ent,La1,u1,u2;

  begin_f_loop(f, thread)
  {
    real t = RP_Get_Real("flow-time");
    p = F_P(f,thread);
    k = F_U(f,thread);
    j = 0.001;

if (t <= 0.02)   
    F_PROFILE(f, thread, position) = 101325;
else
    q=0.125*k;
    b=2*as*(sqrt(Ac*Lc/Vp));
    B=Ud/b;
    lc=li+le+1/a;
    mB=(1-m)*b-1;
    ent=-q*q;
    La1=(Den*R*R*R*Ac*b)/(I*Ud);
    u1=H*(1+1.5*(q/W-1)*(1-j/2)-0.5*(q/W-1)*(q/W-1)*(q/W-1)-(le*Ud*La1*ent*q)/(b*H))+fic0+c1*(q-2*W);
    dq=((fic0-p)/H+1+1.5*(q/W-1)*(1-j/2)-0.5*(q/W-1)*(q/W-1)*(q/W-1)-(le*Ud*La1*ent*q)/(b*H))*H/lc;
    dj=j*(1-(q/W-1)*(q/W-1)-j/4-(mu*W)/(3*a*H)-(2*Ud*La1*(m-1)*W*ent)/(3*b*H))*((3*a*H)/((1-mB*a)*W));
    u2=H*(1.5*(dq/W)*(1-j/2)-0.75*(q/W-1)*dj-1.5*(q/W-1)*(q/W-1)*dq/W+(3*le*Ud*La1*q*q*dq)/(b*H))+c1*dq;   
F_PROFILE(f, thread, position) = -c2*(p-u1)+(q-2*W)/lc+u2;
    j=0.00005*dj+j;
  }
  end_f_loop(f, thread)

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表