24小时热门版块排行榜    

查看: 4345  |  回复: 17
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

mopsite

木虫 (著名写手)

[求助] 用uds求解如下的问题为什么不收敛啊。谢谢! 已有1人参与

用uds求解如下的问题为什么不收敛啊。谢谢!
比较简单的问题,2个方程,求解两个uds,两外2个uds储存数据和得出梯度。算例见附件。
当不加uds1的源项时,可以运算,但是一加uds1的源项,就发散。不知道问题出在哪,怀疑是在用uds求解梯度时不太对,查看可以发现梯度局部边界的值较大。
用uds求解如下的问题为什么不收敛啊。谢谢!
3.jpg#include "udf.h"
#define B_ION 1.5e-4 /* Ion mobility - positive ion estimate */
#define EPS_0 8.85418717e-12


DEFINE_ADJUST(Calc_E_xy,d)
{
Thread *t;
cell_t c;
face_t f;
Thread *t0;
cell_t c0;
real dr0[ND_ND],dr1[ND_ND], xf[ND_ND], dy;

/* Do nothing if gradient isn't allocated yet. */
if (!Data_Valid_P()) return;
thread_loop_c(t,d)
{
if (NULL != THREAD_STORAGE(t,SV_UDS_I(0)) && NULL != T_STORAGE_R_NV(t,SV_UDSI_G(0)))
{
begin_c_loop(c,t)
{
C_UDSI(c,t,2) = -1.*C_UDSI_G(c,t,0)[0];
C_UDSI(c,t,3) = -1.*C_UDSI_G(c,t,0)[1];
}
end_c_loop(c,t)
}
}
thread_loop_f(t,d)
{
if (NULL != THREAD_STORAGE(t,SV_UDS_I(3)) && NULL != T_STORAGE_R_NV(t->t0,SV_UDSI_G(3)))
{
if (BOUNDARY_FACE_THREAD_P(t))
{
begin_f_loop(f,t)
{
c0 = F_C0(f,t);
t0 = THREAD_T0(t);
F_CENTROID(xf,f,t);
C_CENTROID(dr0,c0,t0);
NV_VV(dr1,=,xf,-,dr0);
F_UDSI(f,t,2) = C_UDSI(c0,t0,2) + (C_UDSI_G(c0,t0,2)[0]*dr1[0]);
F_UDSI(f,t,3) = C_UDSI(c0,t0,3) + (C_UDSI_G(c0,t0,3)[1]*dr1[1]);
}
end_f_loop(f,t)
}
}
}
}


/*******************************************************************/
/* UDF_source_phi_rho_11.c for specifying the phi and rho source terms for uds-0 */
/*******************************************************************/
DEFINE_SOURCE(phi_source_temp,c,t,dS,eqn)
{
real phi_source;
dS[eqn] = 0.0;
phi_source = C_UDSI(c,t,1)/EPS_0;
return phi_source;
}
DEFINE_SOURCE(rho_source_temp,c,t,dS,eqn)
{
real rho_source;
real xc[ND_ND];
real dens;
dS[eqn] = 0;
C_CENTROID(xc,c,t);
dens=C_R(c,t);
rho_source = C_UDSI(c,t,1)*B_ION*(C_UDSI_G(c,t,2)[0] + C_UDSI_G(c,t,3)[1]);
rho_source = -rho_source;
return rho_source;
}


DEFINE_UDS_FLUX(rho_ion_flux,f,t,i)
{
cell_t c0, c1 = -1;
Thread *t0, *t1 = NULL;
real NV_VEC(psi_vec), NV_VEC(A), flux = 0.0;
c0 = F_C0(f,t);
t0 = F_C0_THREAD(f,t);
F_AREA(A, f, t);

if (BOUNDARY_FACE_THREAD_P(t))
{

NV_DS(psi_vec, =, F_U(f,t), F_V(f,t), F_W(f,t), *, 1);
flux = NV_DOT(psi_vec, A); /* flux through Face */
}
else
{
c1 = F_C1(f,t); /* Get cell on other side of face */
t1 = F_C1_THREAD(f,t);
NV_DS(psi_vec, =, C_U(c0,t0),C_V(c0,t0),C_W(c0,t0),*,1.0);
NV_DS(psi_vec, +=, C_U(c1,t1),C_V(c1,t1),C_W(c1,t1),*,1.0);  
flux = NV_DOT(psi_vec, A)/2.0; /* Average flux through face */
}
  return flux;
}

[ Last edited by mopsite on 2013-12-17 at 18:38 ]
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : new.zip
  • 2013-12-17 17:47:22, 227.24 K

» 收录本帖的淘帖专辑推荐

传热传质

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

longma135

金虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
SV_UDS_I  这个写错了吧
6楼2013-12-19 10:00:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

longma135

金虫 (小有名气)

引用回帖:
7楼: Originally posted by mopsite at 2013-12-19 10:53:48
这个没错吧,您是指?。。。...

不应该写成SV_UDSI(i)么
8楼2013-12-19 11:06:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

longma135

金虫 (小有名气)

引用回帖:
9楼: Originally posted by mopsite at 2013-12-19 11:12:55
参考了那个温度梯度的写法,看这个链接 http://combust.hit.edu.cn:8080/fluent/Fluent60_help/html/udf/node238.htm...

哦,这样,以后多交流哈
10楼2013-12-19 11:19:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

longma135

金虫 (小有名气)

你好,我想请教下哈,在我编写的UDF程序中,连续性方程,动量方程,组分方程和能量方程都有源项编写,他们之间也会有联系,我都存储在UDM中,这就有个先后顺序问题,fluent怎么识别这个啊
12楼2013-12-19 21:15:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

longma135

金虫 (小有名气)

引用回帖:
13楼: Originally posted by mopsite at 2013-12-19 22:26:25
各个方程有个求解顺序,你看看udf的帮助文档中,我记着有个各个方程的求解顺序...

http://muchong.com/bbs/viewthread.php?tid=6775519&pid=3#pid3
帮我看下我这篇帖子,是这样么?

我的UDF从上到下写的顺序是组分方程,动量方程,连续性方程,能量方程,我这样写的原因是连续性方程和能量方程都会用到组分方程的数据,fluent会根据我UDF编写的顺序求解么?还是按照我那篇帖子贴图的顺序求解啊
14楼2013-12-20 13:18:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mopsite 的主题更新
信息提示
请填处理意见