UDF常见错误及解决策略


1 UDF报错

UDF错误主要分为两类:

第一类:UDF代码错误

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


第二类:UDF设置出错

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

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





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

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


2 常见错误


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


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




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

..........srcoriginal.c: warning C4819: ??????????????????

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

........srcoriginal.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).




注:

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


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

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


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

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




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

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


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

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

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




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

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





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


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


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


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

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


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


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

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




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




错误的原因: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是否相同。





3 UDF正常编译信息


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

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





4 UDF乱码正常显示

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

打开控制面板




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




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

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空