fty0083 发表于 2011-9-6 20:26:21

请教:DPM模型中非边界处,如何自定义停止追踪颗粒

我现在在用Fluent的DPM模型模拟颗粒运行状态。但有一个问题怎么也无法解决。
   首先我疑惑的是,DPM对颗粒追踪状态的UDF控制开关是不是只能在DEFINE_DPM_BC里面用呀,就是PATH_END, PATH_ACTIVE,PATH_ABOUT这些。我查看了一下DPM.h这个文件,看到了颗粒追踪状态这个结构体原型,但是没找到什么函数能引用它,只知道这些都是DEFINE_DPM_BC的返回值。
    再一个,现在我想在颗粒运行的过程中当颗粒满足一定条件时,判定停止颗粒追踪。比如,颗粒的位置距离A点小于距离d,我能否通过某些语句停止这个颗粒追踪。我可以考虑在DEFINE_DPM_TIMESTEP里面嵌入判别语句,或者在DEFINE_ADJUST里面嵌入,但是不知道用什么函数能停止追踪一个颗粒。
    希望大家帮帮忙。不胜感激!!!!

[ 本帖最后由 fty0083 于 2011-9-6 12:28 编辑 ]

gearboy 发表于 2011-9-7 09:20:12

原帖由 fty0083 于 2011-9-6 12:26 发表 http://www.cfluid.com/bbs/images/common/back.gif
我现在在用Fluent的DPM模型模拟颗粒运行状态。但有一个问题怎么也无法解决。
   首先我疑惑的是,DPM对颗粒追踪状态的UDF控制开关是不是只能在DEFINE_DPM_BC里面用呀,就是PATH_END, PATH_ACTIVE,PATH_ABOUT这些 ...
p->stream_index = -1;
This command works for all particle types. The mass and energy of the particle also gets lost along with the particle, when this command is used.

fty0083 发表于 2011-9-7 23:49:27

回复 2# gearboy 的帖子

十分感谢高人指点,我试了一下这条语句,颗粒的确按照我的意图停在那里了,但是它并没有从追踪颗粒列表中取出掉,也就是,在下一个迭代步骤中这个颗粒还在,这就让我难以统计颗粒沉积的数量,我的语句是这样的,这个修正放在了DEFINE_DPM_TIMESTEP里面,
DEFINE_DPM_TIMESTEP(DPM_TIME,p,ts)
{ts=1.e-4;
if(P_POS(p)>5e-5)
{p->stream_index=-1;
trap+=1;   //统计沉积数
total+=1;//统计颗粒总数
Message("trap\n");
}
return ts;
}
另外,我在出口处还配有一个DEFINE_DPM_BC宏,来统计飞出的数量,这样就可以得到这个区域的过滤效率了。那么我的问题是,我如何能进一步的在下一个迭代补偿中不让这个颗粒走这个迭代呢?不然的话,我统计的数量就过多了。也就是说,颗粒是停在那了,但是没有被消除掉,下一次迭代的时候这个颗粒又被统计了一次。这个问题如何解决?请赐教,不甚感激!!!

fty0083 发表于 2011-9-8 10:59:21

回复 2# gearboy 的帖子

另外,我发现p->stream_index=-1的确把颗粒移除了,但是同时我用contours去看DPM concentration的时候,concentration都是0,这怎么办呢?我还是想看看它到底飞到哪了,甚至连轨迹都没了....

fty0083 发表于 2011-9-9 11:44:57

回复 2# gearboy 的帖子

感谢高人指点,问题解决了,p->stream_index=-1的确是将颗粒抹掉了,所以就把相关信息用UDM的方式存起来就可以啦。
    另外采用stream_index=-1的方式,我发现在下一个迭代颗粒时间步长里,这个颗粒仍然参加迭代,所以如果要统计沉积数量的话,需要标定一个标定量在P_USER_REAL(p,i)里面。我实在DPM_PARTICLE_TIMESTEP里面做的。现在剩下的就是处理沉积和反弹了,这些都比较简单。

qiansteffens 发表于 2017-4-20 16:21:32

l楼主你好,不知道你还在不在用这个论坛,我最近也遇到了和你一样的问题,大概就是关于颗粒碰到壁面,若温度大于150即被捕获,返回abort并输出被捕获颗粒的坐标。否则返回active。UDF如下
#include "udf.h"
#include "dpm.h"
#include "stdio.h"
FILE *fp;
DEFINE_DPM_BC(JIEZHA,p,t,f,f_normal,dim)
{
      if (P_T(p)>150)
    {
          fp=fopen("e://out.txt","a+";
          fprintf(fp,"%g   %g   %g\n",P_POS(p),P_POS(p),P_POS(p));
          fclose(fp);
      return PATH_ABORT;
      }
      else
          return PATH_ACTIVE;
}

然而,我发现输出到txt的颗粒数远远大于插入的颗粒数,(插入10000个颗粒,输出几十万的颗粒)。我发现每一个时间步中的每一次迭代都会输出颗粒坐标,也就是说,那些trap的颗粒还在被追踪并在下一次迭代继续输出,请问楼主是如何解决的呢,请不吝赐教

xuyingyxy 发表于 2024-1-26 19:15:59

qiansteffens 发表于 2017-4-20 16:21
l楼主你好,不知道你还在不在用这个论坛,我最近也遇到了和你一样的问题,大概就是关于颗粒碰到壁面,若温 ...

您好,冒昧的打扰一下,我也遇到了这个问题,就是trap和escape的数量远远大于inject的数,不知道怎么在DEFINE_DPM_BC中消除trap和escape的颗粒
页: [1]
查看完整版本: 请教:DPM模型中非边界处,如何自定义停止追踪颗粒