24小时热门版块排行榜    

查看: 963  |  回复: 2

W嵬嵬O

捐助贵宾 (初入文坛)

[求助] 二维水槽造波单机多核并行计算,udf该如何修改

问题1:我模拟了一个二维水槽,只加了一个消波的udf。串行的时候计算正常,改成并行后,计算提示Global courant number超过250。但在相同情况下把并行的时间步调小,也可以计算。我想确认一下,这问题是因为我的udf没有改成并行造成的计算误差较大呢?还是仅仅是参数设置问题?

问题2:如果是udf未改并行的问题,那么我的udf应该怎么修改呢?网上说是“在每段程序 最前头加上 #if !RP_HOST   最末尾加上#endif   即可”,具体应该怎么操作呢?

下面有计算提示的Global courant number超过250,以及消波程序,谢谢啦

#include "udf.h"
#define PI 3.1415926
#define G 9.81
#define D 5
#define H 1
#define T 4
#define L 23
#define FL 90



//xiaobo//
// x direction momentum //
DEFINE_SOURCE(x_mom_source,c,t,dS,eqn)
{
real x[ND_ND];
real x_source;
real y;
real xishu;
real time = RP_Get_Real("flow-time";
y=x[1];
C_CENTROID(x,c,t);
if(x[0]>=FL-L && x[0] <=FL)
{
if(y>=D-H && y <=D)
{
xishu=8*(x[0]-(FL-L))/L;
x_source=-C_U(c,t)*998.2*xishu;
dS[eqn]=-998.2*xishu;
}
else
x_source=0;
}
else
x_source=0;
return x_source;
}


// y direction momentum //

DEFINE_SOURCE(y_mom_source,c,t,dS,eqn)
{
real x[ND_ND];
real y_source;
real y;
real xishu;
real time =RP_Get_Real("flow-time";
y=x[1];
C_CENTROID(x,c,t);
if(x[0]>=FL-L && x[0] <=FL)
{
if(y >= D-H && y <=D)
{
xishu=8*(x[0]-(FL-L))/L;
y_source=-C_V(c,t)*998.2*xishu;
dS[eqn]=-998.2*xishu;
}
else
y_source=0;
}
else
y_source=0;
return y_source;
}
回复此楼

» 猜你喜欢

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

氟利昂_66

新虫 (初入文坛)

2楼2017-11-20 00:50:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zju_zhou

新虫 (初入文坛)

你好 请问这个问题你解决了吗?想问一下是怎么解决的
3楼2021-12-23 19:29:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 W嵬嵬O 的主题更新
信息提示
请填处理意见