24小时热门版块排行榜    

查看: 3820  |  回复: 10

犹豫的青蛙

银虫 (小有名气)

[求助] UDF导入后运行时出现fatal error:received a fatal signal (Segmentation fault) 已有2人参与

我做的是二氧化碳在水中的鼓泡(VOF模型),气泡由水底小孔鼓入,考虑液侧传质,UDF能够加载到Fluent中,但是在运行时会出错,错误如标题。在不加载UDF的情况下,模拟能够正常运行。请问大约是什么原因造成的?
UDF如下所示:
#include "udf.h"
#define Hen 0.0000144
#define density 998.2
#define module_weight 44
DEFINE_SOURCE(mass_source,cell,thread_l,ds,eqn)
{
Thread *mixture_t = THREAD_SUPER_THREAD(thread_l);
Thread **thread_g = THREAD_SUB_THREADS(mixture_t);
Thread *tf;
cell_t c;
face_f f;
int n;
real source;
real A;
real area[ND_ND];
real kl;
real w = C_YI(cell,thread_l,3);
real vof_l = C_VOF(cell,thread_l);
real vof_g = C_VOF(cell,*thread_g);
if (vof_l == 0.5||vof_g == 0.5)
  {
   c_face_loop(cell,thread_l,n)
   {
    f = C_FACE(cell,thread_l,n);
    tf = C_FACE_THREAD(cell,thread_l,n);
    F_AREA(area,f,tf);
    A = NV_MAG(area);
    }
  }
source = kl*A*(module_weight*C_P(cell,thread_l)/Hen-density*w);
ds[eqn] = 0.0;
return source;
}
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

犹豫的青蛙

银虫 (小有名气)

引用回帖:
2楼: Originally posted by 蔷槿 at 2018-03-23 07:53:49
你的液侧传质是怎么定义的

大体就是s=k*a(C2-C1)
4楼2018-03-23 08:11:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

蔷槿

新虫 (小有名气)

你的液侧传质是怎么定义的

发自小木虫Android客户端
焊接电弧,熔池耦合流动,激光小孔,熔滴过渡,FSW CEL/ALE
2楼2018-03-23 07:53:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

犹豫的青蛙

银虫 (小有名气)

大体就是s=k*a(C2-C1)
3楼2018-03-23 08:11:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

东山

木虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
这一句稍微改一下:Thread **thread_g = THREAD_SUB_THREADS(mixture_t);

改为:Thread **thread_g = THREAD_SUB_THREADS(mixture_t,phase_index);
/* phase_index = 1||2 , 取值按你设置的主相或是次相决定 */
有动力,不机械
5楼2018-03-23 08:59:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

东山

木虫 (正式写手)

【答案】应助回帖

另外这一段有点语义不明,关乎你的计算结果,不关乎程序运行是否顺利。做完面循环后,给定的A是最后一个face_index的面积,你确定最后一个面是你需要的传质面?
c_face_loop(cell,thread_l,n)
   {
    f = C_FACE(cell,thread_l,n);
    tf = C_FACE_THREAD(cell,thread_l,n);
    F_AREA(area,f,tf);
    A = NV_MAG(area);
    }
有动力,不机械
6楼2018-03-23 09:08:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

蔷槿

新虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
引用回帖:
4楼: Originally posted by 犹豫的青蛙 at 2018-03-23 08:11:45
大体就是s=k*a(C2-C1)...

检查一下kl,判断传质面的依据

发自小木虫Android客户端
焊接电弧,熔池耦合流动,激光小孔,熔滴过渡,FSW CEL/ALE
7楼2018-03-23 14:10:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

犹豫的青蛙

银虫 (小有名气)

引用回帖:
5楼: Originally posted by 东山 at 2018-03-23 08:59:39
这一句稍微改一下:Thread **thread_g = THREAD_SUB_THREADS(mixture_t);

改为:Thread **thread_g = THREAD_SUB_THREADS(mixture_t,phase_index);
/* phase_index = 1||2 , 取值按你设置的主相或是次相决定 */

THREAD—SUB—THREAD后面两个argument吧,我用的是THREAD_SUB_THREADS...
8楼2018-03-23 14:48:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

犹豫的青蛙

银虫 (小有名气)

引用回帖:
6楼: Originally posted by 东山 at 2018-03-23 09:08:28
另外这一段有点语义不明,关乎你的计算结果,不关乎程序运行是否顺利。做完面循环后,给定的A是最后一个face_index的面积,你确定最后一个面是你需要的传质面?
c_face_loop(cell,thread_l,n)
  &am ...

改成 A+=NV_MAG?
9楼2018-03-23 14:49:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

东山

木虫 (正式写手)

引用回帖:
8楼: Originally posted by 犹豫的青蛙 at 2018-03-23 14:48:29
THREAD—SUB—THREAD后面两个argument吧,我用的是THREAD_SUB_THREADS......

没注意到,不好意思。不过觉得还是用THREAD—SUB—THREAD会好一些,语义更明确些。
THREAD—SUB—THREADs返回是不是线程指针,那你后面的使用是不是也应该加上数组index,这个你自己看看检查,没用过这个宏

发自小木虫Android客户端
有动力,不机械
10楼2018-03-25 11:52:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 犹豫的青蛙 的主题更新
信息提示
请填处理意见