24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3280  |  回复: 22

jesseliuxl

金虫 (小有名气)

[求助] 100个金币:udf改成并行的,求高人

本例是通过出口的浓度与进口关联,串行没问题,并行就一直没搞通,求高人
CODE:
#include "udf.h"
#include "mem.h"
#define q 998
#define out 960
#define film-out 28
#define INT_YI 0.03
real AVG_YI;

DEFINE_ADJUST(outlet_avg_yi, d)
{

real sum_yi_A=0.0;
int j=0;
face_t f;
Thread *thread_out=Lookup_Thread(d,5);
  begin_f_loop(f,thread_out)
{
  sum_yi_A+=F_YI(f,thread_out,0);
  j++;      
}
end_f_loop(f,thread_out)

  AVG_YI=sum_yi_A/j;

printf("%f\n",sum_yi_A);/* write out kount to data file */
printf("%f\n",AVG_YI);
printf("%d\n",j);
}


DEFINE_PROFILE(inlet,thread_in,index)
{
    real inlet_yi=0.0;
    face_t inlet_face;
  
    real time=RP_Get_Real("flow-time");   
    begin_f_loop(inlet_face,thread_in)
        {
          if(time<9)
        {
         inlet_yi=INT_YI;
          F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
        }
        
          else
        {
          inlet_yi=AVG_YI+0.2*out/q;
          F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
        }
      }
        end_f_loop(inlet_face,thread_in)   

     printf("%f\n",inlet_yi);                     
     }

[ Last edited by xiegangmai on 2012-4-11 at 22:36 ]
回复此楼

» 猜你喜欢

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

生命不息折腾不止
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖置顶 ( 共有3个 )

jesseliuxl

金虫 (小有名气)

jesseliuxl: 回帖置顶 2012-04-02 08:59:39
引用回帖:
7楼: Originally posted by kylafree at 2012-04-01 22:57:27:
你连你的东西是干什么的都没说你让别人怎么试

组分输送,把进口组分浓度与出口关联,你这高手应该一看就知道啊
生命不息折腾不止
9楼2012-04-02 08:32:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jesseliuxl

金虫 (小有名气)

jesseliuxl: 回帖置顶 2012-04-06 09:42:09
已经搞定啦,回头把并行的贴出来
生命不息折腾不止
12楼2012-04-06 09:42:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jesseliuxl

金虫 (小有名气)

★ ★
jesseliuxl: 回帖置顶 2012-04-06 09:45:48
xiegangmai: 金币+2, 鼓励分享解决经验,金币奖励! 2012-04-06 10:11:20
xiegangmai: 编辑内容 2012-04-06 10:11
并行的udf
CODE:
#include "udf.h"
#include "mem.h"  
#define q 989.57
#define film_out 72.59
#define cir_out 916.98

#define INT_YI 0.022
real AVG_YI=0.0;

DEFINE_ADJUST(out, d)
     {
      real sum_yi_A=0.0;
      real sum_flux_A=0.0;
      int j=0;

   #if !RP_HOST
      face_t f;
      Thread *thread_out;
   #endif
   #if !RP_HOST
      thread_out=Lookup_Thread(d,19);
   
      begin_f_loop(f,thread_out)
       if (PRINCIPAL_FACE_P(f,thread_out))
       {
         sum_yi_A+=F_YI(f,thread_out,0)*F_FLUX(f,thread_out);
         sum_flux_A+=F_FLUX(f,thread_out);      
       }
      end_f_loop(f,thread_out)
   #endif  
   
     #if RP_NODE
      sum_yi_A=PRF_GRSUM1(sum_yi_A);
      sum_flux_A=PRF_GRSUM1(sum_flux_A);
     #endif

      node_to_host_real_2(sum_yi_A,sum_flux_A);  

      AVG_YI=sum_yi_A/sum_flux_A;
}

DEFINE_PROFILE(in,thread_in,index)
   {
    real inlet_yi=0.0;
    face_t inlet_face;
    #if !RP_HOST
    real time=RP_Get_Real("flow-time");
  
    begin_f_loop(inlet_face,thread_in)
     if (PRINCIPAL_FACE_P(inlet_face,thread_in))  
       {
          if(time<9)
           {
             inlet_yi=INT_YI;
             F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
           }
         
          else
           {
             inlet_yi=AVG_YI*cir_out/q+INT_YI;
             F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
           }
        }
    end_f_loop(inlet_face,thread_in)   

    #endif
    }

[ Last edited by xiegangmai on 2012-4-6 at 10:11 ]
生命不息折腾不止
13楼2012-04-06 09:45:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

5超7

至尊木虫 (著名写手)

菜鸟

并行这东西在流体网上面有所讨论的把!浪子大哥好像开过帖子
我要奋斗到底
8楼2012-04-02 08:08:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yp1990

铜虫 (初入文坛)

引用回帖:
13楼: Originally posted by jesseliuxl at 2012-04-06 09:45:42
并行的udf


#include "udf.h"
#include "mem.h"  
#define q 989.57
#define film_out 72.59
#define cir_out 916.98

#define INT_YI 0.022
real AVG_YI=0.0;

DEFINE_ADJUST(out, d)
     {
      ...

你好,我按照你的模型也修改了我的udf,但是单机多核并行的时候还是出错,不知道怎么回事?
爱拼才会赢
20楼2015-05-03 21:51:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

zxbok1979

木虫 (小有名气)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
jesseliuxl: 金币+2, 有帮助, 要是能这样,还折腾个啥啊 2012-04-01 13:45:51
臭水沟: 金币+1, 谢谢交流~~ 2012-04-02 15:41:08
在单核求解器中编译UDF,保存dat和case,然后再用并行求解器打开就可以了。
SILENCEISALSOAWAYTOLEARN
2楼2012-04-01 12:02:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kylafree

至尊木虫 (知名作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
jesseliuxl: 金币+10, 有帮助, 能编译通过,但是编译后出现错误啦 2012-04-01 18:41:20
臭水沟: 金币+2, 谢谢交流~~ 2012-04-02 15:41:20
#include "udf.h"
#include "mem.h"
#define q 998
#define out 960
#define film-out 28
#define INT_YI 0.03
real AVG_YI=0.0;

DEFINE_ADJUST(outlet_avg_yi, d)
{#if RP_NODE

real sum_yi_A=0.0;
int j=0;
face_t f;
Thread *thread_out=Lookup_Thread(d,5);
   begin_f_loop(f,thread_out)
{
   sum_yi_A+=F_YI(f,thread_out,0);
  j++;      
}
end_f_loop(f,thread_out)
sum_yi_A = PRF_GRSUM1(sum_yi_A);
j = PRF_GRSUM1(j);
  AVG_YI=sum_yi_A/j;

Message0("%f\n",sum_yi_A);
Message0("%f\n",AVG_YI);
Message0("%d\n",j);
#endif
}


DEFINE_PROFILE(inlet,thread_in,index)
{#if RP_NODE
     real inlet_yi=0.0;
     face_t inlet_face;
   
     real time=RP_Get_Real("flow-time" ) ;   
     begin_f_loop(inlet_face,thread_in)
         {
           if(time<9)
         {
          inlet_yi=INT_YI;
           F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
         }
         
           else
        {
           inlet_yi=AVG_YI+0.2*out/q;
           F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
         }
       }
         end_f_loop(inlet_face,thread_in)   

     Message0("%f\n",inlet_yi);                     
     #endif
         }
3楼2012-04-01 16:20:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jesseliuxl

金虫 (小有名气)

引用回帖:
3楼: Originally posted by kylafree at 2012-04-01 16:20:13:
#include "udf.h"
#include "mem.h"
#define q 998
#define out 960
#define film-out 28
#define INT_YI 0.03
real AVG_YI=0.0;

DEFINE_ADJUST(outlet_avg_yi, d)
{#if R ...

编译能通过,不过之后出现这问题,不知是什么原因

你并行里试过没有啊?


生命不息折腾不止
4楼2012-04-01 18:44:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jesseliuxl

金虫 (小有名气)

并行的udf只能编译?
生命不息折腾不止
5楼2012-04-01 22:32:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kylafree

至尊木虫 (知名作家)


臭水沟: 金币+1, 谢谢交流~~ 2012-04-02 15:41:40
#include "udf.h"
#include "mem.h"
#define q 998
#define out 960
#define film_out 28
#define INT_YI 0.03
real AVG_YI=0.0;

DEFINE_ADJUST(outlet_avg_yi, d)
{#if RP_NODE

real sum_yi_A=0.0;
int j=0;
face_t f;
Thread *thread_out=Lookup_Thread(d,5);
    begin_f_loop(f,thread_out)
{
    sum_yi_A+=F_YI(f,thread_out,0);
  j++;      
}
end_f_loop(f,thread_out)
sum_yi_A = PRF_GRSUM1(sum_yi_A);
j = PRF_GRSUM1(j);
   AVG_YI=sum_yi_A/j;

Message0("%f\n",sum_yi_A);
Message0("%f\n",AVG_YI);
Message0("%d\n",j);
#endif
}


DEFINE_PROFILE(inlet,thread_in,index)
{#if RP_NODE
      real inlet_yi=0.0;
      face_t inlet_face;
   
      real time=RP_Get_Real("flow-time" ) ;   
      begin_f_loop(inlet_face,thread_in)
          {
            if(time<9)
          {
           inlet_yi=INT_YI;
            F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
          }
         
            else
        {
            inlet_yi=AVG_YI+0.2*out/q;
            F_PROFILE(inlet_face,thread_in,index)=inlet_yi;
          }
        }
          end_f_loop(inlet_face,thread_in)   

      Message0("%f\n",inlet_yi);                     
     #endif
          }
6楼2012-04-01 22:55:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kylafree

至尊木虫 (知名作家)

你连你的东西是干什么的都没说你让别人怎么试
7楼2012-04-01 22:57:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dhw0075

木虫 (知名作家)

至尊木虫

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
臭水沟: 金币+1, 谢谢交流~~ 2012-04-02 18:03:36
jesseliuxl: 金币+2 2012-04-02 19:57:20
在单核求解器中编译UDF,保存dat和case,然后再用并行求解器打开就可以了。

祝福~
学无止境。
10楼2012-04-02 16:40:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jesseliuxl 的主题更新
信息提示
请填处理意见