24小时热门版块排行榜    

查看: 1785  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +13 Kittylucky 2026-08-27 14/700 2026-09-01 11:06 by feng6531
[论文投稿] 小白求助 投论文要求的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 尼古拉斯小虫
[基金申请] 怎么看青基中了没有啊 +6 叶九微 2026-08-26 6/300 2026-08-31 23:54 by yudaoqian88
[基金申请] 能否申诉? +7 echo8914667 2026-08-30 8/400 2026-08-31 17:00 by yihongxu
[基金申请] 基金不中,共勉 +12 eulota 2026-08-26 12/600 2026-08-31 08:42 by ZJTJZ
[基金申请] 为什么到现在没收到通知? +5 tannykie 2026-08-29 5/250 2026-08-30 21:05 by purplejack
[基金申请] 有没有仍没收到信息的 +7 德尚中行 2026-08-27 8/400 2026-08-30 20:52 by purplejack
[基金申请] 我就是申请一个面上项目而已,这评审意见是按照杰青的条件评的吧? +6 gouxfjh 2026-08-28 11/550 2026-08-30 07:57 by gouxfjh
[基金申请] 国自然面上复盘~欢迎讨论 (金币+15) +15 晴天加油 2026-08-26 16/800 2026-08-29 18:28 by symmetry
[基金申请] 国自然评审意见 +13 wangmingqi 2026-08-28 19/950 2026-08-29 10:22 by Poppy1104
[基金申请] 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
[基金申请] 面上合作单位盖章 +5 ssyjh 2026-08-27 5/250 2026-08-27 20:50 by gdfollow
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 为什么国自然不能直接公布 +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[基金申请] 国合可查了 +3 paperzjh 2026-08-26 3/150 2026-08-26 10:41 by LemmonTr
[基金申请] 今天务委会开完了,明天出结果吗 +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
信息提示
请填处理意见