|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在离散相质点追踪的使用中,需要得到出口取样器的质点轨迹的数据进行分析,因此使用了DEFINE_DPM_OUTPUT宏来得到相关的数据,并写出一个可以读取得chukou.dpm的文件。开始写了一个UDF,单机单核运行时,可以正常工作,后来在双核机上运行发现写出的chukou.dpm文件中没有数据,是空的。
看了并行udf的使用说明,才知道,原来写文件必须在主机上进行,而主机的内存中是没有任何计算数据的,写文件必须要将节点计算的数据发送到主机后才能写文件,因此,又根据例子和自己的理解写了一个udf,见下面,但这个udf一运行就进入死循环,同时输出的chukou.dpm还是空文件;
搞了好几天,找不到原因,请高人指点!
DEFINE_DPM_OUTPUT(JILIANG,header,fp,p,thread,plane)
{
char name[100];
real DPMSHUJU[11];
int pe;
if (header)
{
if (NNULLP(thread))
fprintf(fp,"(%s %d)\n",thread->head->dpm_summary.sort_file_name,11);
else
fprintf(fp,"(%s %d)\n",plane->sort_file_name,11);
fprintf(fp,"(%10s %10s %10s %10s %10s %10s %10s"
" %10s %10s %10s %10s %s)\n",
"X","Y","Z","U","V","W","diameter","T","mass-flow",
"time","JILIANG","name");
}
else
{
DPMSHUJU[0]=p->state.pos[0];
DPMSHUJU[1]=p->state.pos[1];
DPMSHUJU[2]=p->state.pos[2];
DPMSHUJU[3]=p->state.V[0];
DPMSHUJU[4]=p->state.V[1];
DPMSHUJU[5]=p->state.V[2];
DPMSHUJU[6]=p->state.diam;
DPMSHUJU[7]=p->state.temp;
DPMSHUJU[8]=p->flow_rate;
DPMSHUJU[9]=p->state.time;
DPMSHUJU[10]=p->user[0];
pe = (I_AM_NODE_ZERO_P) ? node_host : node_zero;
PRF_CSEND_REAL(pe, DPMSHUJU, 11, myid);
if (I_AM_NODE_ZERO_P)
compute_node_loop_not_zero (pe)
{
PRF_CRECV_REAL(pe, DPMSHUJU, 11, pe);
PRF_CSEND_REAL(node_host, DPMSHUJU, 11, myid);
}
#if RP_HOST
compute_node_loop (pe)
{
PRF_CRECV_REAL(node_zero, DPMSHUJU, 11, node_zero);
}
#endif
sprintf(name,"%s:%d",p->injection->name,p->part_id);
fprintf(fp,
"((%10.6g %10.6g %10.6g %10.6g %10.6g %10.6g "
"%10.6g %10.6g %10.6g %10.6g %10.6g) %s)\n",
DPMSHUJU[0], DPMSHUJU[1], DPMSHUJU[2],
DPMSHUJU[3], DPMSHUJU[4], DPMSHUJU[5],
DPMSHUJU[6], DPMSHUJU[7], DPMSHUJU[8], DPMSHUJU[9],
DPMSHUJU[10], name);
}
}
说明:
1、自己认为,在主机中创建了一个存放数据的数组,就不需要在主机中设置动态内存。所以没有按例子设置动态内存。
2、自己理解,在PRF_CSEND_REAL(to, buffer, nelem, tag)和PRF_CRECV_REAL(from, buffer, nelem, tag)中,buffer是指被传送数组的文件名,nelem是被传送数组的元素个数;
3、由于质点追踪得到的数据是储存在结构型数据中,由于不知道如何将结构型数据传输到主机中,所以另外定义了一个储存的数组。
4、运行提示是不能应用到这个文件,另外打开一个新文件,然后就进入死循环;
请高人指点一下,我的udf和想法那里出了问题,如何改正才能在并行计算中运行!
谢谢!
|
|