找回密码
 注册
查看: 2517|回复: 4

udf改为并行[求助]

[复制链接]
发表于 2013-11-5 17:54:12 | 显示全部楼层 |阅读模式

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

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

x
程序的目的是根据监测点的压力调节入口的质量流量,维持监测点的压力近似恒定,单核计算时程序可以用,一旦并行就出错,自己试着按帮助里的方法改一直没通(比如加#if !HOST #endif之类),恳请各位指点,先谢过了!


DEFINE_ADJUST(get_p_monitor,d)
{
     Thread *t;
     cell_t c;
     real xc[ND_ND];/*网格质心坐标*/
     thread_loop_c(t,d)
      {
              begin_c_loop(c,t)
                  {
                              C_CENTROID(xc,c,t);
                              if (sqrt(ND_SUM(pow(xc[0] + 2.,2.),
                                                        pow(xc[1] -1.3,2.),
                                                        pow(xc[2]-0.,2.)))<0.01
                              pressure=C_P(c,t);/*点(-2,1.3,0)为监测点,当网格质心与监测点的距离小于0.01时,认为该网格的压力就是监测点的压力*/
                   }
           end_c_loop(c,t)
     }
printf("\n pressure=%g\n",pressure);
}

DEFINE_PROFILE(mass_inlet_as_p,t,i)
{
     face_t f;
     real mass=0.5;
     if(pressure<=480000.)
     mass=mass+0.01;
     else if(pressure>480000.&&.pressure<520000.)/*根据监测点的压力调节入口质量流量*/
     mass=mass;
     else
     mass=mass-0.01;
     begin_f_loop(f,t)
     {
        F_PROFILE(f,t,i)=mass;
     }
     end_f_loop(f,t)
printf("\n pressure=%g\n",pressure);
}
如果一并行,每计算一步会出现四个压力值(我用四核并行),其中一个为真实值,另三个是0,然后到下面用压力判断质量流量时用的一直是那个0的压力,所以就流量一直升高。

[ 本帖最后由 ltpreason 于 2013-11-5 17:55 编辑 ]
 楼主| 发表于 2013-11-6 17:36:45 | 显示全部楼层
恳请高手帮忙。焦虑中……
 楼主| 发表于 2013-11-7 20:02:18 | 显示全部楼层
大家帮帮我吧。。。。
发表于 2013-11-12 14:43:05 | 显示全部楼层

回复 1# ltpreason 的帖子

不用改哪些host,直接用。host和node是你自己去控制主节点和分节点的。上面的写法用载并行里面,则认为host和node节点都运行相关的代码,对你的code没有影响。

但是,你要在并行状态下编译code就行(compile),单核状态编译的不能用于并行。从你的code来看,不需要区分host和node。
 楼主| 发表于 2013-11-14 18:56:06 | 显示全部楼层

回复 4# fty0083 的帖子

谢谢大神。我试一下看看。非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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