24小时热门版块排行榜    

查看: 3852  |  回复: 4

王璐FT

新虫 (初入文坛)

[求助] UDF代码串行改并行 已有2人参与

#新人一枚,金币不足,请各位大佬见谅#
FLUENT UDF编程,串行改并行,根据FLUENT help里的帮助进行了更改,但是仍显示错误,求各位大佬帮助!!!
串行代码:
#include "udf.h"

DEFINE_EXECUTE_AT_END(centroid)       /*centroid函数名DEFINE_EXECUTE_AT_END宏*/
{
   cell_t c;                           /*变量c为cell_t数据类型*/
   real cx,cy;                         /*声明变量cx,cy为实数,需求的质心坐标*/
   real x,y;
   real wcx=0.0;                      /*声明wcx为实数,初值为0,质心x坐标*单元体积*/                           
   real wcy=0.0;
   real va_liq=0.0;                 /*液相总体积*/
   real z[ND_ND];                 /*定义质心的二维坐标,数据类型为real*/
   FILE *fout1;
   FILE *fout2;
   Domain *subdomain= Get_Domain(3);       /*区域 用*d输出指针d指向的值*/
   Thread *t;                       /*与它描述的单元或面的组合相关的数据容器*/
  thread_loop_c(t,subdomain)                 /*遍历求解域中所有单元的边界*/
  {
   begin_c_loop(c, t)                /*遍历网格单元*/
   {     
    if(0.5<=C_VOF(c,t)&&C_VOF(c,t)<=1.0)    /*找到液相单元,C_VOF(c,t)单元液相体积分数*/   
   {
    va_liq = va_liq + C_VOLUME(c,t);   
    C_CENTROID(z,c,t);            /*一个函数,读取网格单元质心二维坐标并赋值给z*/
    wcx = wcx + z[0]*C_VOLUME(c,t);       /*x[0]质心横坐标,x[1]质心纵坐标*/
    wcy = wcy + z[1]*C_VOLUME(c,t);       /*C_VOLUME(c,t)获取单元体积*/
   }
   }
   end_c_loop(c, t)
  }
  cx = wcx/va_liq;
  cy = wcy/va_liq;

  fout1 = fopen("X-centroid of liquid.txt","a";
  fout2 = fopen("Y-centroid of liquid.txt","a";

  fprintf(fout1,"%g,%g\n",CURRENT_TIME,cx);
  fprintf(fout2,"%g,%g\n",CURRENT_TIME,cy);

  fclose(fout1);
  fclose(fout2);

  Message("\n X-centroid of liquid = %g\n", cx);
  Message("\n Y-centroid of liquid = %g\n", cy);
}
更改后代码:
DEFINE_EXECUTE_AT_END(centroid)       /*centroid函数名DEFINE_EXECUTE_AT_END宏*/
{
        real wcx = 0.0;                      /*声明wcx为实数,初值为0,质心x坐标*单元体积*/
        real wcy = 0.0;
        real va_liq = 0.0;                 /*液相总体积*/
   
#if !RP_HOST
        real cx, cy;                         /*声明变量cx,cy为实数,需求的质心坐标*/
        real x, y;
   cell_t c;                           /*变量c为cell_t数据类型*/
   real z[ND_ND];                 /*定义质心的二维坐标,数据类型为real*/
   Domain *subdomain= Get_Domain(3);       /*区域 用*d输出指针d指向的值*/
   Thread *t;                       /*与它描述的单元或面的组合相关的数据容器*/
   #if !RP_NODE
   FILE *fout1;
   FILE *fout2;
   #endif
  thread_loop_c(t,subdomain)                 /*遍历求解域中所有单元的边界*/
  {
  begin_c_loop(c, t)                /*遍历网格单元*/
  {     
    if(0.5<=C_VOF(c,t)&&C_VOF(c,t)<=1.0)    /*找到液相单元,C_VOF(c,t)单元液相体积分数*/   
  {
    va_liq = va_liq + C_VOLUME(c,t);   
    C_CENTROID(z,c,t);            /*一个函数,读取网格单元质心二维坐标并赋值给z*/
  wcx = wcx + z[0]*C_VOLUME(c,t);       /*z[0]质心横坐标,z[1]质心纵坐标*/
   wcy = wcy + z[1]*C_VOLUME(c,t);       /*C_VOLUME(c,t)获取单元体积*/
}
   }
   end_c_loop(c, t)
}
#if RP_NODE
  va_liq =PRF_GRSUM1(va_liq);
  wcx =PRF_GRSUM1(wcx);
  wcy =PRF_GRSUM1(wcy);
  # endif
  cx = wcx/va_liq;
  cy = wcy/va_liq;
  #endif
  #if !PARALLEL
  fout1 = fopen("X-centroid of liquid.txt","a";
  fout2 = fopen("Y-centroid of liquid.txt","a";
  fprintf(fout1,"%g,%g\n",CURRENT_TIME,cx);
  fprintf(fout2,"%g,%g\n",CURRENT_TIME,cy);
  fclose(fout1);
  fclose(fout2);
  #endif
}
编译时显示错误:
Error: C:/Users/MSI/AppData/Local/Temp/centroid_parallel_wl.c.23224.4.c: line 35: MPT_gdsum1: no function prototype
求大神指导!!!
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

SuperUDF

银虫 (小有名气)

读写文件和网格操作的并行编程是最麻烦的。
2楼2019-09-11 09:19:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

swirl

新虫 (正式写手)

【答案】应助回帖

并行优化UDF,使用全局求和宏的时候用compiled编译导入fluent,否则就会出现no function prototype报错。
3楼2021-04-13 09:59:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

28通信调剂

新虫 (初入文坛)

大佬,问题有解决嘛?同问题求解惑

发自小木虫手机客户端
4楼2024-11-25 14:24:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

大胃马里奥

捐助贵宾 (初入文坛)

【答案】应助回帖

“Error: C:/Users/MSI/AppData/Local/Temp/centroid_parallel_wl.c.23224.4.c: line 35: MPT_gdsum1: no function prototype”,这个错误提示表明在编译过程中,编译器未能找到函数 MPT_gdsum1 的原型声明。
解决方案:

    检查头文件:确保所有相关的头文件都已正确包含在您的源代码中。特别是涉及到 MPT_gdsum1 函数的头文件。例如,如果 MPT_gdsum1 是 Ansys 并行计算库的一部分,您需要确保包含了相应的并行计算库的头文件。

    验证库链接:确保在编译时正确链接了所需的库文件。如果您使用的是 Ansys 的特定库,请检查项目设置或编译命令中是否正确指定了这些库的路径。

    查看官方文档:查阅 Ansys 官方文档,了解 MPT_gdsum1 函数的具体用法和依赖关系。官方文档通常会提供详细的函数原型和使用示例。

    更新软件:确保您使用的 Ansys 软件版本是最新的。有时,旧版本的软件可能会存在一些已知的问题,这些问题在新版本中已经被修复。

示例:

假设 MPT_gdsum1 是 Ansys 并行计算库的一部分,您可以在代码中添加以下头文件:

#include "parallel.h"  // 假设 parallel.h 包含了 MPT_gdsum1 的原型声明

然后确保在编译命令中链接了相应的库:

gcc -o my_program my_program.c -L/path/to/ansys/lib -lansys_parallel
5楼2024-11-28 12:22:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 王璐FT 的主题更新
信息提示
请填处理意见