找回密码
 注册
查看: 4541|回复: 9

源项UDF求助

[复制链接]
发表于 2011-4-10 21:33:18 | 显示全部楼层 |阅读模式

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

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

x
非定常的单相流自定义源项函数出现问题,求助,非常感谢。
问题:求解壁面受力(X方向),根据受力求解加速度(X方向),和下一个t时刻的速度(X方向),并根据此(速度)定义源项。
执行中出现的问题:udf执行过程中感觉if语句并没有执行,因为if中的printf一直没有输出信息
udf代码#include "udf.h"
#include "unsteady.h"
#include"mem.h"
#include"stdio.h"
#define M 72 /*定义物体质量*/

static int last_ts=-1; /*声明静态变量(上个时间步的值)*/
static real vs=0.5*1.852; /*声明静态变量(初始速度)*/

DEFINE_SOURCE(x_source,c,t,dS,eqn)
{
real dens;
real gradu; /*declare gradu as gradient of x speed*/
real sm; /*declare source*/
int currtime;
real ac=0;
currtime=N_TIME; /*curr_ts赋值为现在时间步*/
if(last_ts!=currtime) /*如果时间步变化,执行*/
{
real area[3]={0,0,0};
int wall_id=8; /*边界的id*/
real dist_t=0; /*时间步长变量声明*/
face_t f;
real force; /*壁面x方向力变量声明*/
Thread *wall;
Domain *domain;
domain=Get_Domain(1); /*获得计算域的指针*/

dens=999.0;
wall=Lookup_Thread(domain,wall_id); /*获得壁面thread指针*/
last_ts=currtime;
force=0;
begin_f_loop(f,wall) /*在壁面的面元遍历*/
{
F_AREA(area,f,wall); /*获得面元的面积向量赋值给数组area*/
force+=F_P(f,wall)*area[0]; /*壁面受力(x方向)的积分*/
}
end_f_loop(f,wall)
ac=(force-6.2)/M; /*计算加速度*/
dist_t=CURRENT_TIMESTEP; /*上个时间步长*/
vs=vs+ac*dist_t; /*计算本时刻的新速度*/
printf("acc=%d\n",ac);
}
gradu=C_U_G(c,t)[0]; /**/
sm=dens*gradu*vs; /*根据速度计算源项*/
dS[eqn]=0;
return sm; /*源项返回*/
}

[ 本帖最后由 jiangtao167 于 2011-4-10 13:36 编辑 ]
发表于 2011-4-11 14:44:33 | 显示全部楼层
楼主强人,我是新手进来学习下。
发表于 2011-4-19 19:05:55 | 显示全部楼层
学习,楼主有没有关于动量源项的资料啊,我做毕设在用呢,初学fluent,不会啊,帮帮忙呗,谢谢哈
 楼主| 发表于 2011-4-27 13:28:26 | 显示全部楼层


你好
我手上有的就是帮助文件,如果需要,发邮件至jiangtao167@163.com
发表于 2011-4-28 23:30:07 | 显示全部楼层

回复 1# jiangtao167 的帖子

编写思路整个就是错的,这种加源项方法即使加上了,代码效率也极低!
 楼主| 发表于 2011-7-27 16:02:46 | 显示全部楼层
原帖由 dongcfd 于 2011-4-28 15:30 发表
编写思路整个就是错的,这种加源项方法即使加上了,代码效率也极低!

请赐教,主要是哪部分的代码影响效率呢?
发表于 2011-7-28 08:07:05 | 显示全部楼层
原帖由 jiangtao167 于 2011-7-27 08:02 发表

请赐教,主要是哪部分的代码影响效率呢?

源相里面对每个cell都要算一遍f的求和,真的十分伤身。
 楼主| 发表于 2011-8-11 22:02:07 | 显示全部楼层
原帖由 gearboy78 于 2011-7-28 00:07 发表

源相里面对每个cell都要算一遍f的求和,真的十分伤身。

嗯 我觉得也是。不过要求解一个wall面的受力,有更好的办法不?
3ks!
发表于 2011-8-12 12:01:42 | 显示全部楼层
原帖由 jiangtao167 于 2011-8-11 14:02 发表

嗯 我觉得也是。不过要求解一个wall面的受力,有更好的办法不?
3ks!

在DEFINE_ADJUST里面求和,然后赋值给全局变量,在DEFINE_SOURCE里面调用这个全局变量就可以了。
 楼主| 发表于 2011-8-19 14:07:02 | 显示全部楼层
受教 谢谢
思路是有点混乱
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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