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

UDF编译通过了,可是初始化却fatal signal

[复制链接]
发表于 2014-11-10 15:46:42 | 显示全部楼层 |阅读模式

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

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

x
大家好,我编的udf在编译的时候没有提示错误,可是初始化的时候却出现这样的错误,请问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: ()

我的问题是氯化锂溶液除去湿空气中的水蒸气,两相流用VOF模型,主相是湿空气,次相是溶液,湿空气和氯化锂溶液分别用组分输运模型,湿空气的组分有水蒸气和空气,溶液的组分是LiCl和液态水,我想定义氯化锂溶液的密度,这个密度是跟溶液的温度和质量分数有关系的,关系式有点复杂,程序如下:
#include "udf.h"
DEFINE_PROPERTY(cell_density,cell,thread)
{
   real rho_licl;
   int phase_domain_index = 1; /* 次相是 1  */
   Thread *liq= THREAD_SUB_THREAD(thread,phase_domain_index); /* 得到次相指针*/
   real T=C_T(cell,liq); /*得到次相温度*/
   real MF=C_YI(cell,liq,0);  /* 得到次相中LiCl的质量分数,在material里在LiCl是在第一个位置,所以是0*/
   rho_licl=(322*(1+1.993771843*pow((1-(T+273.15)/647.3),0.3333333333333333333333333)
           +1.0985211604*pow((1-(T+273.15)/647.3),0.6666666666666666666667)
           -0.5094492996*pow((1-(T+273.15)/647.3),1.6666666666666666666667)
           -1.761912427*pow((1-(T+273.15)/647.3),5.333333333333333333)
           -44.9005480267*pow((1-(T+273.15)/647.3),14.333333333333333)
           -723692.2618632*pow((1-(T+273.15)/647.3),36.66666666666666667)))
           *(1+0.540966*(MF/(1-MF))-0.303792*pow((MF/(1-MF)),2)
           +0.100791*pow((MF/(1-MF)),3));  /*密度和温度质量分数的关系式*/
   return rho_licl;
}
发表于 2014-11-10 17:33:45 | 显示全部楼层
#include "udf.h"
DEFINE_PROPERTY(cell_density,cell,thread)
{
   Thread *liq;
   liq = THREAD_SUB_THREAD(thread, 1);
   real rho_licl;
   real T=C_T(cell,liq); /*得到次相温度*/
   real MF=C_YI(cell,liq,0);  /* 得到次相中LiCl的质量分数,在material里在LiCl是在第一个位置,所以是0*/
   rho_licl=(322*(1+1.993771843*pow((1-(T+273.15)/647.3),0.3333333333333333333333333)
           +1.0985211604*pow((1-(T+273.15)/647.3),0.6666666666666666666667)
           -0.5094492996*pow((1-(T+273.15)/647.3),1.6666666666666666666667)
           -1.761912427*pow((1-(T+273.15)/647.3),5.333333333333333333)
           -44.9005480267*pow((1-(T+273.15)/647.3),14.333333333333333)
           -723692.2618632*pow((1-(T+273.15)/647.3),36.66666666666666667)))
           *(1+0.540966*(MF/(1-MF))-0.303792*pow((MF/(1-MF)),2)
           +0.100791*pow((MF/(1-MF)),3));  /*密度和温度质量分数的关系式*/
   return rho_licl;
}
你试一下,如果行的话,能给点积分吗你有这么多呢

点评

你好,谢谢你的回复,我试了一下,发现有错误诶  详情 回复 发表于 2014-11-11 09:15
 楼主| 发表于 2014-11-11 09:15:40 | 显示全部楼层
classic1573 发表于 2014-11-10 17:33
#include "udf.h"
DEFINE_PROPERTY(cell_density,cell,thread)
{

你好,谢谢你的回复,我试了一下,发现有错误诶
3.jpg

点评

仔细看了一下,发现我的程序没有做任何改进,真是不好意思,期待高手解决你的问题哈!  详情 回复 发表于 2014-11-11 10:30
发表于 2014-11-11 10:30:22 | 显示全部楼层
pinksuper 发表于 2014-11-11 09:15
你好,谢谢你的回复,我试了一下,发现有错误诶

仔细看了一下,发现我的程序没有做任何改进,真是不好意思,期待高手解决你的问题哈!

点评

好的,还是谢谢你哈~~  详情 回复 发表于 2014-11-11 10:33
 楼主| 发表于 2014-11-11 10:33:47 | 显示全部楼层
classic1573 发表于 2014-11-11 10:30
仔细看了一下,发现我的程序没有做任何改进,真是不好意思,期待高手解决你的问题哈!

好的,还是谢谢你哈~~
 楼主| 发表于 2014-11-12 10:42:00 | 显示全部楼层
大家好,我查看了帮助文件后已经把udf改成了如下,可是还是同样的错误啊,到底是为什么呢。。。求高手指点
#include "udf.h"
DEFINE_PROPERTY(cell_density,cell,thread)
{
    int phase_domain_index;
    cell_t cell;
    Thread *cell_thread;
    Domain *subdomain;
    Domain *mixture_domain;
    real rho_licl;
    sub_domain_loop(subdomain, mixture_domain, phase_domain_index)  /* loop over all subdomains (phases) in the superdomain (mixture) */
       {
          if (DOMAIN_ID(subdomain) == 2) /* loop if secondary phase */
              thread_loop_c (cell_thread,subdomain) /* loop over all cell threads in the secondary phase domain */
                 {
                     begin_c_loop_all (cell,cell_thread) /* loop over all cells in secondary phase cell threads */
                       {
                          real T=C_T(cell,cell_thread); /*得到次相温度*/
                          real MF=C_YI(cell,cell_thread,0);  /* 得到次相中LiCl的质量分数,在material里在LiCl是在第一个位置,所以是0*/
                          rho_licl=(322*(1+1.993771843*pow((1-(T+273.15)/647.3),0.3333333333333333333333333)
                                   +1.0985211604*pow((1-(T+273.15)/647.3),0.6666666666666666666667)
                                   -0.5094492996*pow((1-(T+273.15)/647.3),1.6666666666666666666667)
                                   -1.761912427*pow((1-(T+273.15)/647.3),5.333333333333333333)
                                   -44.9005480267*pow((1-(T+273.15)/647.3),14.333333333333333)
                                   -723692.2618632*pow((1-(T+273.15)/647.3),36.66666666666666667)))
                                   *(1+0.540966*(MF/(1-MF))-0.303792*pow((MF/(1-MF)),2)
                                   +0.100791*pow((MF/(1-MF)),3));  /*密度和温度质量分数的关系式*/
                          return rho_licl;
                       }
                    end_c_loop_all (cell,cell_thread)
                 }
      }
}
发表于 2014-11-12 23:42:25 来自手机 | 显示全部楼层
interpreted还是compiled?最好用compiled
发表于 2014-11-13 08:53:09 | 显示全部楼层



因为实在找不到你udf的错误了,所以可能是你的设置出错了,一个小的建议,你在初始化的时候,patch次相中LiCl的质量分数为0.5,在用这个udf compile一下试试,我觉得有也很可能是pow((MF/(1-MF)),3))分母为0造成的。

点评

谢谢你啊,不过我已经解决啦,其实只要改一点点就可以啦,另外define——property宏不能用循环的。。 #include "udf.h" DEFINE_PROPERTY(cell_density,cell,thread) { real rho_licl; real T=C_T(cell,th  详情 回复 发表于 2014-11-13 14:48
 楼主| 发表于 2014-11-13 14:48:52 | 显示全部楼层
classic1573 发表于 2014-11-13 08:53
因为实在找不到你udf的错误了,所以可能是你的设置出错了,一个小的建议,你在初始化的时候,patch次相 ...

谢谢你啊,不过我已经解决啦,其实只要改一点点就可以啦,另外define——property宏不能用循环的。。
#include "udf.h"
DEFINE_PROPERTY(cell_density,cell,thread)
{
   real rho_licl;
   real T=C_T(cell,thread); /*得到次相温度*/
   real MF=C_YI(cell,thread,0);  /* 得到次相中LiCl的质量分数,在material里在LiCl是在第一个位置,所以是0*/
   rho_licl=(322*(1+1.993771843*pow((1-(T+273.15)/647.3),0.3333333333333333333333333)
           +1.0985211604*pow((1-(T+273.15)/647.3),0.6666666666666666666667)
           -0.5094492996*pow((1-(T+273.15)/647.3),1.6666666666666666666667)
           -1.761912427*pow((1-(T+273.15)/647.3),5.333333333333333333)
           -44.9005480267*pow((1-(T+273.15)/647.3),14.333333333333333)
           -723692.2618632*pow((1-(T+273.15)/647.3),36.66666666666666667)))
           *(1+0.540966*(MF/(1-MF))-0.303792*pow((MF/(1-MF)),2)
           +0.100791*pow((MF/(1-MF)),3));  /*密度和温度质量分数的关系式*/
   return rho_licl;
}
发表于 2014-12-31 12:44:39 | 显示全部楼层
classic1573 发表于 2014-11-13 08:53
因为实在找不到你udf的错误了,所以可能是你的设置出错了,一个小的建议,你在初始化的时候,patch次相 ...

您好,我遇到了和你特别相同的问题,我的也是多相流的主相的密度的问题,fluent也是提示同样的错误,我想问一下,您是怎么解决的这个问题,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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