24小时热门版块排行榜    

查看: 1591  |  回复: 3

wzwyl2010

新虫 (初入文坛)

[求助] UDF并行编译求助-附程序段

单核编译UDF成功计算 为了提高计算速度现在对udf并行编译 由于程序段较多,涉及宏 DEFINE_ADJUST 、DEFINE_SOURCE 、DEFINE_PROFILE、DEFINE_DIFFUSIVITY、Message以及sum求和等并行编译起来比较麻烦。Help里有介绍并行编译时,如果涉及HOST和NODE之间的数据交换以及在求和时候,在程序段加一些并行宏如#if !RP_HOST、#if !RP_NODE、node_to_host_real_2等,不知道怎么定义是否有数据交换,即添加宏的原则,如下段程序是否存在数据交换,需要怎样添加,谢谢大牛们!!!

DEFINE_ADJUST(mem,domain)
{
Domain*d;
cell_t c;  
Thread*t;   
int MEM=46;
real sum_rmem=0.00;
real rmem;
int i=0;

t=Lookup_Thread(domain,MEM);
begin_c_loop(c,t)
{
  
   sum_rmem+=(1.0/(0.5139*C_UDSI(c,t,W_CONT)-0.326)*exp(1268.0*(1.0/303.0-1.0/C_T(c,t)))*0.000025);
   i+=1;
   C_UDMI(c,t,RMEM)=sum_rmem;
}
end_c_loop(c,t)
rmem=sum_rmem/i;
Message("avg_reme= %lf.\n",rmem);


DEFINE_PROFILE(porosity_profile,t,i)   
{
    cell_t c;
    real xc[ND_ND];
    real poro;                  
    real y;                  
    real per;
        real poro_eff;
    begin_c_loop(c,t)
    {
      C_CENTROID(xc,c,t);
      y=xc[0];

      if((y>0.0010&&y<=0.0013)||(y>0.001345&&y<=0.001645))      
       {
        poro=PORO_GDL;  /*扩散层的孔隙率*/
                per=PER_GDL ;/*扩散层的渗透率*/
       }
      else if((y>0.0013&&y<=0.00131)||(y>0.001335&&y<=0.001345))
       {
        poro=PORO_CATA;
                per=PER_CATA;
     
      }
          else if( y>0.00131&&y<=0.001335)
          {
          poro=PORO_M;
          per=1.0E-18;
          
          }
          else
          {
          poro=0.999;
          per=8.0E-7;
          
          }

          C_UDMI(c,t,PORO)=poro;
      C_UDMI(c,t,PER)=per;
            poro_eff=poro*(1-C_UDSI(c,t,DS));
      C_UDMI(c,t,PORO_EFF)=poro_eff;
      C_PROFILE(c,t,i)=C_UDMI(c,t,PORO_EFF);
        }end_c_loop(c,t)
         
}

DEFINE_SOURCE(uds_source,c,t,dS,eqn)
{   
       
        real source;
          source=C_UDMI(c,t,S_VL)*MOL_WEI_LIQ;
        dS[eqn]=0.;
        return source;

}
回复此楼

» 猜你喜欢

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

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

gearboy78

禁虫 (小有名气)

本帖内容被屏蔽

2楼2013-11-14 14:04:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wzwyl2010

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by gearboy78 at 2013-11-14 14:04:37
自己看一下fluent里面并行的模型,计算变量在每个node上都会有一份的,如果是求和sum,那么每个node上的sum得到的只是该node上的求和值,要整体求和还要再调用PRF函数。总之,关键是多看看udf帮助中的并行介绍。

额 对一些概念不是太明白,NODE上有计算变量,这个计算变量在并行计算时候是在分块网格上各自计算,要把这些NODE上的变量都加起来好像需要#if !RP_host,看到论坛上说,单核改并行编译在每句上都加#if !RP_host,不知道这样可以不 感觉这样加很笼统,有些地方可能不需要加,对于我这个程序怎么并行编译分析呢
3楼2013-11-14 15:38:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gearboy78

禁虫 (小有名气)

本帖内容被屏蔽

4楼2013-11-15 10:29:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 学员m2M02a 的主题更新
信息提示
请填处理意见