| 查看: 3852 | 回复: 4 | ||
[求助]
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 求大神指导!!! |
» 猜你喜欢
拟解决的关键科学问题还要不要写
已经有6人回复
基金申报
已经有6人回复
存款400万可以在学校里躺平吗
已经有6人回复
推荐一本书
已经有13人回复
基金委咋了?2026年的指南还没有出来?
已经有9人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
Materials Today Chemistry审稿周期
已经有5人回复
2楼2019-09-11 09:19:57
3楼2021-04-13 09:59:53
4楼2024-11-25 14:24:33
【答案】应助回帖
|
“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











;
回复此楼