首页/文章/ 详情

Ansys Fluent边界条件自定义设置(二) ——Fluent Expressions(上)

1天前浏览12

           
IDAJ中国          

           


来自:IDAJ中国Ansys技术团队 徐淑君

更多资料/视频:产品专栏/Ansys


随着仿真工况的日益复杂,在数值模拟中经常会遇到一些无法在界面上直接赋值的边界条件,比如按一定空间位置排列,随时间变化,或和某个变量相关等等。越来越多的工程师希望对边界条件进行自定义设置。

Ansys Fluent中有以下几种自定义边界条件的方法:

利用profile文件赋值

采用Fluent Expressions定义

编写UDF

今天,我们来了解一下如何采用Fluent Expressions定义边界条件。


从2019版本开始,Fluent中加入了和CFX中的表达式功能类似的“Fluent Expression Language”(表达式语言)。它是一种基于Python的解释型的声明式语言,是由数值、变量、运算符、函数组成的可以返回一定值的字符串,例如,Vmax*(5.0*exp(-t-0.3 [s]/2.8 [s]))。

表达式可以指定与时间、迭代步、位置、求解变量相关的复杂的边界条件和源项,基于时间和迭代步指定不同的模型和求解器设置。同一个表达式对Windows和Linux都适用。

表达式可以取代部分UDF、Scheme、Journal的功能,虽然不能完全取代,但比UDF、scheme更加易学易用,是非常值得学习的一个功能。 

表达式的值可以是实数,整数,布尔值或数量。数量是具有量纲的实数。数量格式为<number> [<unit>],例如2324.0 [Pa kg ^ -3 s]。

表达式的计算结果可以是实数,布尔值,实数场或布尔值场。例如,2 * StaticPressure在一个区域上计算时,会返回real field(实数场);而average(2 * StaticPressure,[“ inlet”])返回的是一个实数值。

表达式包含很多运算符和函数,如下表所示。

描述

函数

运算符

+, -, *, /, ** (power), ^ (power), >, >=, <, <=, ==, !=

传统

AND(<expr>, <expr>, …)

IF(<cond>, <true_value>, <false_value>)

NOT(<expr>)

OR(<expr>, <expr>, …)

XOR(<expr>)

双曲线

acosh(<expr>)

asinh(<expr>)

atanh(<expr>)

cosh(<expr>)

sinh(<expr>)

tanh(<expr>)

数学

abs(<expr>)

*besselJ(n**, <expr>)

*besselY(n**, <expr>)

ceil(<expr>)

exp(<expr>)

floor(<expr>)

gradient(<expr>)

log(<expr>)

log10(<expr>)

max(<expr>, <expr>, …)

min(<expr>,<expr>, …)

mod(<expr>, <expr>)

normalize(<expr>,[<location>,…])

round(<expr>)

sqrt(<expr>)

step(<expr>)

trunc(<expr>)

*besselJ 是第一类贝塞尔函数,besselY 是第二类贝塞尔函数。

**n 必须是“double”类型的常量。

归约

Area([<location>, <location>, …])

AreaAve(Field, ['location'])

AreaInt(Field, ['location'])

*Average(<expr>, [<location>, <location>, …], Weight= <None| 'Area'| 'Volume'| 'Mass'| 'MassFlowRate'| 'AbsMassFlowRate'>)

Centroid(['location'])

Count(['location'])

CountIf(Boolean_Expr, ['location'])

Force (['location'], …)

MassAve(Field,['location'])

MassFlow(['location'])

MassFlowAve(Field, ['location'])

MassFlowAveAbs(Field, ['location'])

MassFlowInt(Field, ['inelt1'], ['inlet2'])

MassInt(Field, ['location'])

Maximum(<expr>, [<location>, <location>, …])

Minimum(<expr>, [<location>, <location>, …])

Moment(<point>, ['location'])

PressureForce(['location'], …)

*Sum(<expr>, [<location>, <location>, …], Weight= <None| 'Area'| 'Volume'| 'Mass'| 'MassFlowRate'| 'AbsMassFlowRate'>)

SumIf( Field, Boolean_Expr, ['location'], Weight=[Weight])

ViscousForce([<location>, <location>, …])

Volume([<location>, <location>, …])

VolumeAve(Field, ['location'])

VolumeInt(Field, ['location'])

三角

acos(<expr>)

asin(<expr>)

atan(<expr>)

atan2(<expr>, <expr>)

cos(<expr>)

sin(<expr>)

tan(<expr>)

矢量

cross(<expr>, <expr>)

dot <vector1>, <vector2>)

unitVector(<x>, <y>, <z>)

<vector>.dir

vector(<x>, <y>, <z>, ["unit"])

 

不要在单个表达式中使用多个比较运算符,因为该运算将无法 正常工作。 例如,400 [K]> StaticTemperature> 300 [K]将不起作用。要完成此表达式,请使用AND(StaticTemperature> 300 [K],StaticTemperature <400 [K])。

 

表达式的数据主要来源有场变量、求解变量、科学常数、别名(Aliases)、profiles。Fluent 后处理场变量的子集可用于表达式。求解变量有当前时间Time、当前时间步Timestep、当前时间步长DeltaTime 和全局迭代次数Iteration。

科学常数,如下表所示。

变量

描述

PI

圆周率Pi

3.14159265358979323846

e

自然对数的底数e

2.71828182845904523536

R

气体常数

8.314472 [J K^-1 mol^-1]

avogadro

阿伏伽德罗常数

6.02214199e23 [mol^-1]

boltzmann

玻尔兹曼常数

1.3806503 [J K^-1]

clight

光速

2.99792458e8 [m s^-1]

echarge

电子电荷

1.60217653e-19 [A s]

g

重力加速度

9.8066502 [m s^-2]

planck

普朗克常数

6.62606876e-34 [J s]

stephan

斯蒂芬-玻尔兹曼常数

5.670400e-08 [W m^-2 K^-2]

mupermo

磁导率

4.0*PI*1.0e-7 [N A^-2]

epspermo

介电常数

1./(clight*clight*mupermo)

 利用别名可以引用一些常用的参数,如下表所示

别名

变量

x

Position.x

y

Position.y

z

Position.z

u

Velocity.x

v

Velocity.y

w

Velocity.z

t

Time*

*在稳态下,时间评估为 0,除非案例在瞬态中运行,然后切换到稳态,在这种情况下,它将评估为瞬态运行的最晚时间。

dt

DeltaTime*

*在稳态下,增量时间评估为 0,除非案例在瞬态运行,然后切换到稳态,在这种情况下,它将评估为瞬态运行的最新增量时间。

iter

Global iteration count

T

StaticTemperature

P

StaticPressure

mf

MassFraction

Amag

FaceAreaMagnitude

vol

CellVolume

mass

CellVolume*Density

 

可以在表达式中使用profile来指定边界和单元区域条件,用于后处理和归约操作。profile是可以导入到 Fluent 中的表格数据,除了一个或多个因变量列之外,通常还包含 X、Y 和 Z 列(对于空间profile)或时间(对于瞬态profile)。在表达式中使用profile之前,您必须加载一个或多个profile。

profile表达式需要以下输入:profile(‘<profile-name>’, ‘<field-name>’, frame=‘<reference-frame-name>’)(reference frame参数仅适用于空间profile)。定义profile表达式后,您可以为所需的边界条件或单元域条件字段选择它。

profile表达式示例如图1。

图1 profile表达式 


来源:艾迪捷
ACTFluentCFXUDF通用航空航天船舶核能pythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-09-08
最近编辑:1天前
艾迪捷
MBD CAE解决方案专家
获赞 2粉丝 1文章 309课程 0
点赞
收藏
作者推荐

技术干货 | 电路板分布式电磁损耗对电子系统热仿真精度的影响

电子产品系统热分析过程中,热分析工程师往往容易忽略电路板上的分布式电磁损耗,特别是大电流电源系统和射频损耗,分布式电磁损耗对热仿真结果精度有很大影响。多物理场耦合及交互作用分析,对于准确的系统仿真至关重要。通过以下案例的分析对比,我们来看一下电路板分布式电磁损耗对电子系统热仿真精度的影响。01 1、电子产品样机工作不稳定某电子产品样机测试时发现电路板局部过热,电源芯片工作不稳定。点温测试电源芯片温度高达85.9度,几个主要芯片工作温度也超过70度。02 2、热仿真回归分析对该电路板做热分析,几个主要发热器件热耗和环境温度都准确获得,并一一对应设置到电子散热仿真工具Icepak中。热分析结果如下图,电源芯片温度只有61.6度,几个主要芯片仿真温度也都在55度以上,和测试温度相差很大。 难道仿真置信度不高?03 电磁-热联合多物理场仿真分析发现,该电路板电源系统供电输出电流很大,如下图示。电路板上电源压降损耗较大,板内存在分布式电磁损耗。 如何在热仿真中考虑电路板电磁损耗形成的分布式热源?传统的热仿真工具对于处理有明显单一热源的问题可行,但往往对于电子系统中的分布式热源发热问题束手无策,Ansys多物理场仿真平台对电磁-热双向耦合提供了完整的分析解决方案。 03 3.1 Ansys SIwave仿真电源大电流压降SIwave导入电路板设计文件,设置实际工况下的工作电压和电流大小,做压降分析。电源层电流密度仿真结果如下图。03 3.2 Ansys Icepak仿真温度场 压降仿真完成后,在SIwave中可直接启动电磁热耦合仿真分析,将压降仿真中的分布式电磁损耗数据作为分布式热源传递给热仿真工具Icepak,同时可添加发热器件热耗、环境温度和散热条件作为仿真输入。 仿真结果电源芯片温度高达89.2度。仿真测试温度对比如下表格。 04 结论 电磁热联合多物理场仿真结果非常接近实测情况,该案例我们完全可以在设计过程中采用Ansys多物理场联合分析对散热风险进行评估,并采取适当优化措施规避风险,避免后期损失。 来源:艾迪捷

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈