找回密码
 注册
查看: 5693|回复: 3

压力控制的相变UDF的问题,define_source里的dS这一项的错误

  [复制链接]
发表于 2014-12-12 09:12:28 | 显示全部楼层 |阅读模式

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

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

x
求助各位,氯化锂溶液和湿空气的传质过程,我用define_source宏编写了湿空气质量源项,溶液质量源项和能量方程的源项。
湿空气的源项宏里dS这一项我是对湿空气里的水蒸气质量分数求的偏导,溶液源项宏是对溶液的质量分数求偏导,能量方程我不太确定对谁求偏导,所以我写了dS=0.
运行程序后发现dS有值的两排(黄色背景的两排),都提示invalid type conversion: double-> pointer to float。
请问各位这是什么错呢?另外源项里dS这样求导可以吗?程序如下,谢谢各位
#include "udf.h"
#include "sg_mphase.h"
#define LAT_HT 1.e3
DEFINE_SOURCE(air_src,cell,pri_th,dS,eqn)    /*主相湿空气质量输运源项*/
{
    Thread *mix_th,*sec_th;                   /*计算区域指针*/
    real m_v;                       /*主相质量输运量*/
    real mfv;                            /*湿空气中水蒸气的质量分数*/
    real t_air;     /*湿空气的温度*/
    real hr;    /*湿空气的含湿量*/
    real pa;    /*湿空气的总压力*/
    real pa_v;  /*湿空气的水蒸气分压*/
    real mfs;  /*licl溶液的质量分数*/
    real t_sol; /*licl溶液的温度*/
    real ps_w;  /*licl溶液的水蒸气分压*/

    mix_th=THREAD_SUPER_THREAD(pri_th);      /*混合区液相指针*/
    sec_th=THREAD_SUB_THREAD(mix_th,1);      /*单相区气相指针*/
    mfv=C_YI(cell,pri_th,0);             /*获得湿空气中水蒸气的质量分数,注意species列表中的顺序,水是第一个时序号才是0,dS要对该项求导*/
    hr=mfv/(1-mfv);                      /*由湿空气中水蒸气的质量分数算到湿空气的含湿量*/
    pa=ABS_P(C_P(cell,pri_th),op_pres);  /*获取湿空气的总压力*/
    pa_v=(pa*hr)/(hr+0.622);   /*获取湿空气水蒸气分压*/
    /*   t_air=C_T(cell,pri_th);  /*湿空气的温度,单位为摄氏度*/

    mfs=C_YI(cell,sec_th,0);   /*获得溶液中licl的质量分数,注意species列表中的顺序,licl是第一个时序号才是0,*/
    t_sol=C_T(cell,sec_th);  /*溶液的温度,单位为摄氏度*/
    ps_w=1.1491997+0.11242725*t_sol-0.06183172*mfs+0.0014521543*pow(t_sol,2)+0.0011080673*pow(mfs,2)-0.0035782429*t_sol*mfs;  /*溶液水蒸气分压*/
   
     if(pa_v>ps_w)   /*如果湿空气的水蒸气分压大于溶液的水蒸气分压,则水蒸气向溶液移动,冷凝放热,属于除湿过程*/
       {
          m_v=0.00165*(((pa*mfv/(1-mfv))/(mfv/(1-mfv)+0.622))-ps_w);   /* mass transfer rate in dehumidifier */
          dS=0.00165*((pa*(0.378*mfv+0.622)-pa*mfv*0.378)/pow(0.378*mfv+0.622,2));  /*湿空气质量源项对湿空气的质量转移求导,对湿空气中水蒸气质量分数mfv求导*/
       }

    else if(pa_v<ps_w)   /*如果湿空气的水蒸气分压小于溶液的水蒸气分压,则水蒸气向湿空气移动,蒸发吸热,属于再生过程*/
       {
          m_v=-0.00165*(((pa*mfv/(1-mfv))/(mfv/(1-mfv)+0.622))-ps_w);   /* mass transfer rate in dehumidifier */
          dS=0;  /* 水蒸气由溶液向湿空气转移,湿空气质量源项对质量转移的偏导为0*/
           }

   return m_v;
}


DEFINE_SOURCE(sol_src,cell,sec_th,dS,eqn)    /*次相氯化锂溶液质量输运源项*/
{
    Thread *mix_th,*pri_th;
    real m_s;    /*次相溶液相质量输运量*/
    real mfv;
    real t_air;     /*湿空气的温度*/
    real hr;    /*湿空气的含湿量*/
    real pa;    /*湿空气的总压力*/
    real pa_v;  /*湿空气的水蒸气分压*/
    real mfs;  /*licl溶液的质量分数*/
    real t_sol; /*licl溶液的温度*/
    real ps_w;  /*licl溶液的水蒸气分压*/


    mix_th=THREAD_SUPER_THREAD(sec_th);      /*混合区液相指针*/
    pri_th=THREAD_SUB_THREAD(mix_th,0);      /*单相区气相指针*/
    mfv=C_YI(cell,pri_th,0);             /*获得湿空气中水蒸气的质量分数,注意species列表中的顺序,水是第一个时序号才是0*/
    hr=mfv/(1-mfv);                      /*由湿空气中水蒸气的质量分数算到湿空气的含湿量*/
    pa=ABS_P(C_P(cell,pri_th),op_pres);  /*获取湿空气的总压力*/
    pa_v=(pa*hr)/(hr+0.622);   /*获取湿空气水蒸气分压*/
     /*  t_air=C_T(cell,pri_th);  /*湿空气的温度,单位为摄氏度*/

   
    mfs=C_YI(cell,sec_th,0);   /*获得溶液中licl的质量分数,注意species列表中的顺序,licl是第一个时序号才是0,dS要对该项求导*/
    t_sol=C_T(cell,sec_th);  /*溶液的温度,单位为摄氏度*/
    ps_w=1.1491997+0.11242725*t_sol-0.06183172*mfs+0.0014521543*pow(t_sol,2)+0.0011080673*pow(mfs,2)-0.0035782429*t_sol*mfs;  /*溶液水蒸气分压*/
   

    if(pa_v>ps_w)   /*如果湿空气的水蒸气分压大于溶液的水蒸气分压,则水蒸气向溶液移动,冷凝放热,属于除湿过程*/
       {
          m_s=0.00165*(((pa*mfv/(1-mfv))/(mfv/(1-mfv)+0.622))-ps_w);   /* mass transfer rate in dehumidifier */
          dS=0;  /*水蒸气由湿空气转移到溶液,溶液的质量源项对质量转移的偏导为0*/
       }

    else if(pa_v<ps_w)   /*如果湿空气的水蒸气分压小于溶液的水蒸气分压,则水蒸气向湿空气移动,蒸发吸热,属于再生过程*/
       {
          m_s=-0.00165*(((pa*mfv/(1-mfv))/(mfv/(1-mfv)+0.622))-ps_w);   /* mass transfer rate in dehumidifier */
          dS=-0.00165*(0.06183172-0.0022161346*mfs+0.0035782429*t_sol); /*dS:溶液的质量源项对质量转移求偏导,对溶液中水蒸气质量分数mfs求导*/
       }

   return m_s;
}

DEFINE_SOURCE(enrg_src,cell,mix_th,dS,eqn)   /*混合相能量方程输运源项*/
{
   
    Thread *pri_th,*sec_th;
    real m_e;    /*相变质量*/
    real mfv;
    real t_air;     /*湿空气的温度*/
    real hr;    /*湿空气的含湿量*/
    real pa;    /*湿空气的总压力*/
    real pa_v;  /*湿空气的水蒸气分压*/
    real mfs;  /*licl溶液的质量分数*/
    real t_sol; /*licl溶液的温度*/
    real ps_w;  /*licl溶液的水蒸气分压*/


    pri_th=THREAD_SUB_THREAD(mix_th,0);      /*混合区液相指针*/
    sec_th=THREAD_SUB_THREAD(mix_th,1);      /*单相区气相指针*/
    mfv=C_YI(cell,pri_th,0);             /*获得湿空气中水蒸气的质量分数,注意species列表中的顺序,水是第一个时序号才是0*/
    hr=mfv/(1-mfv);                      /*由湿空气中水蒸气的质量分数算到湿空气的含湿量*/
    pa=ABS_P(C_P(cell,pri_th),op_pres);  /*获取湿空气的总压力*/
    pa_v=(pa*hr)/(hr+0.622);   /*获取湿空气水蒸气分压*/
    /*  t_air=C_T(cell,pri_th);  /*湿空气的温度,单位为摄氏度*/

   
    mfs=C_YI(cell,sec_th,0);   /*获得溶液中licl的质量分数,注意species列表中的顺序,licl是第一个时序号才是0*/
    t_sol=C_T(cell,sec_th);  /*溶液的温度,单位为摄氏度*/
    ps_w=1.1491997+0.11242725*t_sol-0.06183172*mfs+0.0014521543*pow(t_sol,2)+0.0011080673*pow(mfs,2)-0.0035782429*t_sol*mfs;  /*溶液水蒸气分压*/
   

    if(pa_v>ps_w)   /*如果湿空气的水蒸气分压大于溶液的水蒸气分压,则水蒸气向溶液移动,冷凝放热,属于除湿过程*/
       {
          m_e=0.00165*(((pa*mfv/(1-mfv))/(mfv/(1-mfv)+0.622))-ps_w);   /* mass transfer rate in dehumidifier */
          dS=0;
       }

    else if(pa_v<ps_w)   /*如果湿空气的水蒸气分压小于溶液的水蒸气分压,则水蒸气向湿空气移动,蒸发吸热,属于再生过程*/
       {
          m_e=-0.00165*(((pa*mfv/(1-mfv))/(mfv/(1-mfv)+0.622))-ps_w);   /* mass transfer rate in dehumidifier*/
          dS=0;
       }

   return LAT_HT*m_e;
}
发表于 2015-1-5 15:39:48 | 显示全部楼层
请问楼主的这个问题解决了吗?我也遇到了相同的问题,向你请教请教
发表于 2015-1-7 11:20:51 | 显示全部楼层
找到问题了,就是用dS[eqn]替代原来的dS就不会报错了,编写的时候没仔细
发表于 2020-4-13 01:07:49 | 显示全部楼层
请问楼主你用这个代码做溶液除湿仿真出来结果是对的吗?我加载这个代码计算以后没有看到除湿的效果,方便交流一下吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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