初始化错误——从一个简单的算例看UDF各个宏的调用顺序

感谢西安交通大学en_phert的问题和尝试 

Fluent版本:Fluent 19.0

Visual Studio版本:Visual Studio 2013 

UDF的宏的调用中大家常看见下图:

    这个图很容易给大家造成一个误解就是DEFINE_PROFILE是在初始化以后,在运算的过程当中更新物性参数的时候才会调用DEFINE_PROFILE

而帮助文档当中各个宏的调用顺序如下图:

从上面两幅图中我们可以看出其实在初始化以前,我们就会调用DEFINE_PROFILE宏,这也就能说明为什么我们在使用UDF的时候,分明只编写了修改边界的DEFINE_PROFILE宏,结果在初始化的时候却造成了Received signal SIGSEGV的错误

下面我们从一个简单算例来验证各个宏的调用顺序

算例来源于:https://confluence.cornell.edu/display/SIMULATION/FLUENT+-+Laminar+Pipe+Flow

对于边界条件来说,我们不直接在GUI当中指定数值,而是使用下面的UDF来指定,UDF中可以有输出信息,这样我们就可以通过控制台输出的信息,观察到对应的宏什么时候被调用。

初始化错误——从一个简单的算例看UDF各个宏的调用顺序

首先挂载DEFINE_INIT宏和DEFINE_ADJUST

初始化错误——从一个简单的算例看UDF各个宏的调用顺序

入口边界我们用UDF来代替

我们初始化 

在我们选择标准初始化,在compute from中选择inlet,我们可以在Fluent的控制台中看到DEFINE_PROFILE宏被调用了一次

点击“Initialize”按钮

 

点击“Calculate”按钮开始计算

初始化错误——从一个简单的算例看UDF各个宏的调用顺序

从上面的分析我们可以看到实际上的调用顺序和帮助文档里面的顺序是一致的,也可以再重新绘制如下图:

如果我们编写如下的DEFINE_PROFILE

 那么我们就会在初始化的时候造成Received signal SIGSEGV的错误

这是因为没有对指针a赋值,a指针是一个野指针,当我们去获取它所指向的值的时候,无法返回正确的值造成的,然而在初始化以前我们会去调用DEFINE_PROFILE这个宏,从而出现了错误。

 

posted @ 2018-11-12 13:37  硫酸亚铜  阅读(3388)  评论(0编辑  收藏  举报