24小时热门版块排行榜    

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

837729744

铜虫 (小有名气)

[求助] 帮忙看下这个udf有问题吗?初始化没问题,点计算出错

帮忙看下这个udf有问题吗?初始化没问题,点计算出错

#include "udf.h"                                                /*包括常规宏*/
#include "sg_mphase.h"                                        /*包括体积分数宏*/
#define  LAT_HT 2260000                                          /*定义水蒸汽潜热*/
#define  pi 3.1415                                            /*圆周率常数*/
#define  R 8314                                             /*gas constant 8.314j/mol.K*/
#define  moleweight 0.018                                   /*SI unit water mole weight 0.018kg/mol */
#define A 7.19621
#define B 1730.63
#define C 233.426
DEFINE_SOURCE(liq_src, cell, pri_th, dS, eqn)                   /*定义液相源项*/
{
  Thread *mix_th, *sec_th;                                    /*混合相、第二相 定义计算区域指针*/
  real m_dot_l;                                                /*蒸发冷凝速率  定义液相质量转移*/
  real P_SAT ;                                
  mix_th = THREAD_SUPER_THREAD(pri_th);                        /*指向混合区的主相即液相的指针*/
  sec_th = THREAD_SUB_THREAD(mix_th, 1);                      /* 指向单相控制区的气相的指针*/
  P_SAT=exp(A-B/(C_T(cell,pri_th)+C-273.15))*1e3;     /*定义饱和蒸汽压与液相温度的关系式,即antoine公式*/
if(C_P(cell, sec_th)< P_SAT)
   {m_dot_l = -(P_SAT-C_P(cell,sec_th))*sqrt(moleweight)*(2*pi*R*C_T(cell,pri_th)); /*定义液相向气相转移的速率,如果气相的压力小于一定温度下的饱和蒸汽压,液相向气相发生质量转移*/
   dS[eqn]= -2*pi*R*sqrt(moleweight)*(P_SAT-P_SAT*C_T(cell,pri_th)*B/pow((C_T(cell,pri_th)+C-273.15),2)-C_P(cell, sec_th));                 /*定义源项对质量转移偏导,fabs为取绝对值*/
   }
else
   {m_dot_l = (P_SAT-C_P(cell,sec_th))*sqrt(moleweight)*(2*pi*R*C_T(cell,pri_th)); /*定义液相向气相转移的速率,如果气相压力大于一定温度下的饱和蒸汽压,气相向液相发生质量转移*/
   dS[eqn] = 0;                        /*由于气相向液相转移,所以液相的质量源项对质量转移的偏导为零*/
   }
return m_dot_l;
}
DEFINE_SOURCE(vap_src, cell, sec_th, dS, eqn)
{
  Thread *mix_th, *pri_th;
  real m_dot_v;
  real P_SAT ;
  mix_th = THREAD_SUPER_THREAD(sec_th);
  pri_th = THREAD_SUB_THREAD(mix_th, 0);
  P_SAT=exp(A-B/(C_T(cell,pri_th)+C-273.15))*1e3;
if(C_P(cell, sec_th)< P_SAT)
{
  m_dot_v = (P_SAT-C_P(cell,sec_th))*sqrt(moleweight)*(2*pi*R*C_T(cell,pri_th));
  dS[eqn] =0;
}
else
  {m_dot_v = -(P_SAT-C_P(cell,sec_th))*sqrt(moleweight)*(2*pi*R*C_T(cell,pri_th));  
  dS[eqn]=-2*pi*R*sqrt(moleweight)*(P_SAT-P_SAT*C_T(cell,pri_th)*B/pow((C_T(cell,pri_th)+C-273.15),2)-C_P(cell, sec_th));
  }
return m_dot_v;
}
DEFINE_SOURCE(enrg_src, cell, mix_th, dS, eqn)
{
Thread *pri_th,*sec_th;
real m_dot;
real P_SAT;
pri_th=THREAD_SUB_THREAD(mix_th,0);
sec_th=THREAD_SUB_THREAD(mix_th,1);
P_SAT=exp(A-B/(C_T(cell,pri_th)+C-273.15))*1e3;
if(C_P(cell, sec_th)< P_SAT)
{
  m_dot =- (P_SAT-C_P(cell,sec_th))*sqrt(moleweight)*(2*pi*R*C_T(cell,pri_th));
  dS[eqn]=-2*pi*R*sqrt(moleweight)*(P_SAT-P_SAT*C_T(cell,pri_th)*B/pow((C_T(cell,pri_th)+C-273.15),2)-C_P(cell, sec_th));
}
else
{
m_dot = (P_SAT-C_P(cell,sec_th))*sqrt(moleweight)*(2*pi*R*C_T(cell,pri_th));
dS[eqn]=2*pi*R*sqrt(moleweight)*(P_SAT-P_SAT*C_T(cell,pri_th)*B/pow((C_T(cell,pri_th)+C-273.15),2)-C_P(cell, sec_th));
}

return LAT_HT*m_dot;

}
回复此楼

» 猜你喜欢

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

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

转石千仞

金虫 (正式写手)

击破长空

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★
837729744: 金币+8, ★★★很有帮助 2013-09-06 08:43:19
引用回帖:
5楼: Originally posted by 837729744 at 2013-09-05 11:03:37
操作压力设为一个大气压,那么初始化时Gauge pressure的压力应该设为101325pa还是0pa(我想让我的模型处于一个大气压下)。我感觉是不是压力这块出问题了...

不是的。
设置参考压力后,你初始为0,即绝对压力为一个大气压。
故善战人之势,如转圆石于千仞之山者,势也
6楼2013-09-06 08:34:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 16 个回答

837729744

铜虫 (小有名气)

错误代码:Error: Floating point error: invalid number

Error Object: ()
把所有质量转移速率和求导的式子改成为=0,(m_dot=0;dS[eqn]=0),可以进行计算,是不是式子的问题啊?求指导
2楼2013-09-05 10:39:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

转石千仞

金虫 (正式写手)

击破长空

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
837729744: 金币+8 2013-09-05 11:04:03
1592203609: 金币+3, 谢谢回帖 2013-09-05 16:01:15
引用回帖:
2楼: Originally posted by 837729744 at 2013-09-05 10:39:39
错误代码:Error: Floating point error: invalid number

Error Object: ()
把所有质量转移速率和求导的式子改成为=0,(m_dot=0;dS=0),可以进行计算,是不是式子的问题啊?求指导

这种情况下,建议你对计算的数据进行检查。
你可以采用程序截断的形式,用Message插入可能出问题的位置前后,看是否能输出语言与数据,这样可以检测你的程序运行到哪里出现了浮点错误。
你还可以用Error语句来控制程序的停止,你可以让程序运行到任意位置停止,以便不让程序在每一个控制容积里运行。
出现浮点错误的原因,是你计算出现极大或极小值,比0等等。
调试程序需要耐心与经验,祝你好运!
故善战人之势,如转圆石于千仞之山者,势也
3楼2013-09-05 10:51:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

转石千仞

金虫 (正式写手)

击破长空

【答案】应助回帖

★ ★
1592203609: 金币+2, 谢谢回帖 2013-09-05 16:01:29
引用回帖:
2楼: Originally posted by 837729744 at 2013-09-05 10:39:39
错误代码:Error: Floating point error: invalid number

Error Object: ()
把所有质量转移速率和求导的式子改成为=0,(m_dot=0;dS=0),可以进行计算,是不是式子的问题啊?求指导

你的求导的式子,可能产生了极大值,“变化“太大,你的方程立马发散。
故善战人之势,如转圆石于千仞之山者,势也
4楼2013-09-05 10:52:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见