五十七、Fluent UDF自定义材料物性参数

2023-11-12

1. 材料属性的设置

有两种方式可以自定义材料的属性参数,第一种材料下拉框选择,第二种UDF自定义函数。

我们这次主要介绍第二种方式,通过UDF的方式自定义材料属性。之前有两篇文章介绍过UDF的基础UDF DEFINE _PROFILE宏

自定义材料属性的define宏主要是DEFINE_PROPERTY,除此之外如果需要定义扩散系数,还需要使用DEFINE_DIFFUSIVITY宏。

扩散系数一般是打开组分输运方程,或者使用UDS才需要定义。

2. DEFINE_PROPERTY宏的用法

我们详细说说DEFINE_PROPERTY宏的使用,同时给出几个例子

2.1 物性参数

DEFINE_PROPERTY宏可以定义的物性参数如下:

• density (as a function of temperature):密度

• viscosity:粘度

• thermal conductivity:导热系数

• absorption and scattering coefficients:吸收系数和散射系数

• laminar flame speed:层流火焰速度

• rate of strain:应变率

• frictional modulus (Eulerian model):摩擦模量

• elasticity modulus (Eulerian model):弹性模量

• heat transfer coefficient (Mixture model):传热系数

• particle or droplet diameter (Mixture model):液滴直径

······················

注:

a. DEFINE_PROPERTY宏可定义大多数的物性参数,上面只是列举出一部分。当需要定义物性参数时,首选DEFINE_PROPERTY宏

b. 扩散系数需要使用DEFINE_DIFFUSIVITY宏定义

c. 比热容需要使用DEFINE_SPECIFIC_HEAT宏定义

2.2 DEFINE_PROPERTY的用法

DEFINE_PROPERTY (name, c, t)

name:udf的名字,随便起,只要符合c语言变量命名规则即可。比如Ergouzi,xiaoerhua。建议取表示物性的单词作为名字density、viscosity等

c:网格变量cell,返回网格的编号值。其实就是一个整数,看过Fluent UDF为所欲为的后门这篇文章的应该印象深刻些

t:线程thread,是一个结构体,包含一些列cell、face等。

返回值return:real类型,返回物性参数值

注:

a. c和t都是这个宏从fluent中取出来给用户使用的,不需要任何的定义,直接可以使用c和t

b. 由于DEFINE_PROPERTY 宏已经给用户传递了c和t,因此使用这个宏不需要遍历thread,也不需要遍历网格。也就是说不需要使用loop宏,直接对c进行操作即可。

c. 与之相对的,如DEFINE_ADJUST宏,没有传递c和t,因此必须要先遍历thread或者查找thread,然后再遍历网格。

3. DEFINE_PROPERTY示例

3.1 粘度定义

定义粘度viscosity,当温度大于288K,粘度等于5.5e-3;当温度小于286K,粘度等于1.0;否则粘度等于温度T的函数。

UDF代码如下:

#include "udf.h"

DEFINE_PROPERTY(cell_viscosity,c,t)

{

    real mu_lam;

    real temp = C_T(c,t);

    if (temp > 288.)

        mu_lam = 5.5e-3;

    else if (temp > 286.)

        mu_lam = 143.2135 - 0.49725 * temp;

    else

        mu_lam = 1.;

    return mu_lam;

}

解释一下:

real mu_lam;

//声明了一个real变量,其实就是c语言的float类型,只不过real可以自动改变单精度还是双精度。mu_lam是变量名称,可随意命名。

real temp = C_T(c,t);

//声明了一个real变量,并且赋值。temp即变量名,使用C_T宏给其赋值。

//C_T宏用于获取网格温度,括号中的c和t即是DEFINE_PROPERTY(cell_viscosity,c,t)中的c和t。两者必须一致,要改都改。

if (temp > 288.)

     mu_lam = 5.5e-3;

else if (temp > 286.)

     mu_lam = 143.2135 - 0.49725 * temp;

else

     mu_lam = 1.;

//if else语句,根据温度值来确定粘度值。288.为什么要加一个点,如果不加点则表示整型,加点表示浮点型,其实就是288.0。如果不是整型,即使是整数最好也要写成小数形式,否则会出现一些很难察觉到的错误。

return mu_lam;

//返回mu_lam值,这个值会自动传递给Fluent的物性参数,对于DEFINE_PROPERTY宏,必须要有返回值,返回就是自己设置的物性参数。

3.2 表面张力系数定义

表面张力系数定义为温度的函数,sur_ten=1.35 - 0.004*T + 5.0e-6*T*T

UDF代码如下:

#include "udf.h"

DEFINE_PROPERTY(sfc,c,t)

{

    real T = C_T(c,t);

    return 1.35 - 0.004*T + 5.0e-6*T*T;

}

直接以表达式的形式返回物性参数

3.3 密度和时间相关

这里仅仅是演示,实际上我们的物性更多是和压力温度有关,和时间没有关系。这里为了说明UDF的灵活性,简单演示。

假设当流动时间小于1s,密度为1000kg/m3;流动时间大于等于1s,密度为1kg/m3。

UDF代码如下:

#include "udf.h"

DEFINE_PROPERTY(den_time,c,t)

{

    real density;

    real current_time;

    current_time = CURRENT_TIME; 

    if(current_time<1.0)

    {

        density=1000.0;

    }

    else

    {

        density=1.;

    }

    return density;

}

逻辑很简单,这里只说明一点。

current_time = CURRENT_TIME; 

//CURRENT_TIME是fluent中的一个宏,也可以认为是一个变量,返回当前的流动时间。

4. UDF的编译与加载

两种UDF编译的方式,参考文章四十九、Fluent UDF编译正确的流程。可分为Interpreted和Compiled。

对于解释型Interpreted,优点是简单、方便,缺点是很多高级宏不适用。因此建议大家不要使用解释型编译UDF。

这里还是简单说一下,下图为解释型界面,直接点击Browse,选中写好的UDF,然后点击Interpret即可。如果UDF没问题,则不会出现报错信息。

编译型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

5. UDF的使用

不同的DEFINE宏,UDF的使用方式不同。对于DEFINE_PROPERTY宏,定义材料的物性参数。因此使用时,直接在材料物性界面选中即可

Materials--Fluid--air

比如需要修改air的粘度,在Viscosity处选择user-defined,会弹出右图,然后选中DEFINE的name就行,点击OK。

五十七、Fluent UDF自定义材料物性参数DEFINE_PROPERTY 宏已经给用户传递了c和t,因此使用这个宏不需要遍历thread,也不需要遍历网格。也就是说不需要使用loop宏,直接对c进行操作即可https://mp.weixin.qq.com/s/J-kww_8_-KhTSrUSLkj7lA

 以上案例的cas和dat文件均可以免费获取,需要的朋友,只需要点赞关注收藏一键三连后私信我即可哦 
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

五十七、Fluent UDF自定义材料物性参数 的相关文章

  • Fluent 三种初始化使用方法

    文章目录 Fluent 三种初始化使用方法 xff08 初始化即赋初值 xff09 1 赋值初始化a 混合初始化 xff1a b 标准初始化 xff1a c FMG初始化 xff1a 2 patch xff08 补丁 xff09 初始化 F
  • Tecplot绘制流体后处理图的问题

    使用的软件为Tecplot Chorus 2017 R3 来处理Fluent17 0的流体仿真数据 看了点击打开链接的官方文档 一直没有搞清楚什么样的格式可以像他给出的一样做多组数据的对比 一开始导入fluent计算产生的data文件 发现
  • Fluent NHibernate 多对一映射

    我是休眠世界的新手 这可能是一个愚蠢的问题 但我无法解决它 我正在测试表的多对一关系并尝试插入记录 我有一个部门表和员工表 员工和部门在这里是多对一的关系 我正在使用 Fluent NHibernate 添加记录 以下所有代码 请帮忙 SQ
  • NHibernate Fluent 和命名查询

    我正在使用 Nhibernate 和 Fluent 现在我想调用一些存储过程并使用命名查询 我创建了一些 xml
  • 流畅的 NHibernate - HasManyToMany NHibernate.MappingException:集合映射中的重复列

    我是一名 NHibernate 新手 尝试使用 Fluent NHibernate 配置现有数据库 问题在于多对多映射 在此示例中以图书馆和书籍为代表 我想这应该是非常基本的东西 但我得到以下例外 FluentNHibernate Cfg
  • Laravel 4 - 分页忽略 Fluent 中的不同

    我以清晰和分页的方式提出流畅的请求 我的问题是分页请求在不同的请求之前执行 我的流利要求 candidates DB table candidates gt select candidates gt distinct gt join can
  • FluentNHibernate 字典映射

    使用 Fluent NHibernate 映射简单 Dictionary 属性的最佳方法是什么 public class PersistedData public virtual IDictionary
  • 如何使用接口将composite-id 映射到流畅的nhibernate?

    我正在尝试切换出去 hbm映射到流式映射 并且复合 ID 的映射和接口的使用存在问题 该类如下所示 public class ClassWithCompositeId public virtual IKeyOne KeyOne get se
  • Fluent NHibernate (1.2.0.712) 导出到 HBM 的映射不起作用/不遵守约定

    Fluent NHibernate中的HBM导出功能似乎不起作用 如果我调用 FluentMappingsContainer ExportTo 生成的映射将不正确 并且出现以下异常 FluentNHibernate Cfg FluentCo
  • [DataType(DataType.EmailAddress)] 在 Fluent api 中有对应的部分吗?

    如果没有记错的话 DataAnnotation 的对应部分 DataType DataType Currency 在 Fluent api 中是modelBuilder Entity
  • jit 会优化新对象吗

    我创建这个类是为了不可变并且具有流畅的 API public final class Message public final String email public final String escalationEmail public
  • Fluent NHibernate:混合自动映射和手动映射

    如果使用 Fluent NHibernate 是否可以自动映射大多数类 但指定应使用常规 Fluent API 映射几个特定类而不是自动映射 如果是这样 有人可以向我指出一些示例代码来展示如何做到这一点吗 Thanks 有可能的and容易混
  • OR 条件的流畅断言

    我正在尝试为以下条件设置流畅的断言 但找不到带有表达式的方法或带有 Or 的对象断言 我必须检查我的服务状态是否具有枚举值Pending or Active services Should HaveCount totalServices A
  • 用于本地化的流畅 NHibernate 映射

    我正在尝试从 NHibernate 映射构建数据库 但遇到了问题 我有许多具有本地化字符串值的类 public class MyClass1 public virtual int Id get set public virtual Shor
  • 在数据库中存储枚举值的最佳方法 - String 或 Int

    我的应用程序中有许多枚举 在某些类中用作属性类型 将这些值存储在数据库中的最佳方式是什么 作为字符串还是整数 仅供参考 我还将使用 Fluent Nhibernate 映射这些属性类型 示例代码 public enum ReportOutp
  • 流畅的 NHibernate 获取视图,无需唯一标识符

    我正在尝试映射没有标识符的视图 但 nhibernate 仍然生成带有 id 列的 sql 给我一个 sql 错误 因为数据库中不存在 ID 列 也许我误解了 Id 构造函数 构造函数注释 创建一个在域对象中没有对应属性的Id 或数据库中的
  • Java 中的通用 Fluent Builder

    我知道也有过类似的问题 但我还没有看到我的问题的答案 我将用一些简化的代码来展示我想要的东西 假设我有一个复杂的对象 它的一些值是通用的 public static class SomeObject
  • Fluent NHibernate 映射可空枚举

    我需要在我的类中映射一个可为空的枚举 但出现异常 NHibernate PropertyAccessException 无效的转换 检查您的映射是否属性类型不匹配 App Model Stock 的 setter gt System Inv
  • 是否有任何库可以将 SQL 查询表示为 Java 代码中的对象? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有任何库可以用来将 SQL 查询表示为 Java 中的对象 在代码中 我有大量 java l
  • 如何在 Laravel 4 中使用参数和 CASE 语句进行更新查询

    我正在尝试创建带有参数的 mysql UPDATE 查询 此外 如果字段不为空 我想附加到字段的末尾 为此 我使用 CASE 语句 这是我对学说的疑问 来自 silex query UPDATE table SET filed CASE W

随机推荐

  • winform 程序的配置文件——App.config

    winform 程序的配置文件 App config Posted on 2005 09 26 17 11 sashow 阅读 668 评论 3 编辑 收藏 引用 网摘 所属分类 c 编程 在做 web 项目的时候 我一直在用 web co
  • 机器学习——1.Sklearn:特征工程

    目录 scikit learn数据集API介绍 sklearn小数据集 sklearn大数据集 sklearn数据集的使用 数据集的划分 特征工程 特征抽取 特征提取 特征提取API 字典特征提取 文本特征提取 中文文本特征值抽取 停用词
  • 线程池和连接池

    线程池 1 流程 先启动若干数量的线程 并让这些线程都处于睡眠状态 当客户端有一个新请求时 就会唤醒线程池中的某一个睡眠线程 让它来处理客户端的这个请求 当处理完这个请求后 线程又处于睡眠状态 2 作用 线程池作用就是限制系统中执行线程的数
  • Android MD5加密算法

    Android MD5加密算与J2SE平台一模一样 因为Android 平台支持 java security MessageDigest这个包 实际上与J2SE平台一模一样 算法签名 String getMD5 String val thr
  • IDEA连接MySQL

    今天使用IDEA连接MySQL时 遇到了很多问题 寻找了一个多小时终于把解决了 写篇博客记录记录 帮后来人节约时间 首先是参照其他帖子不断寻找Database视图 找了小半天才发现这个在IDEA中社区版是没有的 需要下载IDEA 的Ulti
  • 【allegro 17.4软件操作保姆级教程一】软件操作环境设置

    文中截图为16 6的软件截图 16 6与17 4的操作逻辑基本相同 大家无需担心 后续文章会使用17 4的截图 1操作环境准备1 1单位设置 可以将全局单位设置为mil 精度改为2位 也可以设置为mm 这时精度改为4位 这个根据习惯而定 操
  • PyTorch学习笔记(21) ——损失函数

    0 前言 本博客内容翻译自纽约大学数据科学中心在2020发布的 Deep Learning 课程的Activation Functions and Loss Functions 部分 废话不多说 下面直接开始吧 1 损失函数 本文是PyTo
  • 在Unity开发中使用 Rider

    Unity开发中使用Rider 环境 Windows Unity 2017 JetBrains Rider 2018 3 4 作为Windows和Visual Studio的拥趸 我是多么推崇Visual Studio 开发Unity使用
  • JS和Java实现链表类的基本功能

    综合网上实例 参考 http www 2cto com kf 201204 126773 html JavaScript实现参考 http m blog csdn net blog caiwenfeng for 23 8496029 Jav
  • 【C++入门到精通】C++入门 —— deque(STL)

    阅读导航 前言 一 deque简介 1 概念 2 特点 二 deque使用 1 基本操作 增 删 查 改 2 底层结构 三 deque的缺陷 四 为什么选择deque作为stack和queue的底层默认容器 总结 温馨提示 前言 文章绑定了
  • STL之序列式容器

    STL之序列式容器 STL容器即是将运用最广的一些数据结构实现出来 根据其在容器的排列特性 将其分为序列式容器和关联是容器 本文主要记录序列式容器 以及其常用的功能函数 1 vector vector和数组一样维护了一个连续的线性空间 ve
  • 第十二届蓝桥杯省赛 Java B组 试题 G: 最少砝码

    一 问题描述 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意小于等于 N 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入包含一个正整数 N 输出一个整数代表答案 7 3 二 解析 用贪心的
  • CentOS7 linux怎么安装xfce 桌面

    如何安装xfce桌面 首先 yum update yum grouplist yum install epel release y 安装第三方源 yum groupinstall X window system 安装X window yum
  • Niginx的介绍及安装

    Niginx的介绍及安装 前言 一 Nginx是什么 二 Nginx安装使用步骤 前言 随着一个应用程序的访问量越来越庞大 对数据库的访问量也随之增强 而单个服务器的承受能力是有限的 这时就需要增加多个服务器 但是我们如何保证所有访问分摊到
  • 门控时钟及其思考

    这篇文章学习所谓的门控时钟 门控时钟有两种 与门控时钟和或门控时钟 1 与门控时钟 门控时钟结构 低电平选通的锁存器 一个与门 保证了经过与门的使能信号不会在时钟高电平的时候翻转 从原理上消除了由于使能信号的不确定性导致门控时钟产生毛刺的情
  • 第一章初识R语言

    1 1 R扩展包的安装与载入 1 在线安装 例如 需要安装 class 这个扩展包 则输入命令install package class 执行即可 也可以同时安装多个包 例如 需同时安装 class 和 cluster 两个包 则输入命令i
  • shader从入门到精通——(二)三大主流编程语言

    shader language 1 基于OpenGL的OpenGL Shading Language 简称GLSL 2 基于DirectX的High Level Shading Language 简称HLSL 3 基于NVIDIA公司的C
  • OCX控件在web页面不能加载的问题

    1 问题描述 写了个OCX 在本地静态html文件里加载 双击用IE打开 能够正常加载OCX控件 调用其方法也正常 把测试的html文件放入apache目录 通过IE 敲入localhost访问也正常 但是部署到服务器上 通过客户端PC访问
  • SQL中去重的三种方式

    SQL去重是数据分析工作中比较常见的一个场景 在 MySQL 中通常是使用 distinct 或 group by子句 但在支持窗口函数的 sql 如Hive SQL Oracle等等 中还可以使用 row number 窗口函数进行去重
  • 五十七、Fluent UDF自定义材料物性参数

    1 材料属性的设置 有两种方式可以自定义材料的属性参数 第一种材料下拉框选择 第二种UDF自定义函数 我们这次主要介绍第二种方式 通过UDF的方式自定义材料属性 之前有两篇文章介绍过UDF的基础和UDF DEFINE PROFILE宏 自定