24小时热门版块排行榜    

查看: 1460  |  回复: 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的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

转石千仞

金虫 (正式写手)

击破长空

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★
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的回帖

转石千仞

金虫 (正式写手)

击破长空

引用回帖:
11楼: Originally posted by 837729744 at 2013-09-07 08:37:34
还有就是都是在什么情况下,才用求导啊(dS=),明白为什么要对上式求导,求导的作用是什么?...

是为了加快收敛。
你应该去看相关理论些的书,你要明白,并不是所有答案,别人都可以告诉你的。你要自己去寻找。

» 本帖已获得的红花(最新10朵)

故善战人之势,如转圆石于千仞之山者,势也
12楼2013-09-07 10:16:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

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的回帖

837729744

铜虫 (小有名气)

引用回帖:
4楼: Originally posted by 转石千仞 at 2013-09-05 10:52:09
你的求导的式子,可能产生了极大值,“变化“太大,你的方程立马发散。...

操作压力设为一个大气压,那么初始化时Gauge pressure的压力应该设为101325pa还是0pa(我想让我的模型处于一个大气压下)。我感觉是不是压力这块出问题了
5楼2013-09-05 11:03:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

837729744

铜虫 (小有名气)

引用回帖:
3楼: Originally posted by 转石千仞 at 2013-09-05 10:51:03
这种情况下,建议你对计算的数据进行检查。
你可以采用程序截断的形式,用Message插入可能出问题的位置前后,看是否能输出语言与数据,这样可以检测你的程序运行到哪里出现了浮点错误。
你还可以用Error语句来控 ...

Message插入和用Error语句来控制程序的停止,我不会啊,难吗?怎么弄啊?
7楼2013-09-06 08:56:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

转石千仞

金虫 (正式写手)

击破长空

引用回帖:
7楼: Originally posted by 837729744 at 2013-09-06 08:56:51
Message插入和用Error语句来控制程序的停止,我不会啊,难吗?怎么弄啊?...

建议你去看帮助文件。里面有,两条语句而已,不难的。
故善战人之势,如转圆石于千仞之山者,势也
8楼2013-09-06 18:32:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

837729744

铜虫 (小有名气)

现在可以计算了,如果转移质量速率公式是这个:m_dot = -(P_SAT-C_P(cell,pri_th))*sqrt(moleweight/(2*pi*R*C_T(cell,sec_th)))。不知道对这个公式的质量项求导是什么(dS[eqn]=。。。)。原先dS[eqn]公式估计也不对。
9楼2013-09-06 19:10:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

转石千仞

金虫 (正式写手)

击破长空

【答案】应助回帖


1592203609: 金币+1, 谢谢回帖 2013-09-07 21:16:40
引用回帖:
9楼: Originally posted by 837729744 at 2013-09-06 19:10:55
现在可以计算了,如果转移质量速率公式是这个:m_dot = -(P_SAT-C_P(cell,pri_th))*sqrt(moleweight/(2*pi*R*C_T(cell,sec_th)))。不知道对这个公式的质量项求导是什么(dS=。。。)。原先dS公式估计也不对。...

对变量求导,你求解的是什么方程,方程中将哪个量作为变量,你就对该求量求导。
故善战人之势,如转圆石于千仞之山者,势也
10楼2013-09-06 20:10:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 837729744 的主题更新
信息提示
请填处理意见