找回密码
 注册
查看: 4261|回复: 6

怎么在UDF中表示压力对时间的导数,谢谢,

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

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

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

x
我用UDF给定出口背压,该背压是含有其本身对时间的导数项的多项式,比如=0,5*P^2+0.5*dP/Dt,我知道压力值、时间值都可以读取,但不知道怎么表示这个导数顶,请各位大侠请帮忙一下,谢谢,
发表于 2010-8-9 22:05:19 | 显示全部楼层
P=0,5*P^2+0.5*dP/Dt

用UDF
设置边界条件,解上面的微分方程
 楼主| 发表于 2010-8-11 15:25:20 | 显示全部楼层
在UDF中我只看到某一值直接等于多少,没有看到有解方程的那种形式啊,象MATLAB中有解方程函数,比如ODE45()之类,难道FLUENT中也有?麻烦解释一下,或者说,,UDF与C语言中相通的,只是用普通C写的必须用编译来通过,,这个好象也不是很懂,,请达人指教,,
发表于 2010-8-11 22:41:38 | 显示全部楼层
解方程是要自己编写C程序的
 楼主| 发表于 2010-8-13 20:58:42 | 显示全部楼层
可以写在UDF中吗?在这个UDF中,,我需要压力,流量等的对时间的导数,,但我不知道在FLUENT中用什么函数,,,只好直接写成多项式了,,有什么问题没有?
#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)

}
 楼主| 发表于 2010-8-17 17:01:58 | 显示全部楼层
DEFINE_PROFILE(unsteady_pressure, thread, position)
{
  face_t f;
  real p,k,ki;
  real q,dq,dj,b,lc,mB,ent,La1,u1,u2,Z,X;

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

    dq = 0.0125*(k-ki)/0.00005;
       
        F_PROFILE(f, thread, position) = 0.00005*dq+p;
  }
  end_f_loop(f, thread)

}

这是我自己写的速度对时间的导数,,,编译可以通过,,但不能初始化,,发现是ki = F_U_M1(f,thread);这句的问题,,请大家帮忙看下,,为什么?
发表于 2010-8-20 23:49:59 | 显示全部楼层
利用相邻时间节点的压力差除以时间步长
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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