Fluent UDF【2】:学习途径
要怎样做才能做到无畏惧编写任何UDF程序?估计很多与UDF打交道的人都会问到这个问题。
面对UDF文档中那众多的宏描述,小伙伴们是不是感觉到茫然无措,不知从何入手。有时候读别人写好的程序感觉并不难,然而自己写的时候总是感觉不对劲。
我们今天就来聊聊UDF到底该怎么学。
关于C语言
Fluent UDF使用C语言,因此要想熟练使用UDF的话,掌握基本的C语言是很有必要的。
市面上C语言的书籍很多,其中有很多的经典教材。然而几乎每一本C语言的书籍都很厚,里面涉及的内容非常的多,如果不是专门搞程序设计的话,想要精通C语言,势必需要花费大量的时间。推荐看一些经典的C语言教材。如下面这本。

其实UDF只是利用了C语言很少的一部分,我们利用UDF,只需要掌握C语言的最核心的内容,包括:
- 基本语法:语法重要性自然不用多说。UDF采用C语言进行编写,自然必须符合C语言基本语法习惯,否则解释和编译都难以通过。C语言的语法很多,可以找一本经典C语言书籍,照着写一两个程序基本就熟悉了。
- 控制结构:包括逻辑控制、循环控制等。虽然说UDF中的控制形式有特别的宏来完成,然而掌握C语言的控制结构更有助于理解UDF中的各种稀奇古怪的循环结构。
- 数组与指针:这个需要重点理解,在UDF中有很多的内置变量类型是数组或指针,不理解的话后面写程序会抓破脑袋。指针也是C语言的特色。
函数与宏:搞清楚C语言函数传值调用与传址调用的区别。尤其是搞明白传址调用,在UDF宏中,好多的传址调用。弄清楚C语言宏定义的方式,这个稍加注意就能够看懂。
其他的也没什么需要去关注的了。关于UDF代码编写
UDF文件可以用任何文本编辑器编写,记事本、写字板都可以。当然如果想要有语法高亮效果的话,可以找一些专业的编辑器。像免费的Notepad++,Atom等,还有其他的要钱的软件如ultraEdit,EditPlus、Sublime text等,都是非常不错的选择。
该如何编写呢?Fluent提供了大量的UDF宏,单单帮助文档里头就有好几百个,当然如果你记忆力超群能够把这些宏的用法全都记住,自然是很不错的。但是大多数人估计是记不住的,幸好UDF手册写得很详细,各种宏的用途及其程序实例都很齐全。因此在实际的代码编写过程中,最简单的做法是根据UDF手册中各种程序实例改写自己的程序代码。UDF的数据操作
UDF的本质工作还是操纵数据,这是所有计算机程序的共性。
那么问题来了。操纵什么数据?数据从哪里来?数据修改之后往哪里去?
很多人觉得UDF难写,其实是没搞清楚上面的三个问题。- 操纵什么数据?这个是最难的,需要些什么数据,这个问不了别人,只有自己才清楚。这里要说的是,当你把要修改的模型数据拿出来之后,需要将其转化为用基本物理量进行表达。我们可以通过查询UDF手册,看看那些数据获取宏能够得到哪些数据。
- 数据从哪里来?有一些数据是通过宏直接获取得到,我们姑且将其称之为基础数据,如要获取压力,单元的压力可以用C_P宏获取,面压力可以用F_P获取。而有些数据则没办法直接通过宏得到,此时我们需要利用基础数据进行代数运算来得到这些值。
数据往哪里去?操纵完毕的数据自然是要返回给Fluent。令人迷惑的是返回的形式,有些宏采用显式方式返回,例如在DEFINE_PROFILE宏中,采用F_PROFILE宏返回数据给Fluent。而有些宏则没有这些显式的返回形式。此时要仔细查阅UDF手册中关于宏的描述。还有一些传址调用也能返回数据。
其实只要搞清楚了这三个问题,UDF并不是什么很难的东西。总结
对于UDF程序的编写工作,总的来说需要注意:
- UDF手册是最主要的参考文档。
UDF的核心工作在于数据处理。
更多CFD资料可微信扫描下方二维码关注微信公众号。

Fluent UDF【2】:学习途径的更多相关文章
- Fluent UDF【1】:简介
前面基本完成了动网格专题的发布,不过还是有一些内容并没有更新进去,比如说in-cylinder.接触检测.2.5D网格重构等.不过这些都是小技巧,写起来挺麻烦,以后有时间再通过案例视频的方式讲解好了. ...
- Fluent UDF【4】:C语言
Fluent UDF利用的是C语言,本文简单介绍在UDF中经常会用到的C语言常识. 本文部分内容来自UDF手册. 1 C语言中的注释 C语言中的注释利用/*及*/来实现.例如: /*这是一个注释*/ ...
- Fluent UDF【8】:编译型UDF
UDF除了可以以解释的方式外,其还可以以编译的方式被Fluent加载.解释型UDF只能使用部分C语言功能,而编译型UDF则可以全面使用C语言的所有功能. 1 编译型UDF介绍 编译型UDF的构建方式与 ...
- Fluent UDF【7】:解释型UDF
UDF宏有两种方式可以被Fluent所接受:编译和解释.其中有一些宏既可以被解释也可以被编译,而一些宏则只能被解释.有一些场合只接受编译后的UDF(如动网格中的一些宏),而有些场合既可以接受编译的UD ...
- Fluent UDF【6】:预处理命令
今天要讲的内容是关于C语言的预处理.搞清楚了这个,就可以分析UDF中的各种头文件源代码,从此写UDF不求人. 1 关于预处理 在UDF的各种头文件中(文件路径D:\Program Files\ANSY ...
- Fluent UDF【5】:第一个UDF
这里以一个简单的初始化案例来描述UDF的使用过程. 0 Fluent中的Patch Fluent中提供了全域初始化以及局部Patch功能.对于整体区域的全局初始化可以采用starndard及hybri ...
- Fluent UDF【3】:环境配置
windows操作系统下UDF的编译需要借助Visual Studio中的C编译器.因此若要想编译UDF,则必须事先配置好编译环境. Visual Studio Visual Stuido(后面简称V ...
- 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 ...
- Fluent——UDF监测指定点的物理量
Fluent版本:19.0 Fluent当中提供了监测某一点物理量随迭代次数或者随时间变化的功能,下面我们就介绍如何在UDF当中实现相同的功能,并且UDF更加灵活,通过UDF的方式我们在知道某点运动规 ...
随机推荐
- 特殊字符导致json字符串转换成json对象出错
在对数据库取出来的数据(特别是描述信息)里面含有特殊字符的话,使用JSON.parse将json字符串转换成json对象的时候会出错,主要是双引号,回车换行等影响明显,左尖括号和右尖括号也会导致显示问 ...
- [转]URL汉字编码问题(及乱码解决)
一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址 “http://www.ab ...
- Spring Cloud Eureka集群 动态扩展新节点
场景描述: Eureka的集群节点有两个,互相注册形成集群,已经支持动态刷新(不知道怎么让Eureka支持动态刷新的可以参考http://www.cnblogs.com/flying607/p/845 ...
- Spark ML 几种 归一化(规范化)方法总结
规范化,有关之前都是用 python写的, 偶然要用scala 进行写, 看到这位大神写的, 那个网页也不错,那个连接图做的还蛮不错的,那天也将自己的博客弄一下那个插件. 本文来源 原文地址:htt ...
- 事务的四个属性ACID
事务四大特征:原子性,一致性,隔离性和持久性. 1. 原子性(Atomicity) 一个原子事务要么完整执行,要么干脆不执行.这意味着,工作单元中的每项任务都必须正确执行.如果有任一任务执行失败,则整 ...
- java面试题--实现一个百亿的计算器
看了网上很多说法,没有具体把它实现的,我试了一下其实还是比较简单的. 直接看代码: package com.infomorrow; import java.math.BigInteger; impor ...
- winetricks 用WineTricks令你的Wine更完整
Linux下最有名的Windows环境模拟器就是WINE了.它提供了一个可以模拟WINDOWS环境的基本平台,在这上面你几乎可以运行任何你想运行的windows程序. 什么?你不相信?不要告诉我你的程 ...
- ROS学习(八)—— 理解ROS服务和参数
一.ROS 服务 服务(services)是节点之间通讯的另一种方式.服务允许节点发送请求(request) 并获得一个响应(response) 二.rosservice 1.用途 rosservic ...
- 重整ADO.NET连接池相关资料
https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.connectionstring(VS.80) ...
- 安卓高手之路之ClassLoader(三)
由于看C++和C代码看得很累,很辛苦.上一章终于解脱到java代码中来了. 第一个getClassLoader发生在main的preload方法中, public static void main(S ...