Fluent管路水锤模拟—UDF

上篇文章我们模拟了当管路阀门关闭时的水锤情况,我们使用了以下表达式来控制阀门关闭:

IF (t<0.2[s],2[m/s],0[m/s])

这个if表达式的意思是当时间小于0.2秒的时候,水流速度为2m/s,当时间为0.2秒的时候,流速减为零,我们知道在实际工程应用中,阀门不可能瞬间关闭,中间是需要一定时间的。

为了控制阀门关闭时间,我们需要使用UDF来控制流速。UDF(User Defined Function)是Fluent提供的一种代码,允许用户用C语言编写函数,来定义自己的边界条件、材料属性和流态的源项,以及指定自定义模型参数(例如 DPM、多相模型)、初始化解决方案或增强后处理。

现在有了AI,可以很容易让大模型生成UDF的代码。以下代码由chatgpt3.5生成,要求在时间在0.2秒内速度为2m/s,然后在0.1秒内速度减为0。


#include "udf.h"

DEFINE_PROFILE(velocity_inlet, thread, position)
{
    real t = CURRENT_TIME;
    real u_inlet;

    /* Define velocity profile over time */
    if (t <= 0.2)
    {
        u_inlet = 2.0; /* Maintain velocity at 2 m/s for t <= 0.2 seconds */
    }
    else if (t <= 0.3)
    {
        u_inlet = 2.0 - 20.0 * (t - 0.2); /* Linear reduction from 2 m/s to 0 m/s over 0.1 second */
    }
    else
    {
        u_inlet = 0.0; /* Maintain velocity at 0 m/s after t > 0.3 seconds */
    }

    face_t f;
    begin_f_loop(f, thread)
    {
        F_PROFILE(f, thread, position) = u_inlet;
    }
    end_f_loop(f, thread)
}

不难看出,控制速度的函数是一个线性函数y = 2-2*(x-0.2)。

在项目目录下打开记事本,复制以上代码,存为后缀名为.c的文件。

在Fluent菜单找到User-Defined,然后在Functions下面找到Compiled(编译文件)。

图片

点击Add添加,并点击Build,我这里选择了内置的编译器,外置编译器为Visual Studio,但是有时候会报错。

图片

编译成功后控制台会提示以下消息:

图片

最后点击Load关闭对话框,注意如果代码发生改动,每次要重新编译一下。

来到边界条件的速度出口,选择udf。

图片

在报告中新建出口的速度数值用来监测:

图片

同之前一样,0-0.2秒采用大步长,0.2秒后减少步长观测水锤效应。

运行结果:

速度由初始值减到0(这里显示的平均速度,2m/s为最大速度)

图片

管子末端峰值压强为0.2MPa(29Psi)

图片

有意思的是阀门完全关闭后,管路产生了第二个压力波:

图片

让我们把关闭时间延长到0.5s。

图片

管子末端最大压强为0.12MPa(17psi)。基本上是没有什么水锤了。

图片

水管中段压力变化:

图片

从以上模拟结果我们不难得出,水锤现象虽然可怕,但也不是完全无法避免,一个非常有效的方法是通过优化阀芯设计,延长其关闭时间就可以有效减小水锤产生的峰值压力。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注