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

udf 变边界条件求助

[复制链接]
发表于 2012-3-13 23:29:17 | 显示全部楼层 |阅读模式

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

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

x
在下想做一个离散相的计算模型,就是一个淋水模型,其中一个面的边界条件是和落在上面的水滴的质量有关的,因此想定义一个随水的质量变化的边界条件!求高手相助!
DEFINE_PROFILE在离散相计算中什么时候被调用?
是每个时间步都会被调用一次,还是只有初始化的时候才调用啊?
另外,我是否可以用这个宏来定义一个随计算的量变化的边界条件啊!下面是我写的一个UDF,编译通过了,但一加载马上就报一个错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: () 
请UDF高手指教~

#include "udf.h"
#define U 5000//voltage
#define pi 3.14
#define r1 12
#define r2 4
#define rou_w 1900 //水电阻率

/*change the heat flux of the water band*/
DEFINE_PROFILE(band_flux,t,index)
{
real x[ND_ND];//用于存储面单元坐标
real r;//半径
real P;//功率
real avg_h=0;//水膜平均厚度
real R;//电阻
real I;//电流
face_t f;
cell_t c;
real NV_VEC(A);//墙总面积
real sum_mass_A=0,sum_A=0;
    begin_f_loop(f,t)//循环得到面积和
   {
         F_AREA(A,f,t);
         sum_A+=NV_MAG(A);
    }
    end_f_loop(f,t)
   
    begin_c_loop(c,t)//循环得到质量和
   {
         sum_mass_A+=C_R(c,t)*C_VOLUME(c,t);
    }  
    end_c_loop(c,t)      
    avg_h=sum_mass_A/(sum_A*1000);
   R=rou_w*log(r1/r2)/(2*pi*avg_h);//积分求水膜电阻
   I=U/(R+70000);//欧姆定律
    begin_f_loop(f,t)//对每个单元赋予焦耳热功率
    {
        F_CENTROID(x,f,t);
        r= sqrt(x[0]*x[0]+x[2]*x[2]);
        P=I*I*rou_w/(4*pi*pi*r*r*avg_h);
        F_PROFILE(f,t,index)=P;        
     }
     end_f_loop(f,t)
}
 楼主| 发表于 2012-3-14 10:11:34 | 显示全部楼层
高手相救啊
发表于 2012-3-14 20:42:14 | 显示全部楼层
begin_c_loop(c,t)//循环得到质量和
   {
         sum_mass_A+=C_R(c,t)*C_VOLUME(c,t);
    }  
    end_c_loop(c,t)   
这个循环不能运行,t是指向边界的线而不是cell的线
 楼主| 发表于 2012-3-14 21:53:10 | 显示全部楼层

回复 3# onlyou1221 的帖子

多谢高手的指教!不过我的模型是三维的,边界是一个面,这样t也无法指到cell吗?初学udf,见谅
如果不能这样循环的话,我该如何计算边界单元里水滴的质量呢,多谢高手~
发表于 2012-3-15 08:44:44 | 显示全部楼层

回复 4# wxxzwb 的帖子

begin_f_loop(f,t)//循环得到面积和
   {
         F_AREA(A,f,t);
         sum_A+=NV_MAG(A);
c=F_C0(f,t); /*获得边界的c*/
t0=F_C0_THREAD(f,t);/*获得边界的c的线*/
sum_mass_A+=C_R(c,t0)*C_VOLUME(c,t0);
    }
    end_f_loop(f,t)

[ 本帖最后由 onlyou1221 于 2012-3-15 16:39 编辑 ]
 楼主| 发表于 2012-3-15 11:05:26 | 显示全部楼层

回复 5# onlyou1221 的帖子

高手恩德无量~先感激涕零~我按照您的试一下哈
 楼主| 发表于 2012-3-15 11:06:46 | 显示全部楼层

回复 5# onlyou1221 的帖子

高手恩德无量~先感激涕零~我按照您的试一下哈
 楼主| 发表于 2012-3-15 12:46:08 | 显示全部楼层

回复 5# onlyou1221 的帖子

原帖由 onlyou1221 于 2012-3-15 08:44 发表
begin_f_loop(f,t)//循环得到面积和
   {
         F_AREA(A,f,t);
         sum_A+=NV_MAG(A);
c=F_C0(f,t); /*获得边界的c*/
t0=F_C0_THREAD(f,t);/*获得边界的c的线*/
sum_mass_A+=C_R(c,t)*C_VOLUME(c,t); ...

高手我还有几点疑问请教:
1,这里的t0是不是就是一个新指针啊,也就是我在前面要先声明一个指针t0,在这里为它赋值,如果这样的话,sum_mass_A+=C_R(c,t)*C_VOLUME(c,t);这句的t应该换成t0?不知道我这样理解对不对
2,由于我要获得面上的雨滴质量,而其属于离散相,我这里用C_R(c,t)*C_VOLUME(c,t)是否有问题,也就是C_R(c,t)宏所存储的密度值是否是空气和雨滴的质量和除以单元体积
3,我上面的profile函数里用到了两个loop循环,第一个loop获得总质量,第二个loop为每个单元面赋热功率,一个函数里是否可以像这样用两个循环?这样的话都用同一个指针t是否会有问题,第一个循环过后t的值是否就面了,第二个循环就不能用了,如果是这样我该怎么办?
麻烦大侠了~
发表于 2012-3-15 16:38:48 | 显示全部楼层
C_R和C_VOLUNE的t是要改成t0的,我复制错了。离散相模型中C_R是流体密度非混合物密度,在你的源程序中t一直都是边界的线,对边界循环是可以的
 楼主| 发表于 2012-3-15 18:35:16 | 显示全部楼层

回复 9# onlyou1221 的帖子

流体密度是指空气的密度?不包含离散相水滴?
那t指针相当于是一个数组吗,循环的时候只是查询其值,并没改变什么是吗
发表于 2012-9-4 02:08:53 | 显示全部楼层

请教一下

你好,想请问一下楼主这段程序是可以实现边界条件变化,并得到随其变化的方针结果,是吗?我最近在做一个课题,需要求出一个管子随压力差变化,流量变化关系,不知fluent能否实现这个
发表于 2012-9-4 09:53:36 | 显示全部楼层

回复 5# onlyou1221 的帖子

哥们,你好,我也在用udf ,希望能跟您学习交流qq472355007
发表于 2013-1-18 09:48:33 | 显示全部楼层

回复 3# onlyou1221 的帖子

onlyou1221仁兄能否帮我看看这个                           2D模型,其中一个边(模型中为线)的边界是一个随时间变化的温度荷载,函数为T=20+1080(1-0.325e-0.167t-0.675e-2.5t)即HC升温曲线。怎么编辑UDF。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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