找回密码
 注册
查看: 3236|回复: 12

液膜蒸发的边界条件的UDF,出错了。【含MASS source】

[复制链接]
发表于 2011-1-19 18:18:37 | 显示全部楼层 |阅读模式

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

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

x
/**************************************************************/
/********** UDF for UDS DIFFUSIVITY****************************/
/**************************************************************/

#include "udf.h"
#include "math.h"
#define Pa 1101300  /* atmosphere pressure */
#define Rg 461
#define h_latent 2542        /* latent heat of water */
#define tf 296

DEFINE_DIFFUSIVITY(diffu,c,t,i)
{
real F;
  F=0.000024/Pa*pow(C_T(c,t)/273.15,18);
  return F;
}

/**************************************************************/
/*UDF for specifying an mass source term in the ***************/
/* equation  of continuous phase                ***************/
/**************************************************************/

DEFINE_SOURCE(mass_source,c,t,dS,eqn)
{
real U;
real hm,area, h;
real A[ND_ND];

U=sqrt(C_U(c,t)*C_U(c,t)+C_V(c,t)*C_V(c,t)+C_W(c,t)*C_W(c,t));
h= 30.86155*pow(U,0.56517);

hm = h/(1.0889*(1005+1840*C_UDSI(c,t,0)));
area = NV_MAG(A);
C_UDMI(c,t,0)=hm/Rg*area/C_VOLUME(c,t)*(9.96072-(101300*C_UDSI(c,t,0)/0.622+C_UDSI(c,t,0))/C_T(c,t));
C_UDMI(c,t,1)=h;

dS[eqn]=0;
return  C_UDMI(c,t,0);
}

/**************************************************************/
/**********source term of x-momentum equations*****************/
/**************************************************************/


DEFINE_SOURCE(xmom_source,c,t,dS,eqn)
{

real  Su;


Su= C_UDMI(c,t,0)*C_U(c,t);
dS[eqn]=0;
return  Su;
}


/**************************************************************/
/**********source term of y-momentum equations*****************/
/**************************************************************/


DEFINE_SOURCE(ymom_source,c,t,dS,eqn)
{

real  Sv;

Sv= C_UDMI(c,t,0)*C_V(c,t);
dS[eqn]=0;
return  Sv;
}



/**************************************************************/
/**********source term of z-momentum equations*****************/
/**************************************************************/



DEFINE_SOURCE(zmom_source,c,t,dS,eqn)
{

real  Sw;

Sw= C_UDMI(c,t,0)*C_W(c,t);
dS[eqn]=0;
return  Sw;
}


/**************************************************************/
/**********source term of energy equations*********************/
/**************************************************************/


DEFINE_SOURCE(heat_source,c,t,dS,eqn)
{

real  Sn;

Sn= C_UDMI(c,t,0)*h_latent/(1005+1840*C_UDSI(c,t,0));
dS[eqn]=0;
return  Sn;
}


/**************************************************************/
/********** UDF for boundary conditon**************************/
/**************************************************************/
DEFINE_PROFILE(wallheatgenerate,t,i)
{

real source;
face_t f;
real A[ND_ND];
area = NV_MAG(A);

begin_f_loop(f,t)

  source=h_latent*C_UDMI(c,t,0)*C_VOLUME(c,t)/area+C_UDMI(c,t,1)*(tf-C_T(c,t));
  F_PROFILE(f,t,i)=-source;
end_f_loop(f,t)
}
 楼主| 发表于 2011-1-19 18:19:23 | 显示全部楼层
用udf设边界条件时,将编译好的udf导入之后,在初始化时fluent显示错误如下:
Error:
FLUENT received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
Error Object: ()

兄弟姐妹们帮忙看看,分析一下,感激不尽!!
发表于 2011-1-20 12:53:27 | 显示全部楼层
经过修改,你这个udf可以运行了,不过,本人对里面的很多机制不清楚,虽然修改到可以运行,但是可以肯定 的说是不能得到正确结果的,
请楼主说明下各个宏的用途,用以判断正误

/**************************************************************/
/********** UDF for UDS DIFFUSIVITY****************************/
/**************************************************************/

#include "udf.h"
#include "math.h"
#define Pa 1101300  /* atmosphere pressure */
#define Rg 461
#define h_latent 2542        /* latent heat of water */
#define tf 296

DEFINE_DIFFUSIVITY(diffu, c, t, i)
{
        real F;
        F = 0.000024/Pa * pow(C_T(c,t)/273.15, 18);
        return F;
}

/**************************************************************/
/*UDF for specifying an mass source term in the ***************/
/* equation  of continuous phase                ***************/
/**************************************************************/

DEFINE_SOURCE(mass_source, c, t, dS, eqn)
{
        real U;
        real hm, area, h;
        real A[ND_ND];
        U = sqrt(C_U(c,t) * C_U(c,t) + C_V(c,t) * C_V(c,t) + C_W(c,t) * C_W(c,t));
        h= 30.86155 * pow(U, 0.56517);
        hm = h/(1.0889 * (1005 + 1840 * C_UDSI(c,t,0)));
        F_AREA(A,c,t);   
        area = NV_MAG(A);
        C_UDMI(c,t,0) = hm / Rg * area / C_VOLUME(c,t)
                * (9.96072 - (101300 * C_UDSI(c,t,0) / 0.622 + C_UDSI(c,t,0)) / C_T(c,t));
        C_UDMI(c,t,1) = h;
        dS[eqn] = 0;
        return C_UDMI(c,t,0);
}

/**************************************************************/
/**********source term of x-momentum equations*****************/
/**************************************************************/


DEFINE_SOURCE(xmom_source,c,t,dS,eqn)
{
        real Su;
        Su = C_UDMI(c,t,0) * C_U(c,t);
        dS[eqn]=0;
        return  Su;
}


/**************************************************************/
/**********source term of y-momentum equations*****************/
/**************************************************************/


DEFINE_SOURCE(ymom_source,c,t,dS,eqn)
{
        real Sv;
        Sv = C_UDMI(c,t,0) * C_V(c,t);
        dS[eqn] = 0;
        return Sv;
}



/**************************************************************/
/**********source term of z-momentum equations*****************/
/**************************************************************/



DEFINE_SOURCE(zmom_source,c,t,dS,eqn)
{
        real Sw;
        Sw = C_UDMI(c,t,0) * C_W(c,t);
        dS[eqn] = 0;
        return Sw;
}


/**************************************************************/
/**********source term of energy equations*********************/
/**************************************************************/


DEFINE_SOURCE(heat_source,c,t,dS,eqn)
{
        real Sn;
        Sn = C_UDMI(c,t,0) * h_latent / (1005 + 1840 * C_UDSI(c,t,0));
        dS[eqn] = 0;
        return Sn;
}


/**************************************************************/
/********** UDF for boundary conditon**************************/
/**************************************************************/
DEFINE_PROFILE(wallheatgenerate, t, i)
{
        real source;
        face_t f;
        cell_t c;
        real NV_VEC(A), area;

        begin_f_loop(c,t)
        {
                F_AREA(A,c,t);
                area = NV_MAG(A);
                source = h_latent * C_UDMI(c,t,0) * C_VOLUME(c,t) / area + C_UDMI(c,t,1) * (tf - C_T(c,t));
                F_PROFILE(c,t,i) = -source;
        }
        end_f_loop(c,t)
}
 楼主| 发表于 2011-1-21 11:04:57 | 显示全部楼层
十分感谢invader
模拟的是管外有水膜的蒸发冷却管内一次空气,管外有二次空气横掠管外水膜;

Rg 461   水蒸气的气体常数
C_UDMI(c,t,0)    水膜的蒸发量,质量源项;
Su,Sv,Sw  动量方程的各个方向上的动量源项;=质量源项*速度
F_PROFILE(c,t,i)    是水膜在管外壁的蒸发的边界条件
C_UDMI(c,t,1)  管外水膜与二次空气的对流换热系数;
F     自定义标量方程的扩散系数;(含湿量方程)
发表于 2011-1-21 11:31:48 | 显示全部楼层
DEFINE_SOURCE(mass_source, c, t, dS, eqn)
DEFINE_PROFILE(wallheatgenerate, t, i)
这两个宏利的变量area是做什么用的呢,源相应该付给体网格上的吧,profile是付给面的,对吗
 楼主| 发表于 2011-1-21 12:08:32 | 显示全部楼层
area 管外壁面积。
发表于 2011-1-21 13:12:46 | 显示全部楼层
如果是外壁面积,那么你的udf肯定就有问题,
取cell的面积,cell是有多个面的,所取的面积又是哪个呢,里面变量非常不明确
 楼主| 发表于 2011-1-21 13:23:52 | 显示全部楼层
F_AREA(A,c,t);
              
real A[ND_ND];

area = NV_MAG(A);

管外壁面积在指定边界条件DEFINE_PROFILE时,FLUENT 不是能识别出来吗?

我这样理解对吗?请invader分析一下啊。
发表于 2011-1-21 21:35:21 | 显示全部楼层
F_AREA(A,c,t);
这个宏的定义原本是F_AREA(A,f,t);
c是cell,f是face,所取对象不同,这结果当然就错
 楼主| 发表于 2011-1-22 15:57:07 | 显示全部楼层
/**************************************************************/
/********** UDF for UDS DIFFUSIVITY****************************/
/**************************************************************/

#include "udf.h"
#include "math.h"
#define Pa 101300  /* atmosphere pressure */
#define Rg 461
#define h_latent 2542        /* latent heat of water */
#define tf 296

DEFINE_DIFFUSIVITY(diffu, c, t, i)
{
        real F;
        F = 0.000024/Pa * pow(C_T(c,t)/273.15, 18);
        return F;
}

/**************************************************************/
/*UDF for specifying an mass source term in the ***************/
/* equation  of continuous phase                ***************/
/**************************************************************/

DEFINE_SOURCE(mass_source, c, t, dS, eqn)
{
        real U;
        real hm, area, h;
        real A[ND_ND];
                face_t f;

        U = sqrt(C_U(c,t) * C_U(c,t) + C_V(c,t) * C_V(c,t) + C_W(c,t) * C_W(c,t));
        h= 30.86155 * pow(U, 0.56517);
        hm = h/(1.0889 * (1005 + 1840 * C_UDSI(c,t,0)));
        F_AREA(A,f,t);   
        area = NV_MAG(A);
        C_UDMI(c,t,0) = hm / Rg * area / C_VOLUME(c,t)
                * (9.96072 - 101300 * C_UDSI(c,t,0) / (0.622 + C_UDSI(c,t,0)) / C_T(c,t));
        C_UDMI(c,t,1) = h;
        dS[eqn] = 0;
        return C_UDMI(c,t,0);
}

/**************************************************************/
/**********source term of x-momentum equations*****************/
/**************************************************************/


DEFINE_SOURCE(xmom_source,c,t,dS,eqn)
{
        real Su;
        Su = C_UDMI(c,t,0) * C_U(c,t);
        dS[eqn]=0;
        return  Su;
}


/**************************************************************/
/**********source term of y-momentum equations*****************/
/**************************************************************/


DEFINE_SOURCE(ymom_source,c,t,dS,eqn)
{
        real Sv;
        Sv = C_UDMI(c,t,0) * C_V(c,t);
        dS[eqn] = 0;
        return Sv;
}



/**************************************************************/
/**********source term of z-momentum equations*****************/
/**************************************************************/



DEFINE_SOURCE(zmom_source,c,t,dS,eqn)
{
        real Sw;
        Sw = C_UDMI(c,t,0) * C_W(c,t);
        dS[eqn] = 0;
        return Sw;
}


/**************************************************************/
/**********source term of energy equations*********************/
/**************************************************************/


DEFINE_SOURCE(heat_source,c,t,dS,eqn)
{
        real Sn;
        Sn = C_UDMI(c,t,0) * h_latent / (1005 + 1840 * C_UDSI(c,t,0));
        dS[eqn] = 0;
        return Sn;
}


/**************************************************************/
/********** UDF for boundary conditon**************************/
/**************************************************************/
DEFINE_PROFILE(wallheatgenerate, t, i)
{
        real source;
        face_t f;
        cell_t c;
        real NV_VEC(A), area;

        begin_f_loop(f,t)
        {
               F_AREA(A,f,t);
                area = NV_MAG(A);
                source = h_latent * C_UDMI(c,t,0) * C_VOLUME(c,t) / area + C_UDMI(c,t,1) * (tf - C_T(c,t));
                F_PROFILE(c,t,i) = -source;
        }
        end_f_loop(f,t)
}
将修改后udf导入之后,在初始化时fluent还是同样显示错误如下:
Error:
FLUENT received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
Error Object: ()
发表于 2011-1-22 19:20:47 | 显示全部楼层
这程序里,一直就存在cell和face混淆的地方,概念不清晰
这个问题,在9楼我已经说过了,
DEFINE_SOURCE( name, c, t, dS, eqn)
这里c的定义是cell,而宏定义里面又使用了face,这显然是有问题的,让face指针识别cell上的face,自然识别出来,应该也是零,因为操作全都是矢量形式的,了不起有点精度误差不为零的地方,
还得想想这area是怎么回事儿,你的mass_source到底是定义给谁的
 楼主| 发表于 2011-1-23 23:36:52 | 显示全部楼层
谢谢invader的指点啊。看来这个UDF还得大改、大修啊。
发表于 2011-1-24 00:09:23 | 显示全部楼层
程序嘛,本来就是修修改改的啊,呵呵
楼主,把原理解释下呀,你的udf为什么要出现个area呢,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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