24小时热门版块排行榜    

查看: 1775  |  回复: 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的回帖

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的回帖
查看全部 4 个回答

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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基金系统什么内容也没有 30+3 winsaint 2026-08-27 6/300 2026-08-28 01:46 by alongwaytogo
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 XLGfUIdOmEAO 2026-08-27 4/200 2026-08-27 22:26 by 3RAFyYXYSwGS
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +7 苏东坡二世 2026-08-23 7/350 2026-08-27 18:14 by 瞬息宇宙
[基金申请] 基金未中,这种答复是模板吗? +5 zhaosm1982 2026-08-27 6/300 2026-08-27 16:00 by lfy8008
[基金申请] 为什么 国际(地区)合作与交流项目 没有放榜? 10+3 majunge000 2026-08-26 11/550 2026-08-27 08:42 by 北京莱茵编辑
[教师之家] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 LIbGuocjEEYw 2026-08-26 4/200 2026-08-27 04:33 by Ie9AyIAvGbvs
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 怎么查啊 +5 huang1991js 2026-08-26 5/250 2026-08-26 16:09 by Equinoxhua
[基金申请] 范进中举一文的中心思想 +9 炎黄贵胄 2026-08-22 10/500 2026-08-26 15:40 by semaglutide
[基金申请] 2026国自然函评费到账 +22 羊腰板 2026-08-21 25/1250 2026-08-26 15:00 by zuocuiping
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 国合可查了 +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
[基金申请] 国合现在查不到了吗? +10 chengyan1220 2026-08-24 20/1000 2026-08-26 08:57 by peasantsprig
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 明天应该可查了!? +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[基金申请] 某些机构,以效率低为荣,以效率低作为存在感 +9 yuleib84 2026-08-25 10/500 2026-08-25 17:14 by alexon
[基金申请] 建议基金发布提前给出明确的时间点 +13 kulium 2026-08-21 16/800 2026-08-24 16:27 by superceng
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
信息提示
请填处理意见