24小时热门版块排行榜    

查看: 2955  |  回复: 15

13386846246

铜虫 (小有名气)

[求助] udf不能正确调用颗粒的宏的值进行计算

采用多表面燃烧模型模拟煤颗粒燃烧,使用DEFINE_PR_RATE计算颗粒反应,并读取颗粒质量P_INIT_MASS(p),和颗粒温度P_T(p),以监测计算过程。
用fprintf(fpOut2,"%f\n",P_T(p));和fprintf(fpOut1,"%f\n",P_INIT_MASS(p));输出,
可是导出的P_T(p)数据与在material面板中设置的颗粒密度值相等,P_INIT_MASS数据与在离散相中设置的颗粒直径数值相等,其他颗粒的宏输出也不正确。
udf不能正确地调用P_INIT_MASS(p)与P_T(p)的值。请教下各位,这是为什么?
#include "udf.h"
#define A1 10.6313
#define E1 5.1811e+07
DEFINE_PR_RATE(user_pr_rate,c,t,r,mw,pp,p,sf,dif_i,cat_i,rr)
{
        real ash_mass = P_INIT_MASS(p)*(1.-1./3.);
    real one_minus_conv1 = MAX(0.,3*(P_MASS(p)-ash_mass)/P_INIT_MASS(p));
    real one_minus_conv = 3.*exp(2.*log(one_minus_conv1)/3.);
    real rate = A1*exp(-E1/UNIVERSAL_GAS_CONSTANT/P_T(p));
    *rr = -rate*P_INIT_MASS(p)*one_minus_conv;

        FILE *fpOut1 = fopen("P_INIT_MASS(p).txt","a";
        fprintf(fpOut1,"%f\n",P_INIT_MASS(p));
    fclose(fpOut1);

        FILE *fpOut2 = fopen("P_T(p).txt","a";
        fprintf(fpOut2,"%f\n",P_T(p));
    fclose(fpOut2);
       
        FILE *fpOut3 = fopen("P_MASS(p).txt","a";
        fprintf(fpOut3,"%f\n",P_MASS(p));
    fclose(fpOut3);
}
回复此楼

» 收录本帖的淘帖专辑推荐

实验

» 猜你喜欢

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

db0320

铁虫 (初入文坛)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
13386846246: 金币+3, 有帮助 2017-03-09 15:54:38
首先P_INIT_MASS(p),是初始质量,如果你想调用的质量是当前质量应该用P_MASS(p),另进入当前cell时的质量是P_MASS0(p)

对于你的问题,可能是由于没有告诉程序正在追踪的颗粒,在最开始加入 Tracked_Particle *p试一试。
好久没写UDF了,可能说的不对。具体你还是看一下UDF手册。

以下内容百度来的,供参考:
DEFINE_PR_RATE(name,c,t,r,mw,ci,p,sf,dif index,cat index,rr)
symbol name---- UDF name.
cell t c---- Cell index of current particle.
Thread *t---- Pointer to cell thread for particle.
Reaction *r---- Pointer to data structure that represents the current reaction.
real *mw---- Pointer to array containing gaseous and surface species molecular weights
real *ci---- Pointer to array containing gas partial pressures.
Tracked Particle *p---- Pointer to Tracked Particle data structure that contains data related to the particle being tracked.
real *sf---- Pointer to array containing mass fractions of the solid species in the particle char mass at the current time step.
int dif_index---- Diffusion controlled species as defined in the Reactions panel for the current reaction.
int cat_index---- Catalyst species as defined in the Reactions panel for the current reaction.
2楼2017-03-09 13:01:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
3楼2017-03-09 13:23:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

13386846246

铜虫 (小有名气)

13386846246: 回帖置顶 2017-03-09 16:10:48
13386846246: 取消置顶 2017-03-09 16:11:18
引用回帖:
2楼: Originally posted by db0320 at 2017-03-09 13:01:48
首先P_INIT_MASS(p),是初始质量,如果你想调用的质量是当前质量应该用P_MASS(p),另进入当前cell时的质量是P_MASS0(p)

对于你的问题,可能是由于没有告诉程序正在追踪的颗粒,在最开始加入 Tracked_Particle *p ...

谢谢您的回复,加入Tracked_Particle *p 后进行编译,出现redefinition of formal parameter 'p'问题,应该是DEFINE_PR_RATE(name,c,t,r,mw,ci,p,sf,dif index,cat index,rr)中已经声明了*p。
有些地方不明白,想问下:
(1)P_INIT_MASS(p) 在面板中并没设置参数,那P_INIT_MASS(p)的数值是怎么得到的,是根据P_INIT_DIAM(p)与P_INIT_RHO(p)计算的么?
(2)P_MASS0(p)与P_INIT_MASS(p)是什么关系?
4楼2017-03-09 15:58:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

时完君

新虫 (初入文坛)

我目前研究的是pvt空冷系统,下表面冷却,亦即一个长方体空气通道,上表面是pv板,由于要考虑pv板对外界环境的散热和产生的电能两部分热量,所以打算用吸收的太阳辐射热量减去这两部分值得到我要的热流值,所以编程,现改编程如下,大神们有什么问题吗

#include"udf.h"
#define I 677
#define Ta 20
#define η 0.15
real ave_temp=300.0;
DEFINE_PROFILE(heat_flux,t,i)
{
   real NV_VEC(A);
   real sum_T_A=0.0;
   real sum_A=0.0;
   Thread *thread_top;
   face_t f;
   begin_f_loop(f,thread_top)
{
  F_AREA(A,f,thread_top);
  sum_A+=NV_MAG(A);
  sum_T_A+=NV_MAG(A)*F_T(f,thread_top);
}
  end_f_loop(f,thread_top)
  ave_temp=sum_T_A/sum_A;
  F_PROFILE(f,t,i)=0.855*I*sum_A-2.8*(ave_temp-Ta)*sum_A-η*(1-0.0045*(temp-298.15))*I*sum_A;
}
5楼2017-03-09 17:11:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

13386846246

铜虫 (小有名气)

13386846246: 回帖置顶 2017-03-09 18:58:26
离散相设置:
udf不能正确调用颗粒的宏的值进行计算
导出数据如下:
udf不能正确调用颗粒的宏的值进行计算-1
编译并挂载过程:
udf不能正确调用颗粒的宏的值进行计算-2

问题:
(1)读取颗粒质量P_INIT_MASS(p),和颗粒温度P_T(p),以监测计算过程。可是导出的P_T(p)数据与在material面板中设置的颗粒密度值相等,P_INIT_MASS数据与在离散相中设置的颗粒直径数值相等,这是什么原因?
(2)P_INIT_MASS(p) 在面板中并没设置参数,那P_INIT_MASS(p)的数值是怎么得到的,是根据P_INIT_DIAM(p)与P_INIT_RHO(p)计算的么?
(3)P_INIT_DIAM(p)与P_INIT_RHO(p)对应的是否是离散相设置中标红的数据?
(4)P_INIT_MASS(p)与P_T(p)导出的数据不对,可能是离散相设置的问题,还是udf的问题,或者是编译过程的问题,但编译通过,并且挂载了呀?
6楼2017-03-09 18:58:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

db0320

铁虫 (初入文坛)

问一下,你在程序里写的时候是分成三个文件写入的,但是上图只有一个文件,是你自己整合的吗?
7楼2017-03-10 09:40:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

13386846246

铜虫 (小有名气)

引用回帖:
7楼: Originally posted by db0320 at 2017-03-10 09:40:01
问一下,你在程序里写的时候是分成三个文件写入的,但是上图只有一个文件,是你自己整合的吗?

后来觉得分成三个文件写入数据,不方便数据的展示,就换成一个文件输出了。
FILE *fpOut1 = fopen("date.txt","a";
fprintf(fpOut1,"%.9f, %.9f, %.9f\n",P_INIT_MASS(p),P_MASS(p),P_T(p));
fclose(fpOut1);
8楼2017-03-10 14:19:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

db0320

铁虫 (初入文坛)

P_MASS0(p)是进入当前CELL时的质量,P_MASS(p)是当前的质量
比如说一个颗粒流入一个正方体,它进入壁面入口时的质量为P_MASS0(p),
从进入正方体到离开正方体的需要一定时间,在这段时间里某一时刻的质量即为P_MASS0(p)。
9楼2017-03-13 16:57:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

db0320

铁虫 (初入文坛)

另外,楼主可以试着把所有DPM数据项全都导出看看。对比设定的参数看看
10楼2017-03-13 16:58:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 13386846246 的主题更新
信息提示
请填处理意见