24小时热门版块排行榜    

查看: 1788  |  回复: 3

mgyao

新虫 (初入文坛)

[求助] udf 用source加源项总是失败,是什么原因?

我算一个二维的算例,用udf在空气域里面选了一些单元加上作用力 。
source源项可以做到吧?为什么加上去算出来的结果跟没有加力的时候相比总是没有变化呢 ?
#include "udf.h"
#include "surf.h"
#define MAXPOINTS 9000
#define UDM_SOURCE_FMAGX  0
#define UDM_SOURCE_FMAGY  1


static int np = 0;
real coordinates[MAXPOINTS][ND_ND] = {{0.}};
real  area[MAXPOINTS];
real  fx[MAXPOINTS];
real  fy[MAXPOINTS];
real  m;

struct interpolation_point{
cell_t c;
Thread* t;
};

struct interpolation_point point_list[MAXPOINTS];


DEFINE_ON_DEMAND(mark_reset)
{
Domain*d = Get_Domain(1);
Thread*t;
cell_t c;

thread_loop_c(t,d)
{
begin_c_loop(c,t)
{

C_UDMI(c,t,UDM_SOURCE_FMAGX)=0.0;
C_UDMI(c,t,UDM_SOURCE_FMAGY)=0.0;


}
end_c_loop(c,t);
}
}



DEFINE_ON_DEMAND(mark)
{
#if !RP_HOST
Domain *d=Get_Domain(1);
cell_t c;
CX_Cell_Id cx_cell;
Thread* t;
int points_found = 0, total_points_found=0;
#endif

#if !RP_NODE
FILE *input;
#endif
int n;


/*输入单元坐标*/
#if !RP_NODE

/* Open input file */
if (!(input = fopen("coordinate.txt","r"))
{
Message0("\nWarning: Could not open interpolation input file...\n";
return;
}

/* Initialize */
for(n=0; n {
point_list[n].c = 0;
point_list[n].t = NULL;
}

/* Read points from input file */
n = -1;
while (!feof(input))
{
n++;
#if RP_DOUBLE
#if RP_3D
fscanf(input,"%lg %lg %lg", &coordinates[n][0], &coordinates[n][1], &coordinates[n][2])
;
#else
fscanf(input,"%lg %lg", &coordinates[n][0], &coordinates[n][1]);
#endif
#else
#if RP_3D
fscanf(input,"%g %g %g", &coordinates[n][0], &coordinates[n][1], &coordinates[n][2])
;
#else
fscanf(input,"%g %g", &coordinates[n][0], &coordinates[n][1]);
#endif
#endif

}
np = n;


/* Check np with MAXPOINTS */
if (np > MAXPOINTS)
{
Message0("ERROR: You must recompile interpolate UDF with MAXPOINTS at least %i\n", np)
;
return;
}

/* Close input file */
fclose(input);
#endif

/*输入需要加入的力fx,fy*/
#if !RP_NODE
input=fopen("fx.txt","r";
n = -1;
while (!feof(input))
{
n++;
fscanf(input," %lg ",&fx[n]);
}
fclose(input);
#endif

#if !RP_NODE
input=fopen("fy.txt","r";
n = -1;
while (!feof(input))
{
n++;
fscanf(input," %lg ",&fy[n]);
}
fclose(input);
#endif


/*输入单元面积*/

#if !RP_NODE
input=fopen("area.txt","r";
n = -1;
while (!feof(input))
{
n++;
fscanf(input," %lg ",&area[n]);
}
fclose(input);
#endif





/* FIND COORDINATES IN CELLS */

/* Pass coordinates and np to the compute nodes */
host_to_node_real(&coordinates[0][0],ND_ND*MAXPOINTS);
host_to_node_int_1(np);
host_to_node_real(&area[0],MAXPOINTS);
host_to_node_real(&fx[0],MAXPOINTS);
host_to_node_real(&fy[0],MAXPOINTS);



#if !RP_HOST

/* Do computations */
for(n=0;n {
thread_loop_c(t,d)
{
begin_c_loop_int(c,t)
{
if (SV_is_point_in_cell(&cx_cell, c, t, coordinates[n],m))
{
point_list[n].c = RP_CELL(&cx_cell);
point_list[n].t = RP_THREAD(&cx_cell);

/* SET UDM HERE */

C_UDMI(point_list[n].c, point_list[n].t, UDM_SOURCE_FMAGX)=fx[n]/area[n];
C_UDMI(point_list[n].c, point_list[n].t, UDM_SOURCE_FMAGY)=fy[n]/area[n];


points_found++;
goto label;
}
}
end_c_loop_int(c,t);
}
label: continue;
}

total_points_found += points_found;

#if PARALLEL
total_points_found = PRF_GISUM1(total_points_found);
#endif


/* PRINT MESSAGE */
if (np != total_points_found)
Message0("\n\n Warning.... %i points found in domain out of %i points in input file\n",
total_points_found, np);
else
Message0("\n\n Interpolate... all %i points located!\n", np);

#endif

}

DEFINE_SOURCE(fmagx,c,t,dS,eqn)
{
real source=0.0;
if(C_UDMI(c,t,UDM_SOURCE_FMAGX)!=0.0)
{
source=C_UDMI(c,t,UDM_SOURCE_FMAGX);
}

dS[eqn] = 0.0;
return source;
}

DEFINE_SOURCE(fmagy,c,t,dS,eqn)
{
real source=0.0;
if(C_UDMI(c,t,UDM_SOURCE_FMAGY)!=0.0)
{
source=C_UDMI(c,t,UDM_SOURCE_FMAGY);
}

dS[eqn] = 0.0;
return source;
}
回复此楼
坚若磐石
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiegangmai: 金币-1, 专业版块交流贴,请勿灌水 2012-10-23 22:11:01
2楼2012-10-23 15:46:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sunbird04

银虫 (小有名气)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xiegangmai: 金币+2, 谢谢参与 2012-10-24 19:51:46
先检查一下C_UDMI(c,t,UDM_SOURCE_FMAGX)及C_UDMI(c,t,UDM_SOURCE_FMAGY)看看他们的值是否为零。
如果不为零,那是不是你加的这个力对结果的影响不明显。
3楼2012-10-23 22:33:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mgyao

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by sunbird04 at 2012-10-23 22:33:24
先检查一下C_UDMI(c,t,UDM_SOURCE_FMAGX)及C_UDMI(c,t,UDM_SOURCE_FMAGY)看看他们的值是否为零。
如果不为零,那是不是你加的这个力对结果的影响不明显。

不是零,输出来看了的,试算一步的话也看不出来力有作用,估计还是哪里出问题没加上去
坚若磐石
4楼2012-10-24 11:05:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mgyao 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 面上合作单位盖章 +6 ssyjh 2026-08-27 9/450 2026-09-01 20:01 by huagongfeihu
[基金申请] 面上函评意见出来了,像什么等级? 20+4 Tsingking1 2026-08-27 17/850 2026-09-01 19:51 by 超级无敌华子
[基金申请] 为什么国自然不能直接公布 +5 bjdxyxy 2026-08-26 5/250 2026-09-01 17:54 by 小伟大博士
[基金申请] 学科评审组评审是指会评吗? +4 瞬息宇宙 2026-08-31 4/200 2026-09-01 14:58 by jiaoxg
[论文投稿] 小白求助 投论文要求的highlights应该如何写 5+3 l1963982152 2026-08-29 4/200 2026-09-01 09:04 by 北京莱茵编辑
[基金申请] 麻烦专家们看看评委们的意见(F口面上) +7 gdd2018 2026-08-28 12/600 2026-09-01 08:32 by 尼古拉斯小虫
[基金申请] 国社科又开始会评了,不知道这次命运如何 +7 雨打竹帘 2026-08-30 11/550 2026-08-31 23:16 by hittle2008
[基金申请] 基金未中,这种答复是模板吗? +6 zhaosm1982 2026-08-27 7/350 2026-08-31 21:18 by qdxxmc
[基金申请] 面上意见出来了 +12 黄鸟于飞Chao 2026-08-29 23/1150 2026-08-31 18:57 by 黄鸟于飞Chao
[基金申请] 能否申诉? +7 echo8914667 2026-08-30 8/400 2026-08-31 17:00 by yihongxu
[基金申请] 中青基了要发朋友圈吗? +7 349506619 2026-08-28 7/350 2026-08-31 13:39 by 冼亮淀粉酶
[基金申请] 29号明天会评吗 +4 笨笨唐 2026-08-28 4/200 2026-08-31 09:30 by huixian257
[基金申请] 基金不中,共勉 +12 eulota 2026-08-26 12/600 2026-08-31 08:42 by ZJTJZ
[考博] 找导师 +6 yuanjiabao 2026-08-29 7/350 2026-08-30 14:40 by 生科新手
[基金申请] 国自然面上复盘~欢迎讨论 (金币+15) +15 晴天加油 2026-08-26 16/800 2026-08-29 18:28 by symmetry
[基金申请] 2026年叶企孙基金 +4 bud_bud 2026-08-27 7/350 2026-08-29 07:23 by foolishmani
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 国际合作可查了,中了面上 (EPI+1)(金币+50) +18 Ldrop2023 2026-08-26 18/900 2026-08-26 11:15 by cmrandy
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
信息提示
请填处理意见