24小时热门版块排行榜    

查看: 1766  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +19 木水思豆 2026-08-25 22/1100 2026-08-26 06:24 by 玲珑133
[公派出国] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 PbwVEMK5haaE 2026-08-25 5/250 2026-08-26 05:09 by cNXvBfCpiZOM
[基金申请] 今天务委会开完了,明天出结果吗 +18 angus9576 2026-08-25 22/1100 2026-08-26 00:41 by merchancy
[基金申请] 明天应该可查了!? +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[基金申请] 今日不放榜?网传国自然预计 8 月 27 日可查结果 +17 医学老男孩 2026-08-20 22/1100 2026-08-25 15:36 by 医学老男孩
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[基金申请] 人气不行了 +11 fansofjerry 2026-08-21 11/550 2026-08-25 11:04 by 孤独的英雄6
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +3 苏东坡二世 2026-08-23 3/150 2026-08-25 10:35 by shisan1313
[基金申请] 今天基金会出结果吗?20260819 +17 kkkl_v 2026-08-19 18/900 2026-08-25 09:41 by windflowerwy
[基金申请] 我面上完蛋了 +13 且听虎啸 2026-08-20 14/700 2026-08-25 09:10 by mrkang
[基金申请] 范进中举一文的中心思想 +7 炎黄贵胄 2026-08-22 8/400 2026-08-25 08:48 by ZJTJZ
[基金申请] 只有每年这种时候来逛逛小木虫 +25 yaoyewhu2008 2026-08-20 27/1350 2026-08-25 08:01 by Equinoxhua
[基金申请] 让我中一个面上吧! +13 大萍1987 2026-08-20 16/800 2026-08-24 10:23 by 太傻了
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
[基金申请] 今天放榜吗? +15 布布和一二 2026-08-19 16/800 2026-08-23 09:55 by 张春生
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[基金申请] 今天放榜没戏了吧 +9 yuleib84 2026-08-19 11/550 2026-08-21 10:06 by gltch
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
信息提示
请填处理意见