UDF中需要了解的常识

        本人是CFD入坑不久,主要用于记录自己在学习过程中学习到的干货,在此要感谢所有愿意分享自己宝贵经验的CFD大神们。

        如有疑问可以留言,大家可以一起交流,共同攻克!

前情提要:

        1、UDF出现错误,Fluent会显示错误代码,即error code:****,可以在网上搜错误代码寻找解决办法;

        2、UDF是通过宏(组命令)来完成的;

        3、UDF中的传址调用:把参数B的存储地址传给A,使得这两个参数的指针指向同一个地址;

        4、编辑器:VS、VScode等;

        5、UDF中变量用的是国际单位;(特殊情况:气体常量的单位)

        6、Fluent版本不同时,UDF需要重新加载;

        7、UDF默认使用串行;

  基本知识:

 一、基本数据类型

        1、UDF支持的数据类型: int long float double char real;

                其中real=double(双精度求解器)/real=float(单精度求解器)

        2、C语言中所有变量在使用前都必须定义(创建变量+变量类型);

             全局变量---可以被源文件中所有函数使用;

             局部变量---只在函数体内起作用,在函数外无法起作用;

        3、数组,name--变量名称,size--数组里存储的单元数量,从0开始;

        4、指针:存储变量内存地址的变量(指向另外一个变量的内存地址)

int *ip  //指针变量ip,可以利用取地址运算符,将其余变量的地址赋给指针变量,也可以赋值

                当指针作为函数的参数,为传址调用;在函数体内,修改指针参数的值,则调用函数时相应参数的值也会改变,后面会补充UDF的例子便于理解。

二、常用语句(具体回顾C语言)

        1、if语句

        2、循环语句(for/while)

 三、UDF的类型

        引用自胡坤老师

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

1、解释型UDF

        解释型UDF不需要额外的编译器,利用Fluent软件自身即可解释源代码。在解释过程中,UDF源代码被C预处理器解释成中间的,独立于计算机体系之外的机器代码。之后在调用UDF的过程中,这些被解释器生成的机器代码将在内部仿真器或解释器上被执行。当然,这种以解释的方式运行无可避免的会损失计算性能。但是以解释方式运行的UDF有个好处:其可以不加修改的在不同体系的计算机上、不同的操作系统以及不同的Fluent版本中运行。

        在UDF被解释后保存cas文件,之后再打开cas文件时,UDF能够直接被加载,而无需重新解释。

        注意:当UDF的计算性能很重要时,建议以编译的形式运行UDF。所有解释型UDF都可以以编译的方式被Fluent加载。

 2、编译型UDF

        编译型UDF则可以全面使用C语言的所有功能。编译型UDF的构建方式与ANSYS Fluent可执行文件自身的构建方式相同。在代码构建过程中,其利用一个名为Makefile的脚本文件来调用C编译器构建一个目标代码库。该对象库与其编译过程中所使用的Fluent版本及计算机体系结构相关。因此,若改变了计算机操作系统或Fluent版本的话,UDF对象库必须重新构建。UDF的编译过程通常涉及到源代码的编译和加载两个步骤。

        编译软件推荐VS、VScode等;

 四、UDF中的网格结构与数据类型                       

                 这张图来自FLUENT帮助文档,没有帮助文档可以通过网盘下载。

链接:https://pan.baidu.com/s/1c9nX1vx29IQmdCkeakUnSA?pwd=wxez 
提取码:wxez 

注意:2d和3d情况下部分定义不同                

node---网格节点;                cell---网格单元;                face---网格面;                edge---网格边;

node thread---网格节点集合;        face thread---网格面集合;       cell thread---网格单元集合;

cell center---网格中心; 

domain---域、相(包含了网格节点、网格面以及网格单元的集合);

 可以理解为domain>thread>其余定义

数据类型(所有ANSYS Fluent数据类型都是区分大小写的。)

Node:一种结构数据类型,用于存储与网格点相关的数据。结构数据即一批数据组合而成。

face_t:一种整数数据类型,在一个面线程中标识一个特定的面。

cell_t:一种整数数据类型,用于标识单元格线程中的特定单元格。

Thread:一种结构数据类型,用于存储它所表示的网格单元或网格面所共有的数据。在Thread数据类型中,有一个指针数组(存储),每个指针指向特定变量(如压力、速度或梯度)的网格单元或网格面。在该指针数组中,用于标识指向特定变量数组(网格单元或网格面)的指针的索引类型Svar。在多相流问题中,每一相及混合相都有一个单独的Thread结构。这里不多做解释,后面在多相流的章节,继续探讨。

Svar:用于标识线程存储中的指针的索引

Domain:一种结构数据类型,用于存储与网格中的节点、面和单元线程集合相关联的数据。在多相流问题中,每一相及混合相都有一个单独的Domain结构。这里不多做解释,后面在多相流的章节,继续探讨。

Thread限定于cell/face/node,Domain是各个Thread的集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值