Fluent UDF编译正确的流程及常见错误
责任编辑:李宛倩     时间:2022-12-11     来源:转载于:Fluent学习笔记 ,学习Fluent的狗子
责任编辑:李宛倩
时间:2022-12-11  来源:转载于:Fluent学习笔记 ,学习Fluent的狗子
分类: 技术分享
浏览量: 4785

此篇文章详细说明一下对UDF进行编译的正确流程。

1. UDF正常编译流程微信图片_20221211130858.png


第一步:配置环境变量,参考公众号文章十.Fluent环境变量的配置

第二步:验证环境变量是否成功

第三步:进行UDF编译

 

2. 配置环境变量

2.1 编译型VS解释型

推荐大家使用编译型UDF

 

有些同学为了方便省事,想直接用解释型UDF,这样就不用配置环境变量了。解释型的UDF与编译型UDF在UDF的编写上没有任何不同,只是将UDF加载到Fluent中的方式有所不同。

微信图片_20221211130858.png

解释型的UDF:运算速度慢、不需要C语言编译器、只能使用预定义的宏、只能使用C语言书写

 微信图片_20221211130907.png

对于简单的UDF,可以使用解释型的UDF。但是当你的UDF涉及到比较高级的宏,解释型UDF是识别不了的,比如BOUNDARY_FACE_GEOMETRY、PRINCIPAL_FACE_P、Error等


编译型UDF:运算速度快、可以使用C或C++语言书写、通用性强。

微信图片_20221211130915.png

一句话,解释型不能通过的UDF,编译型有可能通过;但编译型不能通过的UDF,解释型一定不能通过。

(一句话,东厂管得了的我要管,东厂管不了的我更要管,先斩后奏,皇权特许!这就是西厂,够不够清楚?)


2. 验证环境变量是否成功

找一个一定没问题的UDF,编译一下看是否通过。如果没有任何error信息,那就说明环境变量配置成功了。

没问题的UDF如何找:UDF手册中的UDF肯定没问题,找一个最简单的就行,这里我提供一个:

#include "udf.h"

DEFINE_PROPERTY(density_air, c, t)//空气密度

{

real density;

density = 1.0;

return density;

}

直接新建txt文件,将上面代码复制,然后将.txt改为.c即可。也可以从文章后面的链接中直接获取UDF文件

微信图片_20221211130927.png

 什么样的信息算是error?:我们先假设UDF一定没问题,如果Source Files选择了这个UDF,点击Build后,控制台界面会生成一堆乱码信息,直接点击load,如果弹出下图,那大概率就是环境变量没有配置成功。

 

这种方法判断的前提是UDF没有任何问题。

微信图片_20221211130934.png

3. 进行UDF编译

图片

在环境变量配置成功的情况下,再进行自己书写的UDF的编译。

这一步还可能会遇到很多问题。由于环境变量已经配置成功,因此遇到的问题一定是UDF本身的问题,可能是书写不规范,也可能是语法问题。

 

还有可能,UDF编译通过,但是一点计算就会出现下图这种错误

微信图片_20221211130941.png

或者出现received a fatal signal (aborted).

微信图片_20221211130947.png

总之错误总是千奇百怪,防不胜防。但当使用的多了,会发现常见的错误原因就那几个,多注意排查即可。这部分下篇文章会进行叙述。

百度网盘链接:https://pan.baidu.com/s/1A9daH9pPFxyTL1ElsKwqow

提取码:h1uc


二、常见错误

1 UDF报错

UDF错误主要分为两类:

第一类:UDF代码错误

这类错误非常常见,但是也非常容易解决,因为Build过程,控制台会提示有问题的代码行数。只要根据提示更改源代码即可。


第二类:UDF设置出错

这类错误原因非常多,基本特点就是Build能顺利通过,load也没问题。但是一计算或者初始化就有直接报错。

常见的原因:UDM未开启或数量不对;UDF中的thread、cell、face等数据结构使用不当。

 微信图片_20221211130952.png

正确的UDF总是千篇一律,但错误的UDF却各有各的错误。使用的多了会发现常见的错误基本就这么几个,要注意排查。

以下介绍几种常见的错误及对应的报错信息,以便大家进行UDF错误排查。

 

2 常见错误


见错误1:UDF代码存在问题

 将UDF编译Build之后,先不要点击load,此时会出现如下图一堆乱码信息,我们需要从中找到有用的信息。如图出现了下图框出的部分

微信图片_20221211131002.png2.1 常

上图中有warning行,当出现了warning行,不必理会,UDF可以正常进行计算

.....\.....\src\original.c: warning C4819: ??????????????????

 

但是当出现了error行,则说明UDF代码出现了问题。下面的报错信息c(17)表明UDF的第17行代码出现了问题,可针对此行进行修改。

....\....\src\original.c (17): error C2065: ??ter??:???????????

 

注:

1. 有时候报错信息会很多,很多行都有问题。但是可能只修改一行代码,错误完全消失。比如忘记声明变量i,但是下面很多行都使用到了此变量,报错信息就会很多。只要声明了这个变量,错误信息都会消失。


2. 常见的代码错误:

忘记写分号;

使用全角符号()和;

没有声明变量

多了或者缺少{   }

 

2.2 常见错误2:环境变量配置失败

 

UDF代码没问题的情况下,build也没有报错信息。但是点击load,会弹出下图窗口,说明环境变量配置不成功,需要重新配置环境变量。

The UDF library you are trying to load (libudf) is not compiled forparallel use on the current platform (win64).

微信图片_20221211131010.png

注:

1. 下图表示的是UDF没有编译成功。如果UDF代码有误,build后出现报错信息,没有修改UDF直接点击load,也会弹出下面的窗口。


2. 一般环境变量配置不成功的话,点击build会很快编译完成,说明没有编译成功;而环境变量配置成功,点击build,编译过程会有一段时间,说明正在进行编译。

 

3) 常见错误3:UDF命名出错

UDF命名是有要求的,不能出现中文字符这一点大家都知道。

同时UDF的文件名中不能出现空格,这一点很容易被大家忽视。只要文件名中包含空格或者全角符号,那点击build之后,就会出现下面的报错信息。

微信图片_20221211131015.png

 此时报错信息不会出现多少行代码(类似c(17))出现问题,因此难以排查。报错信息的最后一个\后就是UDF的文件名,表示UDF 命名有问题。

 

2.4 常见错误4:UDM未开启或数量不够

当UDF中使用用户自定义变量UDM时,必须开启UDM,并且设置足够多的数量,否则UDF会出错。

这种情况下UDF编译build通过,load也没问题。

但是只要一点击Calculate就立马报错。这时会出现下图的报错信息,Received signal SIGSEGV

微信图片_20221211131020.png

SIGSEGV:SIG是信号名的通用前缀, SEGV是segmentation violation存储器区段错误。这里就是指UDF中的UDM没有分配内存导致的错误。

只需要打开UDM,或者把UDM的数量调多就行,多了可以,但少了不行。

 微信图片_20221211131024.png


2.5 常见错误5:UDF数据结构错误

UDF自定义内部的数据结构有很多,我们经常用到的主要是三个:线程Thread、网格cell和面face。如果在UDF对这些数据结构错误的使用,那么UDF编译能正常通过,load也没问题,但一点计算就会报错。


比如thread1线程只进行了声明,但并没有从fluent获取。如果直接使用thread1,则编译通过,load通过,但点击计算,可能会报下图错误:Received signal SIGSEGV

 微信图片_20221211131029.png

这种问题,报错的信息可能有很多种。但是基本都有一个特点,那就是编译没问题、load没问题,但一点击计算又出错。

 

 

2.6 常见错误6:UDF被其他cas占用

 

UDF编译的过程:选择UDF后,点击build,会生成一个libudf文件夹。点击load后,fluent会直接调用libudf文件夹下的已经编译好的文件。


此时源UDF文件与fluent没有任何关系,即使删除掉源UDF文件,fluent也可以正常运行。但是不能删掉libudf文件,这个文件会一直被fluent占用。

 

注:libudf是编译过程生成的文件夹名称,可在点击build之前,在Library Name处更改此名。

 微信图片_20221211131035.png

正是由于上面的原因,又会引出一个UDF常见的问题。正常情况下,udf会被一个cas所使用,但如果两个cas想同时使用一个udf,在cas1已经使用此UDF进行计算的情况下,cas2如果仍然选择这个UDF,点击build之后,可能出现如下图的报错:

 

微信图片_20221211131040.png

错误的原因:cas1已经生成了libudf,并且已经将这个libudf加载进fluent中了,也就是说libudf已经被cas1占用了。此时cas2想再生成libudf,应该要覆盖掉之前的libudf文件夹,但由于libudf被占用,因此无法覆盖,也就无法生成。

 

也就是说,这种错误和udf无关,同一个文件夹下两个完全不同的udf被两个cas调用,如果这两个cas编译udf时生成的文件夹名称相同,仍然会报上图的错误。

 

解决办法:解决办法很简单,两个cas的Library Name取不同的名称即可消除此错误。

 

 

2.7 常见错误7:libudf未正常更新

这种错误偶尔才会出现。

正常情况下,当UDF更改之后,需要重新对其编译,如果不编译,那还是使用原来的UDF进行计算。

但是在有些情况下,重新编译UDF可能会不成功,但是控制台不会出现进行报错信息,计算也能够正常进行。


怎么知道UDF是否正常更新呢?一方面如果计算残差和原来一模一样,没有突变,那可能就有问题。


另一方面,查看libudf文件夹下的src文件夹,里面是fluent真正加载的UDF文件,打开这个文件,看看是否和新的UDF是否相同。

微信图片_20221211131046.jpg

3 UDF正常编译信息

图片

什么样的信息说明build没有问题??

首先build加载时间比较长,其次文本控制台没有任何error的信息。可能会出现很多???或者乱码,只要没有error就行。比如下图,尽管出现乱码,但是没有error,说明编译正常。

 微信图片_20221211131050.png

4 UDF乱码正常显示

图片

在windows平台下,UDF编译之后控制台信息是乱码的。可通过对电脑进行设置,使其正常显示。

打开控制面板

 微信图片_20221211131054.png

点进去时钟和区域--管理---更改系统区域设置

 微信图片_20221211131058.png


勾选Beta版,点击确定,然后重启电脑,此时fluent编译UDF就不会出现乱码了。但是UDF的一些中文注释,可能会变成乱码。

案例压缩包已上传百度网盘。

链接:https://pan.baidu.com/s/1q6vkta7PC00PxuoU9tSWog

提取码:acam










来源:转载于:Fluent学习笔记 ,学习Fluent的狗子

点赞人: 李宛倩  木头 

 回复 2024-04-21 16:07:12

Setting Post Processing and Surfaces information ... Done. Error: CDR: invalid argument \[1\]: wrong type \[not a pair\] Error Object: #f Copy "C:\\VS0308\\pbm-1\\pbm-1\\Gong\_aggregation\_01.cpp" to "libudf\\src" Copyright 1987-2023 ANSYS, Inc. All Rights Reserved. Compiler and linker: Clang (builtin) scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly File "C:\\CFD-PBM\\0306-aaa\_files\\dp0\\FLU-1\\Fluent\\libudf\\win64\\2ddp\_host\\SConstruct", line 20, in <module> Compiler path: "C:\\PROGRA~1\\ANSYSI~1\\v231\\fluent"\\ntbin\\clang\\bin\\clang-cl Linker path: "C:\\PROGRA~1\\ANSYSI~1\\v231\\fluent"\\ntbin\\clang\\bin\\lld-link scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly File "C:\\CFD-PBM\\0306-aaa\_files\\dp0\\FLU-1\\Fluent\\libudf\\win64\\2ddp\_host\\SConstruct", line 156, in <module> C sources: \['Gong\_aggregation\_01.cpp'\] Copyright 1987-2023 ANSYS, Inc. All Rights Reserved. Compiler and linker: Clang (builtin) scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly File "C:\\CFD-PBM\\0306-aaa\_files\\dp0\\FLU-1\\Fluent\\libudf\\win64\\2ddp\_node\\SConstruct", line 20, in <module> Compiler path: "C:\\PROGRA~1\\ANSYSI~1\\v231\\fluent"\\ntbin\\clang\\bin\\clang-cl Linker path: "C:\\PROGRA~1\\ANSYSI~1\\v231\\fluent"\\ntbin\\clang\\bin\\lld-link scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly File "C:\\CFD-PBM\\0306-aaa\_files\\dp0\\FLU-1\\Fluent\\libudf\\win64\\2ddp\_node\\SConstruct", line 156, in <module> C sources: \['Gong\_aggregation\_01.cpp'\] Done. DESKTOP-B1DFLHN: Opening library "C:\\CFD-PBM\\0306-aaa\_files\\dp0\\FLU-1\\Fluent\\libudf"... Done. DESKTOP-B1DFLHN: Opening library "C:\\CFD-PBM\\0306-aaa\_files\\dp0\\FLU-1\\Fluent\\libudf"... aggregation\_kernel\_Gong\_new Done. 报错情况

回复:

Copyright © 2021 .长沙麦涛网络科技有限公司 All rights reserved. 湘ICP备20015126号-2
联系我们