Fluent 串行UDF改并行UDF? 100

浏览:1903 回答:3

串行可以计算,但是按照网上和帮助上改成并行的,结果并行计算和串行结果不一样(可以肯定并行计算错了),实在没搞明白host和node该怎么设,有没有大神指导一下改怎么改啊?UDF是求取特定体积的,涉及了循环,初步猜测是不同node的值没有汇总,导致结果中时间列是对的,变量列是错的....

#include "udf.h"

DEFINE_EXECUTE_AT_END(execute_at_end)

{

FILE *fp;

fp = fopen("vf.txt", "a");

real volume = 0.0;

real mass_fraction = 0.0;

real v = 0.0;

real vf = 0.0;

real flow_time = RP_Get_Real("flow-time");

int cold_index = 0;


#if !RP_HOST

Domain * d;

Thread * tc;

cell_t c;

d = Get_Domain(1);

#endif


#if !RP_HOST

thread_loop_c(tc, d)

{

begin_c_loop_int(c, tc)

{

mass_fraction = C_YI(c, tc, cold_index);

if (mass_fraction>0.13253545)

{

volume = C_VOLUME(c, tc);

v += volume;

}

}

vf = v * 100 / 0.01720534;

end_c_loop_int(c, tc)

}

#endif


#if !RP_HOST

fprintf(fp, "%f, %f \n", flow_time, vf);

fclose(fp);

#endif

}


邀请回答 我来回答

全部回答

(3)
默认 最新
NANK
fluent在并行计算时,整个计算网格会由主节点(host)分为若干个计算量相当的子区域,分配至各个计算结点(computer node)上。 host只存储网格的分区信息,因而不能进行涉及单元循环的计算,而可以进行从computer node上返回值的相关计算以及其它C语言允许的计算; computer node则可以进行本节点上分配的区域内网格循环的相关计算。在将串行udf修改为并行的时,确定好哪些程序段是需要在host上编译执行,哪些是需要在computer node上编译执行,协调好两者之间的数据传递即可, 具体参考Udf manual中的parallel considerations
2017年7月27日
已采纳 评论 点赞
技术邻问答
@EAC @NANK
2017年7月27日
评论 点赞
Samenov
在末尾加入v = PRF_GRSUM1(v)后,可以计算了,但是为什么并行和串行的结果,在小数数值上还有不同,UDF是不是还有问题?对于begin_c_loop_int 宏,在求取单元体积上时,只需要单元内部循环就可以了吗?不需要把外部单元一起循环吧?
2017年7月26日
评论 点赞

没解决?试试专家一对一服务

换一批