首页/文章/ 详情

七十六、Fluent初始化patch和UDF详解

11月前浏览6250

1. Patch操作

1.1 概念介绍

上篇文章我们详细的介绍了标准初始化和混合初始化七十五、Fluent初始化操作详解,但一些时候这两种初始化是不够的,还需要辅助的操作---patch操作

什么是Patch操作呢?英文翻译叫做”补丁“,它确实是补丁的意思。类似于给衣服打补丁,Patch操作就是为流场打上修补,即修改原始的正常流场。

这可以包括对初始化的速度场、温度场、体积分数场等进行调整,也可以是对经过计算后的各物理量场进行修正。Patch操作的目的是在流场中选择性地改变某些部分的特定物理量数值


比如下图是在计算后的温度场基础上进行的patch操作,第二张图明显有”打补丁“的感觉。



注:虽然可以在计算结果后进行patch操作,但是一般是不这样做的,Patch主要还是修改初始化的流场,在初始化后紧接着进行patch操作。可以认为patch操作是一种高级的初始化。



1.2 Patch操作的适用性

什么时候需要”打补丁“呢?什么情况下需要patch操作?


 

一般来说,稳态计算不需要patch操作,而瞬态初始化才会用到patch操作。为什么呢?

因为稳态计算的最终结果不依赖初始化,那么初始化后的patch操作只是改变了迭代步数,对最终结果没有影响。


而瞬态计算不同,瞬态计算的最终结果依赖初始化,patch操作相当于改变了初始化值,会对最终的计算结果产生影响。比如溃坝问题,初始化后需要patch液态水的体积分数,来构建蓄水区域。



1.3 Patch操作步骤

下面我们以溃坝模型为例来详细说明patch操作。溃坝模型很简单,两相流,水刚开始被存储在蓄水池中,然后堤坝打开,水流出。

 

a. 标准初始化

先进行标准初始化,我们将water Volume Fraction设置为0,也就是整个计算域都是空气,没有水。但这显然不是我们想要的初始化结果,因此必须打补丁,也就是进行patch操作,将蓄水池装满水。


b. Patch界面

点击patch后会弹出patch界面

Patch界面可以分为三部分,第一部分是选择需要修改的物理量;第二部分是设置需要修改的值;第三部分是选择需要修改物理量的区域。我们详细讲解:


Ø 第一部分:

Reference Frame:参考系,默认即可,不必理会,具体意义可参考上篇文章。七十五、Fluent初始化操作详解


Phase和Variable:Phase表示需要修改哪一相的物理量,对于两相流,可以设置mixture和次相。Variable表示物理量。这两者是互相配合的,Phase下可以选择不同的相,可以设置不同的物理量。


对于本例,我们需要设置water的体积分数,因此phase需要选择water,Variable需要选择体积分数Volume Fraction。

Volume Fraction patch options:只有VOF 和 Eulerian 模型需要patch体积分数时才可用。一般保持默认即可。


Patch Reconstructed Interface:patch界面重构

我们patch的体积分数界面和实际的相界面,通过线性插值的方式重构,也就是界面过渡的地方是线性过渡的,而不是直接突变的。


Volumetric Smoothing

通过相邻网格体积分数的平均值来使体积分数比较平滑。启用此选项后,可以单击“Smooth”,对整个域中的体积分数进行平滑。

Smoothing Relaxation Factor

和Volumetric Smoothing搭配使用的,用来控制体积分数的平滑程度。在0(无平滑)和1(最大平滑)之间。



Ø 第二部分:


Vaule:需要修改物理量的值,在本例即1,也就是将water的体积分数修改为1。也可以通过表达式来定义,详细可参考文章:七十一、Fluent表达式进阶实例


Use Field Function:通过Field Function的形式来确定修改的物理量。就是对一些物理量进行计算,比如动压=1/2*密度*速度^2。一般不需要这样设置。


 

Field Function:勾选Use Field Function后可用,选择通过Field Function定义的场函数。比如下图定义的动压



Patch界面就会出现刚才定义的场函数dy-pre




Ø 第三部分:


Zones to Patch:选择需要patch的zone计算域,当存在多个计算域时,需要对某一个计算域进行patch,可以在此处选择。比如我们可以将蓄水池单独划分成一个计算域,那么这里就可以选择这个计算域。但是如果没有单独划分计算域,这个不需要进行选择。


Registers to Patch:选择需要patch的Registers区域。Registers to Patch和Zones to Patch只能选择一个。Registers区域是指通过Fluent单独定义一个区域。这样可以在不划分计算域的情况下,仍然mark一部分区域


Registers区域的具体操作可参考文章:五十四、Fluent网格自适应详细操作


本例需要mark的区域如下图


点击save/display后可看到被标记的区域。详细操作参考文章五十四、Fluent网格自适应详细操作

 

回到patch界面,Registers to Patch会出现刚才定义的区域pool。


点击patch后,可在后处理查看体积分数云图,满足了我们的初始要求。



溃坝过程模拟


2. UDF初始化

2.1 UDF初始化概念

Patch操作可以辅助标准初始化,给标准初始化打个补丁。但并不能满足所有的要求。有些时候我们的初始物理场并不是打个补丁那么简单。


比如我们知道温度随着海拔高度而降低,此时温度场和高度有关,也就是和y轴坐标有关。无论使用标准初始化还是patch操作都比较难初始化这样的温度场。当然还有更加复杂的符合你的实际情况的初始化场。这时候就需要用UDF来完成初始化。



2.2 DEFINE_INIT 初始化宏


DEFINE_INIT (name, d)只有两个参数,其用法和ADJUST宏类似,参考文章五十八、Fluent UDF调节宏ADJUST


a. name:DEFINE_INIT宏的名称,可以是任意的

b. d:计算域的指针。对于多相流来说,d指针是指向混合域的。由于没有传递cell和thread,因此为了对网格物理量进行操作,需要对计算域d下的线程thread和thread下的网格cell进行遍历。可参考文章:

c. 此函数无返回值

d. DEFINE_INIT函数每次初始化执行一次,只要选择初始化后,会自动执行。



举个例子:让温度场是y轴坐标的函数

T=273+20*y

#include "udf.h"

DEFINE_INIT(my_init_func, d)

{

    cell_t c;

    Thread *t;

    real xc[ND_ND];

    /* 遍历计算域d内的所有线程t */

    thread_loop_c(t, d)

    {

    /* 遍历t下的所有网格 */

        begin_c_loop_all(c, t)

        {

            C_CENTROID(xc, c, t);

            C_T(c, t) = 273.+20*xc[1];

        }

        end_c_loop_all(c, t)

    }

}


2.3 加载DEFINE_INIT

编译型UDF界面如下图,上面有两个框Source Files和Header Files,Source Files表示源文件,就是编写好的UDF文件;




Header Files表示头文件,只有当UDF很复杂,为了使UDF模块化才需要从这里导入头文件。UDF自带了很多头文件如udf.h,但是这些头文件不需要从这里导入。


首先点击Add,选中编写好的UDF后导入,然后点击Build,如果UDF没有问题,则不会出现任何报错信息(只要控制界面有error,则说明有问题)。


在没有报错的前提下,点击Load,则UDF加载成功。关于UDF报错问题,建议大家看看文章四十九、五十和五十一。如果没有报错,控制台应该会显示下面的信息,其中就有各种DEFINE宏的name



和ADJUST宏类似,DEFINE_INIT需要hook使用。如果没有hook,即使加载成功,也不能调用。


点击Function Hooks,会弹出所有需要hooks界面


 

 

 

 

 

 

 

 

 

 

下面的图中包含很多宏,即当使用这些DEFINE宏时,都必须hook才能正常使用。比如DEFINE_EXECUTE_AT_END、DEFINE_INIT等,对于DEFINE_INIT宏,需要先点击Initialization宏的Edit进行设置界面



选中编写好的UDF宏名称,点击Add,宏名称将从左栏转入到右栏,单击OK,则表示hook成功。



hook成功后,我们还是使用刚才的例子,打开能量方程,进入初始化界面,点击标准初始化


 


查看温度云图是否按照UDF的方式初始化成功


温度云图


X=2.5m处温度曲线图


初始化成功,这里提供本文所需的所有文件,包括mesh、cas、dat和udf文件等

下载链接:见附件


来源:Fluent学习笔记

附件

免费七十六、Fluent初始化patch和UDF详解.txt
ACTFluent多相流UDFUM控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-12-19
最近编辑:11月前
Fluent学习笔记
博士 签名征集中
获赞 125粉丝 332文章 136课程 3
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈