前面基本完成了动网格专题的发布,不过还是有一些内容并没有更新进去,比如说in-cylinder、接触检测、2.5D网格重构等。不过这些都是小技巧,写起来挺麻烦,以后有时间再通过案例视频的方式讲解好了。从今天开始最近一段时间准备发布Fluent UDF的一些内容。

关于UDF

UDF并不是什么神秘的东西,然而在地球人的眼中,凡是与编程相关的工作,总是认为有点儿高大上罢了。其实UDF程序的编写绝对只是个体力活儿。

Fluent是一个通用软件。所谓的通用软件,意思就是说啥事儿都能做。能做流动,能做传热,能做化学反应,能做多相流,貌似与NS相关的内容都能做。然而,无所不能往往也意味着不甚精通。软件为了满足其通用性,无疑在各种参数的选取上偏于保守,比如说各种求解算法、各种模型参数,为了保证其收敛性和鲁棒性,必然会存在舍弃精度的做法。因此,通用的软件常常难以满足高级人士的计算需求。

作为商用软件,Fluent自然不愿意损失这些高级用户,因此软件给高级用户开了一扇窗口,允许用户根据自己的需求对软件进行一定程度的定制。因此就有了我们这里所说的UDF。

UDF(User Defined Functions,用户自定义功能),采用C语言进行编写,可以采用编译或解释的方式加载到Fluent中,利用UDF可以对Fluent计算过程中的一些模型参数或计算流程进行控制。

从哪儿开始?

要使用UDF,该如何入手?

Fluent帮助文档中提供了较为详尽的UDF使用方法,包含了绝大多数宏的使用描述(其实还有一部分宏并没有出现在文档中,亲们可以通过研读代码中的注释来使用这些用,见udf.h文件)。在编写UDF的过程中,UDF手册是必不可少的文档。

实际上UDF的应用过程是这样的:

  • 发现需要使用UDF。Fluent毕竟是一款成熟的商用软件,大多数情况下,利用GUI就能够满足我们的计算要求。只有当我们确信Fluent的GUI并不具备某项功能,而利用UDF可以满足此要求时,才开始着手编写UDF。记住:能用GUI实现的功能,就不要用UDF去做。人家Fluent说了,不对UDF的正确性负责,他们只负责UDF与Fluent的通讯功能。能不能用UDF实现某项功能,需要翻越Fluent帮助文档。
  • 编写UDF文件。这部分工作应该是UDF的核心工作。作为一个计算机程序,UDF同样有输入和输出。在翻越UDF手册的时候,搞清楚宏文件中哪些参数是输入,哪些参数是输出。最简单的方式就是直接套用UDF手册中的示例程序,在其基础基础上进行修改。
  • 配置UDF环境。这部分工作实际上相当的简单。只不过在windows环境下需要安装Visual Studio,在Linux环境下需要配置GCC。需要注意在安装Visual Studio的时候一定要选择安装C++,否则不会安装c编译器。
  • 在Fluent中加载UDF。加载的方式可以是解释,也可以是编译。通常解释型的程序调用要比编译型的慢,因此一些计算密集的场合,建议使用编译型。

需要的C语言知识

编写UDF使用的是C语言,我们是不是需要先学习C语言?

了解C语言是必要的,但并不需要非常精通C语言。UDF宏的编写实际上只是应用了C语言很少的一部分,但是对C语言的越熟悉,当然写起UDF来自然要更轻松一些。如果对C语言一无所知的话,至少需要看看以下的内容:

  • C语言的语法结构。包括变量定义方式、条件结构、循环结构、函数定义等。
  • C语言的数据结构。最需要了解是数组和指针。另外还需要了解函数参数传值与传址,否则很多的UDF宏你都搞不清楚数据怎么就能传递给Fluent。

这些基础知识后面会介绍。

要坚信UDF并没有想象中那么难,其实也没有想象中的那么高大上


更多CFD资料可微信扫描下方二维码关注微信公众号。

Fluent UDF【1】:简介的更多相关文章

  1. Fluent UDF【4】:C语言

    Fluent UDF利用的是C语言,本文简单介绍在UDF中经常会用到的C语言常识. 本文部分内容来自UDF手册. 1 C语言中的注释 C语言中的注释利用/*及*/来实现.例如: /*这是一个注释*/ ...

  2. Fluent UDF【2】:学习途径

    要怎样做才能做到无畏惧编写任何UDF程序?估计很多与UDF打交道的人都会问到这个问题. 面对UDF文档中那众多的宏描述,小伙伴们是不是感觉到茫然无措,不知从何入手.有时候读别人写好的程序感觉并不难,然 ...

  3. Fluent UDF【8】:编译型UDF

    UDF除了可以以解释的方式外,其还可以以编译的方式被Fluent加载.解释型UDF只能使用部分C语言功能,而编译型UDF则可以全面使用C语言的所有功能. 1 编译型UDF介绍 编译型UDF的构建方式与 ...

  4. Fluent UDF【7】:解释型UDF

    UDF宏有两种方式可以被Fluent所接受:编译和解释.其中有一些宏既可以被解释也可以被编译,而一些宏则只能被解释.有一些场合只接受编译后的UDF(如动网格中的一些宏),而有些场合既可以接受编译的UD ...

  5. Fluent UDF【6】:预处理命令

    今天要讲的内容是关于C语言的预处理.搞清楚了这个,就可以分析UDF中的各种头文件源代码,从此写UDF不求人. 1 关于预处理 在UDF的各种头文件中(文件路径D:\Program Files\ANSY ...

  6. Fluent UDF【5】:第一个UDF

    这里以一个简单的初始化案例来描述UDF的使用过程. 0 Fluent中的Patch Fluent中提供了全域初始化以及局部Patch功能.对于整体区域的全局初始化可以采用starndard及hybri ...

  7. Fluent UDF【3】:环境配置

    windows操作系统下UDF的编译需要借助Visual Studio中的C编译器.因此若要想编译UDF,则必须事先配置好编译环境. Visual Studio Visual Stuido(后面简称V ...

  8. Serial Fluent UDF on Windows

    test test Table of Contents 1. Serial UDF on Windows OS 1 Serial UDF on Windows OS Note: Udf has to ...

  9. Fluent——UDF监测指定点的物理量

    Fluent版本:19.0 Fluent当中提供了监测某一点物理量随迭代次数或者随时间变化的功能,下面我们就介绍如何在UDF当中实现相同的功能,并且UDF更加灵活,通过UDF的方式我们在知道某点运动规 ...

随机推荐

  1. Jquery的html方法里包含特殊字符的处理

    jqueryhtml()特殊字符 在使用jquery的html()方法时,有时候里面添加的html代码含有一些特殊字符,需要进行转义. 如下例子: inst_html = "<a st ...

  2. Gson转换json数据为对象

    可以通过Gson使用两种方法,将json字符串转换为对象,以下面该段报文做测试 { "id": 84041462, "lastName": "小华&q ...

  3. Javascript调试利器console的使用

    一.Console API Console.assert() 判断第一个参数是否为真,false的话抛出异常并且在console输出相应信息. Console.count() 以参数为标识记录调用的次 ...

  4. libev ev_init分析

    /* these may evaluate ev multiple times, and the other arguments at most once */ /* either use ev_in ...

  5. 在 Linux 平台中调试 C/C++ 内存泄漏方法(转)

    由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误.同时,内存错误往往非常严重,一般会带来诸如系统崩溃,内存耗尽这样严重的后果.本文将从静态分析和动态检测两 ...

  6. linux下开启https

    1.在线安装mod_ssl yum -y install mod_ssl 查看openssl 是否安装成功 rpm -qa |grep openssl 2.建立服务器密钥 openssl genrsa ...

  7. Android——检测TXT文件中是否含有双字节字符

    在读取双字节字符时,主要涉及到编码的选取: public static boolean isRightfulTXT(File f) { // TODO Auto-generated method st ...

  8. 解决安装Egit时Egit Mylyn和org.eclipse.team.core报错

    为了让Aptana支持GitHub,需要安装Egit,但在的时候碰到两个错误,一个是关于缺少EGit Mylyn另一个是缺少org.eclipse.egit.import.feature.group. ...

  9. PHP中数字检测is_numeric与ctype_digit的区别介绍

    PHP中的两个函数is_numeric和ctype_digit都是检测字符串是否是数字,但也存在一点区别 is_numeric:检测是否为数字字符串,可为负数和小数 ctype_digit:检测字符串 ...

  10. span的赋值与取值

      1.<span id="span_id">span的文本</span>的取值. js取<span>的值并不是用document.getEle ...